diff options
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/omap2/dss/apply.c | 62 |
1 files changed, 27 insertions, 35 deletions
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c index d5505becd065..9916eb8e20d5 100644 --- a/drivers/video/omap2/dss/apply.c +++ b/drivers/video/omap2/dss/apply.c | |||
@@ -31,8 +31,10 @@ | |||
31 | * We have 4 levels of cache for the dispc settings. First two are in SW and | 31 | * We have 4 levels of cache for the dispc settings. First two are in SW and |
32 | * the latter two in HW. | 32 | * the latter two in HW. |
33 | * | 33 | * |
34 | * set_info() | ||
35 | * v | ||
34 | * +--------------------+ | 36 | * +--------------------+ |
35 | * |overlay/manager_info| | 37 | * | user_info | |
36 | * +--------------------+ | 38 | * +--------------------+ |
37 | * v | 39 | * v |
38 | * apply() | 40 | * apply() |
@@ -59,16 +61,11 @@ struct ovl_priv_data { | |||
59 | bool user_info_dirty; | 61 | bool user_info_dirty; |
60 | struct omap_overlay_info user_info; | 62 | struct omap_overlay_info user_info; |
61 | 63 | ||
62 | /* If true, cache changed, but not written to shadow registers. Set | 64 | bool info_dirty; |
63 | * in apply(), cleared when registers written. */ | ||
64 | bool dirty; | ||
65 | /* If true, shadow registers contain changed values not yet in real | ||
66 | * registers. Set when writing to shadow registers, cleared at | ||
67 | * VSYNC/EVSYNC */ | ||
68 | bool shadow_dirty; | ||
69 | |||
70 | struct omap_overlay_info info; | 65 | struct omap_overlay_info info; |
71 | 66 | ||
67 | bool shadow_info_dirty; | ||
68 | |||
72 | bool extra_info_dirty; | 69 | bool extra_info_dirty; |
73 | bool shadow_extra_info_dirty; | 70 | bool shadow_extra_info_dirty; |
74 | 71 | ||
@@ -82,16 +79,11 @@ struct mgr_priv_data { | |||
82 | bool user_info_dirty; | 79 | bool user_info_dirty; |
83 | struct omap_overlay_manager_info user_info; | 80 | struct omap_overlay_manager_info user_info; |
84 | 81 | ||
85 | /* If true, cache changed, but not written to shadow registers. Set | 82 | bool info_dirty; |
86 | * in apply(), cleared when registers written. */ | ||
87 | bool dirty; | ||
88 | /* If true, shadow registers contain changed values not yet in real | ||
89 | * registers. Set when writing to shadow registers, cleared at | ||
90 | * VSYNC/EVSYNC */ | ||
91 | bool shadow_dirty; | ||
92 | |||
93 | struct omap_overlay_manager_info info; | 83 | struct omap_overlay_manager_info info; |
94 | 84 | ||
85 | bool shadow_info_dirty; | ||
86 | |||
95 | /* If true, GO bit is up and shadow registers cannot be written. | 87 | /* If true, GO bit is up and shadow registers cannot be written. |
96 | * Never true for manual update displays */ | 88 | * Never true for manual update displays */ |
97 | bool busy; | 89 | bool busy; |
@@ -199,7 +191,7 @@ static bool need_isr(void) | |||
199 | return true; | 191 | return true; |
200 | 192 | ||
201 | /* to write new values to registers */ | 193 | /* to write new values to registers */ |
202 | if (mp->dirty) | 194 | if (mp->info_dirty) |
203 | return true; | 195 | return true; |
204 | 196 | ||
205 | list_for_each_entry(ovl, &mgr->overlays, list) { | 197 | list_for_each_entry(ovl, &mgr->overlays, list) { |
@@ -211,7 +203,7 @@ static bool need_isr(void) | |||
211 | continue; | 203 | continue; |
212 | 204 | ||
213 | /* to write new values to registers */ | 205 | /* to write new values to registers */ |
214 | if (op->dirty || op->extra_info_dirty) | 206 | if (op->info_dirty || op->extra_info_dirty) |
215 | return true; | 207 | return true; |
216 | } | 208 | } |
217 | } | 209 | } |
@@ -228,12 +220,12 @@ static bool need_go(struct omap_overlay_manager *mgr) | |||
228 | 220 | ||
229 | mp = get_mgr_priv(mgr); | 221 | mp = get_mgr_priv(mgr); |
230 | 222 | ||
231 | if (mp->shadow_dirty) | 223 | if (mp->shadow_info_dirty) |
232 | return true; | 224 | return true; |
233 | 225 | ||
234 | list_for_each_entry(ovl, &mgr->overlays, list) { | 226 | list_for_each_entry(ovl, &mgr->overlays, list) { |
235 | op = get_ovl_priv(ovl); | 227 | op = get_ovl_priv(ovl); |
236 | if (op->shadow_dirty || op->shadow_extra_info_dirty) | 228 | if (op->shadow_info_dirty || op->shadow_extra_info_dirty) |
237 | return true; | 229 | return true; |
238 | } | 230 | } |
239 | 231 | ||
@@ -264,8 +256,8 @@ int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr) | |||
264 | bool shadow_dirty, dirty; | 256 | bool shadow_dirty, dirty; |
265 | 257 | ||
266 | spin_lock_irqsave(&data_lock, flags); | 258 | spin_lock_irqsave(&data_lock, flags); |
267 | dirty = mp->dirty; | 259 | dirty = mp->info_dirty; |
268 | shadow_dirty = mp->shadow_dirty; | 260 | shadow_dirty = mp->shadow_info_dirty; |
269 | spin_unlock_irqrestore(&data_lock, flags); | 261 | spin_unlock_irqrestore(&data_lock, flags); |
270 | 262 | ||
271 | if (!dirty && !shadow_dirty) { | 263 | if (!dirty && !shadow_dirty) { |
@@ -327,8 +319,8 @@ int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl) | |||
327 | bool shadow_dirty, dirty; | 319 | bool shadow_dirty, dirty; |
328 | 320 | ||
329 | spin_lock_irqsave(&data_lock, flags); | 321 | spin_lock_irqsave(&data_lock, flags); |
330 | dirty = op->dirty; | 322 | dirty = op->info_dirty; |
331 | shadow_dirty = op->shadow_dirty; | 323 | shadow_dirty = op->shadow_info_dirty; |
332 | spin_unlock_irqrestore(&data_lock, flags); | 324 | spin_unlock_irqrestore(&data_lock, flags); |
333 | 325 | ||
334 | if (!dirty && !shadow_dirty) { | 326 | if (!dirty && !shadow_dirty) { |
@@ -371,7 +363,7 @@ static void dss_ovl_write_regs(struct omap_overlay *ovl) | |||
371 | 363 | ||
372 | DSSDBGF("%d", ovl->id); | 364 | DSSDBGF("%d", ovl->id); |
373 | 365 | ||
374 | if (!op->enabled || !op->dirty) | 366 | if (!op->enabled || !op->info_dirty) |
375 | return; | 367 | return; |
376 | 368 | ||
377 | oi = &op->info; | 369 | oi = &op->info; |
@@ -396,9 +388,9 @@ static void dss_ovl_write_regs(struct omap_overlay *ovl) | |||
396 | 388 | ||
397 | mp = get_mgr_priv(ovl->manager); | 389 | mp = get_mgr_priv(ovl->manager); |
398 | 390 | ||
399 | op->dirty = false; | 391 | op->info_dirty = false; |
400 | if (mp->updating) | 392 | if (mp->updating) |
401 | op->shadow_dirty = true; | 393 | op->shadow_info_dirty = true; |
402 | } | 394 | } |
403 | 395 | ||
404 | static void dss_ovl_write_regs_extra(struct omap_overlay *ovl) | 396 | static void dss_ovl_write_regs_extra(struct omap_overlay *ovl) |
@@ -443,12 +435,12 @@ static void dss_mgr_write_regs(struct omap_overlay_manager *mgr) | |||
443 | dss_ovl_write_regs_extra(ovl); | 435 | dss_ovl_write_regs_extra(ovl); |
444 | } | 436 | } |
445 | 437 | ||
446 | if (mp->dirty) { | 438 | if (mp->info_dirty) { |
447 | dispc_mgr_setup(mgr->id, &mp->info); | 439 | dispc_mgr_setup(mgr->id, &mp->info); |
448 | 440 | ||
449 | mp->dirty = false; | 441 | mp->info_dirty = false; |
450 | if (mp->updating) | 442 | if (mp->updating) |
451 | mp->shadow_dirty = true; | 443 | mp->shadow_info_dirty = true; |
452 | } | 444 | } |
453 | } | 445 | } |
454 | 446 | ||
@@ -548,11 +540,11 @@ static void mgr_clear_shadow_dirty(struct omap_overlay_manager *mgr) | |||
548 | struct ovl_priv_data *op; | 540 | struct ovl_priv_data *op; |
549 | 541 | ||
550 | mp = get_mgr_priv(mgr); | 542 | mp = get_mgr_priv(mgr); |
551 | mp->shadow_dirty = false; | 543 | mp->shadow_info_dirty = false; |
552 | 544 | ||
553 | list_for_each_entry(ovl, &mgr->overlays, list) { | 545 | list_for_each_entry(ovl, &mgr->overlays, list) { |
554 | op = get_ovl_priv(ovl); | 546 | op = get_ovl_priv(ovl); |
555 | op->shadow_dirty = false; | 547 | op->shadow_info_dirty = false; |
556 | op->shadow_extra_info_dirty = false; | 548 | op->shadow_extra_info_dirty = false; |
557 | } | 549 | } |
558 | } | 550 | } |
@@ -606,7 +598,7 @@ static void omap_dss_mgr_apply_ovl(struct omap_overlay *ovl) | |||
606 | return; | 598 | return; |
607 | 599 | ||
608 | op->user_info_dirty = false; | 600 | op->user_info_dirty = false; |
609 | op->dirty = true; | 601 | op->info_dirty = true; |
610 | op->info = op->user_info; | 602 | op->info = op->user_info; |
611 | } | 603 | } |
612 | 604 | ||
@@ -625,7 +617,7 @@ static void omap_dss_mgr_apply_mgr(struct omap_overlay_manager *mgr) | |||
625 | return; | 617 | return; |
626 | 618 | ||
627 | mp->user_info_dirty = false; | 619 | mp->user_info_dirty = false; |
628 | mp->dirty = true; | 620 | mp->info_dirty = true; |
629 | mp->info = mp->user_info; | 621 | mp->info = mp->user_info; |
630 | } | 622 | } |
631 | 623 | ||