summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2012-09-05 14:09:33 +0300
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-09-07 20:02:13 +0300
commitb82fe7f025183897880771dd7cdf725ecc148ff2 (patch)
treec780a0d02442250f3c63f285930065d14268756e
parent66a0f9e4ac46144fb86ebe90f58ce6f416a55cd5 (diff)
downloadlinux-3.10-b82fe7f025183897880771dd7cdf725ecc148ff2.tar.gz
linux-3.10-b82fe7f025183897880771dd7cdf725ecc148ff2.tar.bz2
linux-3.10-b82fe7f025183897880771dd7cdf725ecc148ff2.zip
OMAPDSS: fix set_timings
set_timings function of DSS's output drivers are not consistent. Some of them disable the output, set the timings, and re-enable the output. Some set the timings on the fly, while the output is enabled. And some just store the given timings, so that they will be taken into use next time the output is enabled. We require the DISPC output to be disabled when changing the timings, and so we can change all the output drivers' set_timings to just store the given timings. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--drivers/video/omap2/dss/display.c4
-rw-r--r--drivers/video/omap2/dss/dpi.c14
-rw-r--r--drivers/video/omap2/dss/hdmi.c12
-rw-r--r--drivers/video/omap2/dss/sdi.c10
-rw-r--r--drivers/video/omap2/dss/venc.c13
5 files changed, 4 insertions, 49 deletions
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index 5bd957e8550..5f09d503d61 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -142,7 +142,11 @@ static ssize_t display_timings_store(struct device *dev,
if (r)
return r;
+ dssdev->driver->disable(dssdev);
dssdev->driver->set_timings(dssdev, &t);
+ r = dssdev->driver->enable(dssdev);
+ if (r)
+ return r;
return size;
}
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 99b9851f842..5ccce9b69e4 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -277,26 +277,12 @@ EXPORT_SYMBOL(omapdss_dpi_display_disable);
void omapdss_dpi_set_timings(struct omap_dss_device *dssdev,
struct omap_video_timings *timings)
{
- int r;
-
DSSDBG("dpi_set_timings\n");
mutex_lock(&dpi.lock);
dpi.timings = *timings;
- if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
- r = dispc_runtime_get();
- if (r)
- return;
-
- dpi_set_mode(dssdev);
-
- dispc_runtime_put();
- } else {
- dss_mgr_set_timings(dssdev->manager, timings);
- }
-
mutex_unlock(&dpi.lock);
}
EXPORT_SYMBOL(omapdss_dpi_set_timings);
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index ccfc677c910..83f18458a40 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -632,18 +632,6 @@ void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev,
if (t != NULL)
hdmi.ip_data.cfg = *t;
- if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
- int r;
-
- hdmi_power_off(dssdev);
-
- r = hdmi_power_on(dssdev);
- if (r)
- DSSERR("failed to power on device\n");
- } else {
- dss_mgr_set_timings(dssdev->manager, &t->timings);
- }
-
mutex_unlock(&hdmi.lock);
}
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 3bf1bfe2958..c87e07ebb16 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -152,17 +152,7 @@ EXPORT_SYMBOL(omapdss_sdi_display_disable);
void omapdss_sdi_set_timings(struct omap_dss_device *dssdev,
struct omap_video_timings *timings)
{
- int r;
-
sdi.timings = *timings;
-
- if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
- omapdss_sdi_display_disable(dssdev);
-
- r = omapdss_sdi_display_enable(dssdev);
- if (r)
- DSSERR("failed to set new timings\n");
- }
}
EXPORT_SYMBOL(omapdss_sdi_set_timings);
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 45252cf034b..17b31029a79 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -564,19 +564,6 @@ void omapdss_venc_set_timings(struct omap_dss_device *dssdev,
venc.timings = *timings;
- if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
- int r;
-
- /* turn the venc off and on to get new timings to use */
- venc_power_off(dssdev);
-
- r = venc_power_on(dssdev);
- if (r)
- DSSERR("failed to power on VENC\n");
- } else {
- dss_mgr_set_timings(dssdev->manager, timings);
- }
-
mutex_unlock(&venc.venc_lock);
}