diff options
Diffstat (limited to 'drivers/video/omap2/dss')
| -rw-r--r-- | drivers/video/omap2/dss/core.c | 43 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dispc.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dsi.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dss.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/rfbi.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/venc.c | 2 | 
7 files changed, 33 insertions, 22 deletions
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c index 5066eee10cc..58bd9c27369 100644 --- a/drivers/video/omap2/dss/core.c +++ b/drivers/video/omap2/dss/core.c @@ -32,6 +32,7 @@  #include <linux/io.h>  #include <linux/device.h>  #include <linux/regulator/consumer.h> +#include <linux/suspend.h>  #include <video/omapdss.h> @@ -201,6 +202,28 @@ int dss_debugfs_create_file(const char *name, void (*write)(struct seq_file *))  #endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */  /* PLATFORM DEVICE */ +static int omap_dss_pm_notif(struct notifier_block *b, unsigned long v, void *d) +{ +	DSSDBG("pm notif %lu\n", v); + +	switch (v) { +	case PM_SUSPEND_PREPARE: +		DSSDBG("suspending displays\n"); +		return dss_suspend_all_devices(); + +	case PM_POST_SUSPEND: +		DSSDBG("resuming displays\n"); +		return dss_resume_all_devices(); + +	default: +		return 0; +	} +} + +static struct notifier_block omap_dss_pm_notif_block = { +	.notifier_call = omap_dss_pm_notif, +}; +  static int __init omap_dss_probe(struct platform_device *pdev)  {  	struct omap_dss_board_info *pdata = pdev->dev.platform_data; @@ -224,6 +247,8 @@ static int __init omap_dss_probe(struct platform_device *pdev)  	else if (pdata->default_device)  		core.default_display_name = pdata->default_device->name; +	register_pm_notifier(&omap_dss_pm_notif_block); +  	return 0;  err_debugfs: @@ -233,6 +258,8 @@ err_debugfs:  static int omap_dss_remove(struct platform_device *pdev)  { +	unregister_pm_notifier(&omap_dss_pm_notif_block); +  	dss_uninitialize_debugfs();  	dss_uninit_overlays(pdev); @@ -247,25 +274,9 @@ static void omap_dss_shutdown(struct platform_device *pdev)  	dss_disable_all_devices();  } -static int omap_dss_suspend(struct platform_device *pdev, pm_message_t state) -{ -	DSSDBG("suspend %d\n", state.event); - -	return dss_suspend_all_devices(); -} - -static int omap_dss_resume(struct platform_device *pdev) -{ -	DSSDBG("resume\n"); - -	return dss_resume_all_devices(); -} -  static struct platform_driver omap_dss_driver = {  	.remove         = omap_dss_remove,  	.shutdown	= omap_dss_shutdown, -	.suspend	= omap_dss_suspend, -	.resume		= omap_dss_resume,  	.driver         = {  		.name   = "omapdss",  		.owner  = THIS_MODULE, diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index 4749ac35646..397d4eee11b 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c @@ -384,7 +384,7 @@ void dispc_runtime_put(void)  	DSSDBG("dispc_runtime_put\n");  	r = pm_runtime_put_sync(&dispc.pdev->dev); -	WARN_ON(r < 0); +	WARN_ON(r < 0 && r != -ENOSYS);  }  static inline bool dispc_mgr_is_lcd(enum omap_channel channel) diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c index ca8382d346e..14ce8cc079e 100644 --- a/drivers/video/omap2/dss/dsi.c +++ b/drivers/video/omap2/dss/dsi.c @@ -1075,7 +1075,7 @@ void dsi_runtime_put(struct platform_device *dsidev)  	DSSDBG("dsi_runtime_put\n");  	r = pm_runtime_put_sync(&dsi->pdev->dev); -	WARN_ON(r < 0); +	WARN_ON(r < 0 && r != -ENOSYS);  }  /* source clock for DSI PLL. this could also be PCLKFREE */ diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index 770632359a1..d2b57197b29 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c @@ -731,7 +731,7 @@ static void dss_runtime_put(void)  	DSSDBG("dss_runtime_put\n");  	r = pm_runtime_put_sync(&dss.pdev->dev); -	WARN_ON(r < 0 && r != -EBUSY); +	WARN_ON(r < 0 && r != -ENOSYS && r != -EBUSY);  }  /* DEBUGFS */ diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index 8195c7166d2..26a2430a702 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -138,7 +138,7 @@ static void hdmi_runtime_put(void)  	DSSDBG("hdmi_runtime_put\n");  	r = pm_runtime_put_sync(&hdmi.pdev->dev); -	WARN_ON(r < 0); +	WARN_ON(r < 0 && r != -ENOSYS);  }  static int __init hdmi_init_display(struct omap_dss_device *dssdev) diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c index 3d8c206e90e..7985fa12b9b 100644 --- a/drivers/video/omap2/dss/rfbi.c +++ b/drivers/video/omap2/dss/rfbi.c @@ -141,7 +141,7 @@ static void rfbi_runtime_put(void)  	DSSDBG("rfbi_runtime_put\n");  	r = pm_runtime_put_sync(&rfbi.pdev->dev); -	WARN_ON(r < 0); +	WARN_ON(r < 0 && r != -ENOSYS);  }  void rfbi_bus_lock(void) diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c index 2b8973931ff..3907c8b6ecb 100644 --- a/drivers/video/omap2/dss/venc.c +++ b/drivers/video/omap2/dss/venc.c @@ -402,7 +402,7 @@ static void venc_runtime_put(void)  	DSSDBG("venc_runtime_put\n");  	r = pm_runtime_put_sync(&venc.pdev->dev); -	WARN_ON(r < 0); +	WARN_ON(r < 0 && r != -ENOSYS);  }  static const struct venc_config *venc_timings_to_config(  |