Commit 918227bb authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'fbdev-fixes-for-3.5-2' of git://github.com/schandinat/linux-2.6

Pull fbdev fixes from Florian Tobias Schandinat:
 "Two fixes for OMAPDSS by Tomi Valkeinen:
   - one to avoid warnings when runtime PM is not enabled
   - one workaround to dependancy issues during suspend/resume"

* tag 'fbdev-fixes-for-3.5-2' of git://github.com/schandinat/linux-2.6:
  OMAPDSS: fix warnings if CONFIG_PM_RUNTIME=n
  OMAPDSS: Use PM notifiers for system suspend
parents 00c3e276 373b4365
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/suspend.h>
#include <video/omapdss.h> #include <video/omapdss.h>
...@@ -201,6 +202,28 @@ int dss_debugfs_create_file(const char *name, void (*write)(struct seq_file *)) ...@@ -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 */ #endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
/* PLATFORM DEVICE */ /* 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) static int __init omap_dss_probe(struct platform_device *pdev)
{ {
struct omap_dss_board_info *pdata = pdev->dev.platform_data; struct omap_dss_board_info *pdata = pdev->dev.platform_data;
...@@ -224,6 +247,8 @@ static int __init omap_dss_probe(struct platform_device *pdev) ...@@ -224,6 +247,8 @@ static int __init omap_dss_probe(struct platform_device *pdev)
else if (pdata->default_device) else if (pdata->default_device)
core.default_display_name = pdata->default_device->name; core.default_display_name = pdata->default_device->name;
register_pm_notifier(&omap_dss_pm_notif_block);
return 0; return 0;
err_debugfs: err_debugfs:
...@@ -233,6 +258,8 @@ static int __init omap_dss_probe(struct platform_device *pdev) ...@@ -233,6 +258,8 @@ static int __init omap_dss_probe(struct platform_device *pdev)
static int omap_dss_remove(struct platform_device *pdev) static int omap_dss_remove(struct platform_device *pdev)
{ {
unregister_pm_notifier(&omap_dss_pm_notif_block);
dss_uninitialize_debugfs(); dss_uninitialize_debugfs();
dss_uninit_overlays(pdev); dss_uninit_overlays(pdev);
...@@ -247,25 +274,9 @@ static void omap_dss_shutdown(struct platform_device *pdev) ...@@ -247,25 +274,9 @@ static void omap_dss_shutdown(struct platform_device *pdev)
dss_disable_all_devices(); 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 = { static struct platform_driver omap_dss_driver = {
.remove = omap_dss_remove, .remove = omap_dss_remove,
.shutdown = omap_dss_shutdown, .shutdown = omap_dss_shutdown,
.suspend = omap_dss_suspend,
.resume = omap_dss_resume,
.driver = { .driver = {
.name = "omapdss", .name = "omapdss",
.owner = THIS_MODULE, .owner = THIS_MODULE,
......
...@@ -384,7 +384,7 @@ void dispc_runtime_put(void) ...@@ -384,7 +384,7 @@ void dispc_runtime_put(void)
DSSDBG("dispc_runtime_put\n"); DSSDBG("dispc_runtime_put\n");
r = pm_runtime_put_sync(&dispc.pdev->dev); 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) static inline bool dispc_mgr_is_lcd(enum omap_channel channel)
......
...@@ -1075,7 +1075,7 @@ void dsi_runtime_put(struct platform_device *dsidev) ...@@ -1075,7 +1075,7 @@ void dsi_runtime_put(struct platform_device *dsidev)
DSSDBG("dsi_runtime_put\n"); DSSDBG("dsi_runtime_put\n");
r = pm_runtime_put_sync(&dsi->pdev->dev); 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 */ /* source clock for DSI PLL. this could also be PCLKFREE */
......
...@@ -731,7 +731,7 @@ static void dss_runtime_put(void) ...@@ -731,7 +731,7 @@ static void dss_runtime_put(void)
DSSDBG("dss_runtime_put\n"); DSSDBG("dss_runtime_put\n");
r = pm_runtime_put_sync(&dss.pdev->dev); r = pm_runtime_put_sync(&dss.pdev->dev);
WARN_ON(r < 0 && r != -EBUSY); WARN_ON(r < 0 && r != -ENOSYS && r != -EBUSY);
} }
/* DEBUGFS */ /* DEBUGFS */
......
...@@ -138,7 +138,7 @@ static void hdmi_runtime_put(void) ...@@ -138,7 +138,7 @@ static void hdmi_runtime_put(void)
DSSDBG("hdmi_runtime_put\n"); DSSDBG("hdmi_runtime_put\n");
r = pm_runtime_put_sync(&hdmi.pdev->dev); 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) static int __init hdmi_init_display(struct omap_dss_device *dssdev)
......
...@@ -141,7 +141,7 @@ static void rfbi_runtime_put(void) ...@@ -141,7 +141,7 @@ static void rfbi_runtime_put(void)
DSSDBG("rfbi_runtime_put\n"); DSSDBG("rfbi_runtime_put\n");
r = pm_runtime_put_sync(&rfbi.pdev->dev); r = pm_runtime_put_sync(&rfbi.pdev->dev);
WARN_ON(r < 0); WARN_ON(r < 0 && r != -ENOSYS);
} }
void rfbi_bus_lock(void) void rfbi_bus_lock(void)
......
...@@ -402,7 +402,7 @@ static void venc_runtime_put(void) ...@@ -402,7 +402,7 @@ static void venc_runtime_put(void)
DSSDBG("venc_runtime_put\n"); DSSDBG("venc_runtime_put\n");
r = pm_runtime_put_sync(&venc.pdev->dev); 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( static const struct venc_config *venc_timings_to_config(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment