提交 c1a9febf 编写于 作者: T Tomi Valkeinen

OMAPDSS: APPLY: move ovl->info to apply.c

struct omap_overlayr contains info and info_dirty fields, both of which
should be internal to apply.c.

This patch moves those fields into ovl_priv data, and names them
user_info and user_info_dirty.
Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
上级 388c4c6c
...@@ -55,6 +55,10 @@ ...@@ -55,6 +55,10 @@
*/ */
struct ovl_priv_data { struct ovl_priv_data {
bool user_info_dirty;
struct omap_overlay_info user_info;
/* If true, cache changed, but not written to shadow registers. Set /* If true, cache changed, but not written to shadow registers. Set
* in apply(), cleared when registers written. */ * in apply(), cleared when registers written. */
bool dirty; bool dirty;
...@@ -129,7 +133,38 @@ static struct mgr_priv_data *get_mgr_priv(struct omap_overlay_manager *mgr) ...@@ -129,7 +133,38 @@ static struct mgr_priv_data *get_mgr_priv(struct omap_overlay_manager *mgr)
void dss_apply_init(void) void dss_apply_init(void)
{ {
const int num_ovls = dss_feat_get_num_ovls();
int i;
spin_lock_init(&data_lock); spin_lock_init(&data_lock);
for (i = 0; i < num_ovls; ++i) {
struct ovl_priv_data *op;
op = &dss_data.ovl_priv_data_array[i];
op->info.global_alpha = 255;
switch (i) {
case 0:
op->info.zorder = 0;
break;
case 1:
op->info.zorder =
dss_has_feature(FEAT_ALPHA_FREE_ZORDER) ? 3 : 0;
break;
case 2:
op->info.zorder =
dss_has_feature(FEAT_ALPHA_FREE_ZORDER) ? 2 : 0;
break;
case 3:
op->info.zorder =
dss_has_feature(FEAT_ALPHA_FREE_ZORDER) ? 1 : 0;
break;
}
op->user_info = op->info;
}
} }
static bool ovl_manual_update(struct omap_overlay *ovl) static bool ovl_manual_update(struct omap_overlay *ovl)
...@@ -575,15 +610,15 @@ static void omap_dss_mgr_apply_ovl(struct omap_overlay *ovl) ...@@ -575,15 +610,15 @@ static void omap_dss_mgr_apply_ovl(struct omap_overlay *ovl)
if (ovl->manager_changed) { if (ovl->manager_changed) {
ovl->manager_changed = false; ovl->manager_changed = false;
ovl->info_dirty = true; op->user_info_dirty = true;
} }
if (!ovl->info_dirty) if (!op->user_info_dirty)
return; return;
ovl->info_dirty = false; op->user_info_dirty = false;
op->dirty = true; op->dirty = true;
op->info = ovl->info; op->info = op->user_info;
op->channel = ovl->manager->id; op->channel = ovl->manager->id;
} }
...@@ -821,12 +856,13 @@ int dss_mgr_unset_device(struct omap_overlay_manager *mgr) ...@@ -821,12 +856,13 @@ int dss_mgr_unset_device(struct omap_overlay_manager *mgr)
int dss_ovl_set_info(struct omap_overlay *ovl, int dss_ovl_set_info(struct omap_overlay *ovl,
struct omap_overlay_info *info) struct omap_overlay_info *info)
{ {
struct ovl_priv_data *op = get_ovl_priv(ovl);
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&data_lock, flags); spin_lock_irqsave(&data_lock, flags);
ovl->info = *info; op->user_info = *info;
ovl->info_dirty = true; op->user_info_dirty = true;
spin_unlock_irqrestore(&data_lock, flags); spin_unlock_irqrestore(&data_lock, flags);
...@@ -836,11 +872,12 @@ int dss_ovl_set_info(struct omap_overlay *ovl, ...@@ -836,11 +872,12 @@ int dss_ovl_set_info(struct omap_overlay *ovl,
void dss_ovl_get_info(struct omap_overlay *ovl, void dss_ovl_get_info(struct omap_overlay *ovl,
struct omap_overlay_info *info) struct omap_overlay_info *info)
{ {
struct ovl_priv_data *op = get_ovl_priv(ovl);
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&data_lock, flags); spin_lock_irqsave(&data_lock, flags);
*info = ovl->info; *info = op->user_info;
spin_unlock_irqrestore(&data_lock, flags); spin_unlock_irqrestore(&data_lock, flags);
} }
......
...@@ -124,19 +124,31 @@ static ssize_t overlay_manager_store(struct omap_overlay *ovl, const char *buf, ...@@ -124,19 +124,31 @@ static ssize_t overlay_manager_store(struct omap_overlay *ovl, const char *buf,
static ssize_t overlay_input_size_show(struct omap_overlay *ovl, char *buf) static ssize_t overlay_input_size_show(struct omap_overlay *ovl, char *buf)
{ {
struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d,%d\n", return snprintf(buf, PAGE_SIZE, "%d,%d\n",
ovl->info.width, ovl->info.height); info.width, info.height);
} }
static ssize_t overlay_screen_width_show(struct omap_overlay *ovl, char *buf) static ssize_t overlay_screen_width_show(struct omap_overlay *ovl, char *buf)
{ {
return snprintf(buf, PAGE_SIZE, "%d\n", ovl->info.screen_width); struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d\n", info.screen_width);
} }
static ssize_t overlay_position_show(struct omap_overlay *ovl, char *buf) static ssize_t overlay_position_show(struct omap_overlay *ovl, char *buf)
{ {
struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d,%d\n", return snprintf(buf, PAGE_SIZE, "%d,%d\n",
ovl->info.pos_x, ovl->info.pos_y); info.pos_x, info.pos_y);
} }
static ssize_t overlay_position_store(struct omap_overlay *ovl, static ssize_t overlay_position_store(struct omap_overlay *ovl,
...@@ -170,8 +182,12 @@ static ssize_t overlay_position_store(struct omap_overlay *ovl, ...@@ -170,8 +182,12 @@ static ssize_t overlay_position_store(struct omap_overlay *ovl,
static ssize_t overlay_output_size_show(struct omap_overlay *ovl, char *buf) static ssize_t overlay_output_size_show(struct omap_overlay *ovl, char *buf)
{ {
struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d,%d\n", return snprintf(buf, PAGE_SIZE, "%d,%d\n",
ovl->info.out_width, ovl->info.out_height); info.out_width, info.out_height);
} }
static ssize_t overlay_output_size_store(struct omap_overlay *ovl, static ssize_t overlay_output_size_store(struct omap_overlay *ovl,
...@@ -231,8 +247,12 @@ static ssize_t overlay_enabled_store(struct omap_overlay *ovl, const char *buf, ...@@ -231,8 +247,12 @@ static ssize_t overlay_enabled_store(struct omap_overlay *ovl, const char *buf,
static ssize_t overlay_global_alpha_show(struct omap_overlay *ovl, char *buf) static ssize_t overlay_global_alpha_show(struct omap_overlay *ovl, char *buf)
{ {
struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d\n", return snprintf(buf, PAGE_SIZE, "%d\n",
ovl->info.global_alpha); info.global_alpha);
} }
static ssize_t overlay_global_alpha_store(struct omap_overlay *ovl, static ssize_t overlay_global_alpha_store(struct omap_overlay *ovl,
...@@ -269,8 +289,12 @@ static ssize_t overlay_global_alpha_store(struct omap_overlay *ovl, ...@@ -269,8 +289,12 @@ static ssize_t overlay_global_alpha_store(struct omap_overlay *ovl,
static ssize_t overlay_pre_mult_alpha_show(struct omap_overlay *ovl, static ssize_t overlay_pre_mult_alpha_show(struct omap_overlay *ovl,
char *buf) char *buf)
{ {
struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d\n", return snprintf(buf, PAGE_SIZE, "%d\n",
ovl->info.pre_mult_alpha); info.pre_mult_alpha);
} }
static ssize_t overlay_pre_mult_alpha_store(struct omap_overlay *ovl, static ssize_t overlay_pre_mult_alpha_store(struct omap_overlay *ovl,
...@@ -306,7 +330,11 @@ static ssize_t overlay_pre_mult_alpha_store(struct omap_overlay *ovl, ...@@ -306,7 +330,11 @@ static ssize_t overlay_pre_mult_alpha_store(struct omap_overlay *ovl,
static ssize_t overlay_zorder_show(struct omap_overlay *ovl, char *buf) static ssize_t overlay_zorder_show(struct omap_overlay *ovl, char *buf)
{ {
return snprintf(buf, PAGE_SIZE, "%d\n", ovl->info.zorder); struct omap_overlay_info info;
ovl->get_overlay_info(ovl, &info);
return snprintf(buf, PAGE_SIZE, "%d\n", info.zorder);
} }
static ssize_t overlay_zorder_store(struct omap_overlay *ovl, static ssize_t overlay_zorder_store(struct omap_overlay *ovl,
...@@ -456,29 +484,18 @@ void dss_init_overlays(struct platform_device *pdev) ...@@ -456,29 +484,18 @@ void dss_init_overlays(struct platform_device *pdev)
case 0: case 0:
ovl->name = "gfx"; ovl->name = "gfx";
ovl->id = OMAP_DSS_GFX; ovl->id = OMAP_DSS_GFX;
ovl->info.global_alpha = 255;
ovl->info.zorder = 0;
break; break;
case 1: case 1:
ovl->name = "vid1"; ovl->name = "vid1";
ovl->id = OMAP_DSS_VIDEO1; ovl->id = OMAP_DSS_VIDEO1;
ovl->info.global_alpha = 255;
ovl->info.zorder =
dss_has_feature(FEAT_ALPHA_FREE_ZORDER) ? 3 : 0;
break; break;
case 2: case 2:
ovl->name = "vid2"; ovl->name = "vid2";
ovl->id = OMAP_DSS_VIDEO2; ovl->id = OMAP_DSS_VIDEO2;
ovl->info.global_alpha = 255;
ovl->info.zorder =
dss_has_feature(FEAT_ALPHA_FREE_ZORDER) ? 2 : 0;
break; break;
case 3: case 3:
ovl->name = "vid3"; ovl->name = "vid3";
ovl->id = OMAP_DSS_VIDEO3; ovl->id = OMAP_DSS_VIDEO3;
ovl->info.global_alpha = 255;
ovl->info.zorder =
dss_has_feature(FEAT_ALPHA_FREE_ZORDER) ? 1 : 0;
break; break;
} }
......
...@@ -189,19 +189,19 @@ static int omapfb_query_plane(struct fb_info *fbi, struct omapfb_plane_info *pi) ...@@ -189,19 +189,19 @@ static int omapfb_query_plane(struct fb_info *fbi, struct omapfb_plane_info *pi)
memset(pi, 0, sizeof(*pi)); memset(pi, 0, sizeof(*pi));
} else { } else {
struct omap_overlay *ovl; struct omap_overlay *ovl;
struct omap_overlay_info *ovli; struct omap_overlay_info ovli;
ovl = ofbi->overlays[0]; ovl = ofbi->overlays[0];
ovli = &ovl->info; ovl->get_overlay_info(ovl, &ovli);
pi->pos_x = ovli->pos_x; pi->pos_x = ovli.pos_x;
pi->pos_y = ovli->pos_y; pi->pos_y = ovli.pos_y;
pi->enabled = ovl->is_enabled(ovl); pi->enabled = ovl->is_enabled(ovl);
pi->channel_out = 0; /* xxx */ pi->channel_out = 0; /* xxx */
pi->mirror = 0; pi->mirror = 0;
pi->mem_idx = get_mem_idx(ofbi); pi->mem_idx = get_mem_idx(ofbi);
pi->out_width = ovli->out_width; pi->out_width = ovli.out_width;
pi->out_height = ovli->out_height; pi->out_height = ovli.out_height;
} }
return 0; return 0;
......
...@@ -970,16 +970,20 @@ int omapfb_apply_changes(struct fb_info *fbi, int init) ...@@ -970,16 +970,20 @@ int omapfb_apply_changes(struct fb_info *fbi, int init)
outh = var->yres; outh = var->yres;
} }
} else { } else {
outw = ovl->info.out_width; struct omap_overlay_info info;
outh = ovl->info.out_height; ovl->get_overlay_info(ovl, &info);
outw = info.out_width;
outh = info.out_height;
} }
if (init) { if (init) {
posx = 0; posx = 0;
posy = 0; posy = 0;
} else { } else {
posx = ovl->info.pos_x; struct omap_overlay_info info;
posy = ovl->info.pos_y; ovl->get_overlay_info(ovl, &info);
posx = info.pos_x;
posy = info.pos_y;
} }
r = omapfb_setup_overlay(fbi, ovl, posx, posy, outw, outh); r = omapfb_setup_overlay(fbi, ovl, posx, posy, outw, outh);
......
...@@ -383,11 +383,8 @@ struct omap_overlay { ...@@ -383,11 +383,8 @@ struct omap_overlay {
/* dynamic fields */ /* dynamic fields */
struct omap_overlay_manager *manager; struct omap_overlay_manager *manager;
struct omap_overlay_info info;
bool manager_changed; bool manager_changed;
/* if true, info has been changed, but not applied() yet */
bool info_dirty;
int (*enable)(struct omap_overlay *ovl); int (*enable)(struct omap_overlay *ovl);
int (*disable)(struct omap_overlay *ovl); int (*disable)(struct omap_overlay *ovl);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册