Skip to content

Commit

Permalink
OMAPDSS: Remove manager->device references
Browse files Browse the repository at this point in the history
With the introduction of output entities, managers will now connect to outputs.
Create helper ops for overlays and managers named get_device. This will abstract
away the information on how to get the device from an overlay or an overlay
manager. The get_device ops currently retrieve the output via a
ovl->manager->device reference. This will be later replaced by
ovl->manager->output->device references.

Signed-off-by: Archit Taneja <archit@ti.com>
  • Loading branch information
Archit Taneja authored and Tomi Valkeinen committed Sep 26, 2012
1 parent 97f01b3 commit 794bc4e
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 10 deletions.
4 changes: 2 additions & 2 deletions drivers/video/omap2/dss/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -1464,7 +1464,7 @@ int dss_ovl_enable(struct omap_overlay *ovl)
goto err1;
}

if (ovl->manager == NULL || ovl->manager->device == NULL) {
if (ovl->get_device(ovl) == NULL) {
r = -EINVAL;
goto err1;
}
Expand Down Expand Up @@ -1514,7 +1514,7 @@ int dss_ovl_disable(struct omap_overlay *ovl)
goto err;
}

if (ovl->manager == NULL || ovl->manager->device == NULL) {
if (ovl->get_device(ovl) == NULL) {
r = -EINVAL;
goto err;
}
Expand Down
10 changes: 7 additions & 3 deletions drivers/video/omap2/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3595,7 +3595,7 @@ static void dispc_error_worker(struct work_struct *work)
bit = mgr_desc[i].sync_lost_irq;

if (bit & errors) {
struct omap_dss_device *dssdev = mgr->device;
struct omap_dss_device *dssdev = mgr->get_device(mgr);
bool enable;

DSSERR("SYNC_LOST on channel %s, restarting the output "
Expand Down Expand Up @@ -3626,9 +3626,13 @@ static void dispc_error_worker(struct work_struct *work)
DSSERR("OCP_ERR\n");
for (i = 0; i < omap_dss_get_num_overlay_managers(); ++i) {
struct omap_overlay_manager *mgr;
struct omap_dss_device *dssdev;

mgr = omap_dss_get_overlay_manager(i);
if (mgr->device && mgr->device->driver)
mgr->device->driver->disable(mgr->device);
dssdev = mgr->get_device(mgr);

if (dssdev && dssdev->driver)
dssdev->driver->disable(dssdev);
}
}

Expand Down
8 changes: 5 additions & 3 deletions drivers/video/omap2/dss/manager-sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ static ssize_t manager_name_show(struct omap_overlay_manager *mgr, char *buf)

static ssize_t manager_display_show(struct omap_overlay_manager *mgr, char *buf)
{
return snprintf(buf, PAGE_SIZE, "%s\n",
mgr->device ? mgr->device->name : "<none>");
struct omap_dss_device *dssdev = mgr->get_device(mgr);

return snprintf(buf, PAGE_SIZE, "%s\n", dssdev ?
dssdev->name : "<none>");
}

static ssize_t manager_display_store(struct omap_overlay_manager *mgr,
Expand Down Expand Up @@ -67,7 +69,7 @@ static ssize_t manager_display_store(struct omap_overlay_manager *mgr,
if (dssdev)
DSSDBG("display %s found\n", dssdev->name);

if (mgr->device) {
if (mgr->get_device(mgr)) {
r = mgr->unset_device(mgr);
if (r) {
DSSERR("failed to unset display\n");
Expand Down
11 changes: 9 additions & 2 deletions drivers/video/omap2/dss/manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,25 @@
static int num_managers;
static struct omap_overlay_manager *managers;

static inline struct omap_dss_device *dss_mgr_get_device(struct omap_overlay_manager *mgr)
{
return mgr->device;
}

static int dss_mgr_wait_for_vsync(struct omap_overlay_manager *mgr)
{
unsigned long timeout = msecs_to_jiffies(500);
struct omap_dss_device *dssdev = mgr->get_device(mgr);
u32 irq;
int r;

r = dispc_runtime_get();
if (r)
return r;

if (mgr->device->type == OMAP_DISPLAY_TYPE_VENC)
if (dssdev->type == OMAP_DISPLAY_TYPE_VENC)
irq = DISPC_IRQ_EVSYNC_ODD;
else if (mgr->device->type == OMAP_DISPLAY_TYPE_HDMI)
else if (dssdev->type == OMAP_DISPLAY_TYPE_HDMI)
irq = DISPC_IRQ_EVSYNC_EVEN;
else
irq = dispc_mgr_get_vsync_irq(mgr->id);
Expand Down Expand Up @@ -102,6 +108,7 @@ int dss_init_overlay_managers(struct platform_device *pdev)
mgr->get_manager_info = &dss_mgr_get_info;
mgr->wait_for_go = &dss_mgr_wait_for_go;
mgr->wait_for_vsync = &dss_mgr_wait_for_vsync;
mgr->get_device = &dss_mgr_get_device;

mgr->caps = 0;
mgr->supported_displays =
Expand Down
6 changes: 6 additions & 0 deletions drivers/video/omap2/dss/overlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@
static int num_overlays;
static struct omap_overlay *overlays;

static inline struct omap_dss_device *dss_ovl_get_device(struct omap_overlay *ovl)
{
return ovl->manager ? ovl->manager->device : NULL;
}

int omap_dss_get_num_overlays(void)
{
return num_overlays;
Expand Down Expand Up @@ -94,6 +99,7 @@ void dss_init_overlays(struct platform_device *pdev)
ovl->set_overlay_info = &dss_ovl_set_info;
ovl->get_overlay_info = &dss_ovl_get_info;
ovl->wait_for_go = &dss_mgr_wait_for_go_ovl;
ovl->get_device = &dss_ovl_get_device;

ovl->caps = dss_feat_get_overlay_caps(ovl->id);
ovl->supported_modes =
Expand Down
4 changes: 4 additions & 0 deletions include/video/omapdss.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,8 @@ struct omap_overlay {
struct omap_overlay_info *info);

int (*wait_for_go)(struct omap_overlay *ovl);

struct omap_dss_device *(*get_device)(struct omap_overlay *ovl);
};

struct omap_overlay_manager_info {
Expand Down Expand Up @@ -491,6 +493,8 @@ struct omap_overlay_manager {
int (*apply)(struct omap_overlay_manager *mgr);
int (*wait_for_go)(struct omap_overlay_manager *mgr);
int (*wait_for_vsync)(struct omap_overlay_manager *mgr);

struct omap_dss_device *(*get_device)(struct omap_overlay_manager *mgr);
};

/* 22 pins means 1 clk lane and 10 data lanes */
Expand Down

0 comments on commit 794bc4e

Please sign in to comment.