Skip to content

Commit

Permalink
OMAPDSS: fix set_timings
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tomi Valkeinen committed Sep 7, 2012
1 parent 66a0f9e commit b82fe7f
Show file tree
Hide file tree
Showing 5 changed files with 4 additions and 49 deletions.
4 changes: 4 additions & 0 deletions drivers/video/omap2/dss/display.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
14 changes: 0 additions & 14 deletions drivers/video/omap2/dss/dpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
12 changes: 0 additions & 12 deletions drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
10 changes: 0 additions & 10 deletions drivers/video/omap2/dss/sdi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
13 changes: 0 additions & 13 deletions drivers/video/omap2/dss/venc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down

0 comments on commit b82fe7f

Please sign in to comment.