Skip to content

Commit

Permalink
OMAPDSS: VENC: Maintain our own timings field in driver data
Browse files Browse the repository at this point in the history
The VENC driver currently relies on the timings in omap_dss_device struct to
configure the DISPC and VENC blocks accordingly. This makes the VENC interface
driver dependent on the omap_dss_device struct.

Make the VENC driver data maintain it's own timings field. The panel driver is
expected to call omapdss_venc_set_timings() to set these timings before the
panel is enabled. Call omapdss_venc_set_timings() before enabling
venc output, this is done to atleast have the venc output configured to the
panel's default timings if the DSS user didn't explicitly call the venc panel
driver's set_timings op.

Make the VENC panel driver configure the new timings is the omap_dss_device
struct(dssdev->panel.timings). The VENC driver is responsible for maintaining
only it's own copy of timings.

Signed-off-by: Archit Taneja <archit@ti.com>
  • Loading branch information
Archit Taneja committed Aug 15, 2012
1 parent 156fd99 commit a5abf47
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
12 changes: 7 additions & 5 deletions drivers/video/omap2/dss/venc.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ static struct {
struct regulator *vdda_dac_reg;

struct clk *tv_dac_clk;

struct omap_video_timings timings;
} venc;

static inline void venc_write_reg(int idx, u32 val)
Expand Down Expand Up @@ -432,7 +434,7 @@ static int venc_power_on(struct omap_dss_device *dssdev)
goto err0;

venc_reset();
venc_write_config(venc_timings_to_config(&dssdev->panel.timings));
venc_write_config(venc_timings_to_config(&venc.timings));

dss_set_venc_output(dssdev->phy.venc.type);
dss_set_dac_pwrdn_bgz(1);
Expand All @@ -449,7 +451,7 @@ static int venc_power_on(struct omap_dss_device *dssdev)

venc_write_reg(VENC_OUTPUT_CONTROL, l);

dss_mgr_set_timings(dssdev->manager, &dssdev->panel.timings);
dss_mgr_set_timings(dssdev->manager, &venc.timings);

r = regulator_enable(venc.vdda_dac_reg);
if (r)
Expand Down Expand Up @@ -556,10 +558,10 @@ void omapdss_venc_set_timings(struct omap_dss_device *dssdev,
mutex_lock(&venc.venc_lock);

/* Reset WSS data when the TV standard changes. */
if (memcmp(&dssdev->panel.timings, timings, sizeof(*timings)))
if (memcmp(&venc.timings, timings, sizeof(*timings)))
venc.wss_data = 0;

dssdev->panel.timings = *timings;
venc.timings = *timings;

if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
int r;
Expand Down Expand Up @@ -606,7 +608,7 @@ int omapdss_venc_set_wss(struct omap_dss_device *dssdev, u32 wss)

mutex_lock(&venc.venc_lock);

config = venc_timings_to_config(&dssdev->panel.timings);
config = venc_timings_to_config(&venc.timings);

/* Invert due to VENC_L21_WC_CTL:INV=1 */
venc.wss_data = (wss ^ 0xfffff) << 8;
Expand Down
3 changes: 3 additions & 0 deletions drivers/video/omap2/dss/venc_panel.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ static int venc_panel_enable(struct omap_dss_device *dssdev)
goto err;
}

omapdss_venc_set_timings(dssdev, &dssdev->panel.timings);

r = omapdss_venc_display_enable(dssdev);
if (r)
goto err;
Expand Down Expand Up @@ -183,6 +185,7 @@ static void venc_panel_set_timings(struct omap_dss_device *dssdev,
mutex_lock(&venc_panel.lock);

omapdss_venc_set_timings(dssdev, timings);
dssdev->panel.timings = *timings;

mutex_unlock(&venc_panel.lock);
}
Expand Down

0 comments on commit a5abf47

Please sign in to comment.