Skip to content

Commit

Permalink
OMAPDSS: APPLY: Remove display dependency from overlay and manager ch…
Browse files Browse the repository at this point in the history
…ecks

In order to check the validity of overlay and manager info, there was a need to
use the omap_dss_device struct to get the panel resolution. The manager's
private data in APPLY now contains the manager timings. Hence, we don't need to
rely on the display resolution any more.

Pass the manager's timings in private data to dss_mgr_check(). Remove the need
to pass omap_dss_device structs in the functions which check for the validity
of overlay and manager parameters.

Signed-off-by: Archit Taneja <archit@ti.com>
  • Loading branch information
Archit Taneja authored and Tomi Valkeinen committed May 9, 2012
1 parent 5dd747e commit 228b213
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 25 deletions.
24 changes: 11 additions & 13 deletions drivers/video/omap2/dss/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ static bool mgr_manual_update(struct omap_overlay_manager *mgr)
}

static int dss_check_settings_low(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev, bool applying)
bool applying)
{
struct omap_overlay_info *oi;
struct omap_overlay_manager_info *mi;
Expand Down Expand Up @@ -214,26 +214,24 @@ static int dss_check_settings_low(struct omap_overlay_manager *mgr,
ois[ovl->id] = oi;
}

return dss_mgr_check(mgr, dssdev, mi, ois);
return dss_mgr_check(mgr, mi, &mp->timings, ois);
}

/*
* check manager and overlay settings using overlay_info from data->info
*/
static int dss_check_settings(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev)
static int dss_check_settings(struct omap_overlay_manager *mgr)
{
return dss_check_settings_low(mgr, dssdev, false);
return dss_check_settings_low(mgr, false);
}

/*
* check manager and overlay settings using overlay_info from ovl->info if
* dirty and from data->info otherwise
*/
static int dss_check_settings_apply(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev)
static int dss_check_settings_apply(struct omap_overlay_manager *mgr)
{
return dss_check_settings_low(mgr, dssdev, true);
return dss_check_settings_low(mgr, true);
}

static bool need_isr(void)
Expand Down Expand Up @@ -687,7 +685,7 @@ static void dss_write_regs(void)
if (!mp->enabled || mgr_manual_update(mgr) || mp->busy)
continue;

r = dss_check_settings(mgr, mgr->device);
r = dss_check_settings(mgr);
if (r) {
DSSERR("cannot write registers for manager %s: "
"illegal configuration\n", mgr->name);
Expand Down Expand Up @@ -754,7 +752,7 @@ void dss_mgr_start_update(struct omap_overlay_manager *mgr)

WARN_ON(mp->updating);

r = dss_check_settings(mgr, mgr->device);
r = dss_check_settings(mgr);
if (r) {
DSSERR("cannot start manual update: illegal configuration\n");
spin_unlock_irqrestore(&data_lock, flags);
Expand Down Expand Up @@ -901,7 +899,7 @@ int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)

spin_lock_irqsave(&data_lock, flags);

r = dss_check_settings_apply(mgr, mgr->device);
r = dss_check_settings_apply(mgr);
if (r) {
spin_unlock_irqrestore(&data_lock, flags);
DSSERR("failed to apply settings: illegal configuration.\n");
Expand Down Expand Up @@ -1094,7 +1092,7 @@ int dss_mgr_enable(struct omap_overlay_manager *mgr)

mp->enabled = true;

r = dss_check_settings(mgr, mgr->device);
r = dss_check_settings(mgr);
if (r) {
DSSERR("failed to enable manager %d: check_settings failed\n",
mgr->id);
Expand Down Expand Up @@ -1466,7 +1464,7 @@ int dss_ovl_enable(struct omap_overlay *ovl)

op->enabling = true;

r = dss_check_settings(ovl->manager, ovl->manager->device);
r = dss_check_settings(ovl->manager);
if (r) {
DSSERR("failed to enable overlay %d: check_settings failed\n",
ovl->id);
Expand Down
7 changes: 4 additions & 3 deletions drivers/video/omap2/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ int dss_mgr_set_device(struct omap_overlay_manager *mgr,
int dss_mgr_unset_device(struct omap_overlay_manager *mgr);
void dss_mgr_set_timings(struct omap_overlay_manager *mgr,
struct omap_video_timings *timings);
const struct omap_video_timings *dss_mgr_get_timings(struct omap_overlay_manager *mgr);

bool dss_ovl_is_enabled(struct omap_overlay *ovl);
int dss_ovl_enable(struct omap_overlay *ovl);
Expand Down Expand Up @@ -211,8 +212,8 @@ int dss_mgr_simple_check(struct omap_overlay_manager *mgr,
int dss_mgr_check_timings(struct omap_overlay_manager *mgr,
const struct omap_video_timings *timings);
int dss_mgr_check(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev,
struct omap_overlay_manager_info *info,
const struct omap_video_timings *mgr_timings,
struct omap_overlay_info **overlay_infos);

/* overlay */
Expand All @@ -222,8 +223,8 @@ void dss_overlay_setup_dispc_manager(struct omap_overlay_manager *mgr);
void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
int dss_ovl_simple_check(struct omap_overlay *ovl,
const struct omap_overlay_info *info);
int dss_ovl_check(struct omap_overlay *ovl,
struct omap_overlay_info *info, struct omap_dss_device *dssdev);
int dss_ovl_check(struct omap_overlay *ovl, struct omap_overlay_info *info,
const struct omap_video_timings *mgr_timings);

/* DSS */
int dss_init_platform_driver(void);
Expand Down
6 changes: 3 additions & 3 deletions drivers/video/omap2/dss/manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -666,8 +666,8 @@ int dss_mgr_check_timings(struct omap_overlay_manager *mgr,
}

int dss_mgr_check(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev,
struct omap_overlay_manager_info *info,
const struct omap_video_timings *mgr_timings,
struct omap_overlay_info **overlay_infos)
{
struct omap_overlay *ovl;
Expand All @@ -679,7 +679,7 @@ int dss_mgr_check(struct omap_overlay_manager *mgr,
return r;
}

r = dss_mgr_check_timings(mgr, &dssdev->panel.timings);
r = dss_mgr_check_timings(mgr, mgr_timings);
if (r)
return r;

Expand All @@ -692,7 +692,7 @@ int dss_mgr_check(struct omap_overlay_manager *mgr,
if (oi == NULL)
continue;

r = dss_ovl_check(ovl, oi, dssdev);
r = dss_ovl_check(ovl, oi, mgr_timings);
if (r)
return r;
}
Expand Down
10 changes: 4 additions & 6 deletions drivers/video/omap2/dss/overlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -631,16 +631,14 @@ int dss_ovl_simple_check(struct omap_overlay *ovl,
return 0;
}

int dss_ovl_check(struct omap_overlay *ovl,
struct omap_overlay_info *info, struct omap_dss_device *dssdev)
int dss_ovl_check(struct omap_overlay *ovl, struct omap_overlay_info *info,
const struct omap_video_timings *mgr_timings)
{
u16 outw, outh;
u16 dw, dh;

if (dssdev == NULL)
return 0;

dssdev->driver->get_resolution(dssdev, &dw, &dh);
dw = mgr_timings->x_res;
dh = mgr_timings->y_res;

if ((ovl->caps & OMAP_DSS_OVL_CAP_SCALE) == 0) {
outw = info->width;
Expand Down

0 comments on commit 228b213

Please sign in to comment.