summaryrefslogtreecommitdiff
path: root/drivers/video/omap2/dss/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss/display.c')
-rw-r--r--drivers/video/omap2/dss/display.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index aa6dc7578abf..d2b0b690194d 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -601,8 +601,12 @@ static int dss_resume_device(struct device *dev, void *data)
if (dssdev->activate_after_resume && dssdev->driver->resume) {
r = dssdev->driver->resume(dssdev);
- if (r)
+ if (r) {
+ DSSERR("Failed to resume %s device (%d), disabling\n",
+ dssdev->name, r);
+ dssdev->driver->disable(dssdev);
return r;
+ }
}
dssdev->activate_after_resume = false;
@@ -628,7 +632,10 @@ static int dss_check_state_disabled(struct device *dev, void *data)
return -EINVAL;
}
-/* disables mainclk if all devices are suspended /disabled */
+/*
+ * Checks if all devices are suspended/disabled.
+ * Disables mainclk (DSS clocks on OMAP4) if true and do_clk_disable is true.
+ */
int dss_mainclk_state_disable(bool do_clk_disable)
{
int r;
@@ -637,8 +644,8 @@ int dss_mainclk_state_disable(bool do_clk_disable)
r = bus_for_each_dev(bus, NULL, NULL, dss_check_state_disabled);
if (r) {
- /* All devices are not disabled /suspended */
- return -EINVAL;
+ /* Some devices are not disabled/suspended */
+ return -EBUSY;
} else {
if (do_clk_disable) {
save_all_ctx();
@@ -648,7 +655,11 @@ int dss_mainclk_state_disable(bool do_clk_disable)
}
}
-/* enables mainclk if all devices are suspended /disabled */
+/*
+ * enables mainclk (DSS clocks on OMAP4 if all devices are either in disabled or
+ * suspended state before calling this function.
+ * Returns 0 on success.
+ */
int dss_mainclk_state_enable(void)
{
int r;
@@ -661,7 +672,7 @@ int dss_mainclk_state_enable(void)
return -EINVAL;
} else {
r = dss_mainclk_enable();
- if (!r)
+ if (r >= 0)
restore_all_ctx();
return 0;
}