Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 284933
b: refs/heads/master
c: eb70d73
h: refs/heads/master
i:
  284931: fb77738
v: v3
  • Loading branch information
Tomi Valkeinen committed Dec 2, 2011
1 parent 12769bc commit 647f521
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 87 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f77b30700e5c0a6b5220b3a964bf6c40d5e71416
refs/heads/master: eb70d739adf2266e744a784a1272f1c92a257b81
83 changes: 83 additions & 0 deletions trunk/drivers/video/omap2/dss/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,89 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
mgr->enabled = false;
}

int dss_mgr_set_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info)
{
int r;
struct omap_overlay_manager_info old_info;

old_info = mgr->info;
mgr->info = *info;

r = dss_check_manager(mgr);
if (r) {
mgr->info = old_info;
return r;
}

mgr->info_dirty = true;

return 0;
}

void dss_mgr_get_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info)
{
*info = mgr->info;
}

int dss_mgr_set_device(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev)
{
int r;
struct omap_overlay *ovl;

if (dssdev->manager) {
DSSERR("display '%s' already has a manager '%s'\n",
dssdev->name, dssdev->manager->name);
return -EINVAL;
}

if ((mgr->supported_displays & dssdev->type) == 0) {
DSSERR("display '%s' does not support manager '%s'\n",
dssdev->name, mgr->name);
return -EINVAL;
}

list_for_each_entry(ovl, &mgr->overlays, list) {
if (!ovl->info.enabled)
continue;

r = dss_check_overlay(ovl, dssdev);
if (r)
return r;
}

dssdev->manager = mgr;
mgr->device = dssdev;
mgr->device_changed = true;

return 0;
}

int dss_mgr_unset_device(struct omap_overlay_manager *mgr)
{
if (!mgr->device) {
DSSERR("failed to unset display, display not set.\n");
return -EINVAL;
}

/*
* Don't allow currently enabled displays to have the overlay manager
* pulled out from underneath them
*/
if (mgr->device->state != OMAP_DSS_DISPLAY_DISABLED)
return -EINVAL;

mgr->device->manager = NULL;
mgr->device = NULL;
mgr->device_changed = true;

return 0;
}



int dss_ovl_set_info(struct omap_overlay *ovl,
struct omap_overlay_info *info)
{
Expand Down
9 changes: 9 additions & 0 deletions trunk/drivers/video/omap2/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,16 @@ int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr);
int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
void dss_mgr_start_update(struct omap_overlay_manager *mgr);
int omap_dss_mgr_apply(struct omap_overlay_manager *mgr);

void dss_mgr_enable(struct omap_overlay_manager *mgr);
void dss_mgr_disable(struct omap_overlay_manager *mgr);
int dss_mgr_set_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info);
void dss_mgr_get_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info);
int dss_mgr_set_device(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev);
int dss_mgr_unset_device(struct omap_overlay_manager *mgr);

int dss_ovl_set_info(struct omap_overlay *ovl,
struct omap_overlay_info *info);
Expand Down Expand Up @@ -198,6 +206,7 @@ void default_get_overlay_fifo_thresholds(enum omap_plane plane,
/* manager */
int dss_init_overlay_managers(struct platform_device *pdev);
void dss_uninit_overlay_managers(struct platform_device *pdev);
int dss_check_manager(struct omap_overlay_manager *mgr);

/* overlay */
void dss_init_overlays(struct platform_device *pdev);
Expand Down
91 changes: 5 additions & 86 deletions trunk/drivers/video/omap2/dss/manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,61 +467,6 @@ static struct kobj_type manager_ktype = {
.default_attrs = manager_sysfs_attrs,
};

static int omap_dss_set_device(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev)
{
int r;
struct omap_overlay *ovl;

if (dssdev->manager) {
DSSERR("display '%s' already has a manager '%s'\n",
dssdev->name, dssdev->manager->name);
return -EINVAL;
}

if ((mgr->supported_displays & dssdev->type) == 0) {
DSSERR("display '%s' does not support manager '%s'\n",
dssdev->name, mgr->name);
return -EINVAL;
}

list_for_each_entry(ovl, &mgr->overlays, list) {
if (!ovl->info.enabled)
continue;

r = dss_check_overlay(ovl, dssdev);
if (r)
return r;
}

dssdev->manager = mgr;
mgr->device = dssdev;
mgr->device_changed = true;

return 0;
}

static int omap_dss_unset_device(struct omap_overlay_manager *mgr)
{
if (!mgr->device) {
DSSERR("failed to unset display, display not set.\n");
return -EINVAL;
}

/*
* Don't allow currently enabled displays to have the overlay manager
* pulled out from underneath them
*/
if (mgr->device->state != OMAP_DSS_DISPLAY_DISABLED)
return -EINVAL;

mgr->device->manager = NULL;
mgr->device = NULL;
mgr->device_changed = true;

return 0;
}

static int dss_mgr_wait_for_vsync(struct omap_overlay_manager *mgr)
{
unsigned long timeout = msecs_to_jiffies(500);
Expand All @@ -540,7 +485,7 @@ static int dss_mgr_wait_for_vsync(struct omap_overlay_manager *mgr)
return omap_dispc_wait_for_irq_interruptible_timeout(irq, timeout);
}

static int dss_check_manager(struct omap_overlay_manager *mgr)
int dss_check_manager(struct omap_overlay_manager *mgr)
{
if (dss_has_feature(FEAT_ALPHA_FIXED_ZORDER)) {
/*
Expand All @@ -557,32 +502,6 @@ static int dss_check_manager(struct omap_overlay_manager *mgr)
return 0;
}

static int omap_dss_mgr_set_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info)
{
int r;
struct omap_overlay_manager_info old_info;

old_info = mgr->info;
mgr->info = *info;

r = dss_check_manager(mgr);
if (r) {
mgr->info = old_info;
return r;
}

mgr->info_dirty = true;

return 0;
}

static void omap_dss_mgr_get_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info)
{
*info = mgr->info;
}

int dss_init_overlay_managers(struct platform_device *pdev)
{
int i, r;
Expand Down Expand Up @@ -612,11 +531,11 @@ int dss_init_overlay_managers(struct platform_device *pdev)
break;
}

mgr->set_device = &omap_dss_set_device;
mgr->unset_device = &omap_dss_unset_device;
mgr->set_device = &dss_mgr_set_device;
mgr->unset_device = &dss_mgr_unset_device;
mgr->apply = &omap_dss_mgr_apply;
mgr->set_manager_info = &omap_dss_mgr_set_info;
mgr->get_manager_info = &omap_dss_mgr_get_info;
mgr->set_manager_info = &dss_mgr_set_info;
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;

Expand Down

0 comments on commit 647f521

Please sign in to comment.