aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2
diff options
context:
space:
mode:
authorAmber Jain <amber@ti.com>2011-05-19 10:17:53 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-05-23 01:29:47 -0400
commitab5ca071e231e6d6da5f6aa9484a2cd233f7c746 (patch)
tree617204bdad3ab7e7d6cf0ee1a804f5722347f0dc /drivers/video/omap2
parent5719d35cce5b8f7c09cbf6860a37e9762b3bda72 (diff)
OMAP: DSS2: Add new registers for NV12 support
Add new registers specific to UV color component that are introduced in OMAP4. Add simple helper functions to configure the newly added registers. These new registers are mainly: - UV base address registers used specifically for NV12 color-format - FIR registers used for UV-color-component scaling on OMAP4 - Accumulator registers used for UV-color-component scaling Add these new registers to save/restore and DUMPREG functions. Also add two new features for OMAP4: - FEAT_HANDLE_UV_SEPARATE - this is used on OMAP4 as UV color-component requires separate handling. - FEAT_ATTR2 - this is used on OMAP4 to configure new ATTRIBUTES2 register. Signed-off-by: Amber Jain <amber@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2')
-rw-r--r--drivers/video/omap2/dss/dispc.c197
-rw-r--r--drivers/video/omap2/dss/dispc.h147
-rw-r--r--drivers/video/omap2/dss/dss_features.c5
-rw-r--r--drivers/video/omap2/dss/dss_features.h2
4 files changed, 349 insertions, 2 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index d16eb70bf5b..53c321c1382 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -217,6 +217,25 @@ void dispc_save_context(void)
217 for (i = 0; i < 8; i++) 217 for (i = 0; i < 8; i++)
218 SR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, i)); 218 SR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, i));
219 219
220 if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
221 SR(OVL_BA0_UV(OMAP_DSS_VIDEO1));
222 SR(OVL_BA1_UV(OMAP_DSS_VIDEO1));
223 SR(OVL_FIR2(OMAP_DSS_VIDEO1));
224 SR(OVL_ACCU2_0(OMAP_DSS_VIDEO1));
225 SR(OVL_ACCU2_1(OMAP_DSS_VIDEO1));
226
227 for (i = 0; i < 8; i++)
228 SR(OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, i));
229
230 for (i = 0; i < 8; i++)
231 SR(OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, i));
232
233 for (i = 0; i < 8; i++)
234 SR(OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, i));
235 }
236 if (dss_has_feature(FEAT_ATTR2))
237 SR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO1));
238
220 SR(OVL_PRELOAD(OMAP_DSS_VIDEO1)); 239 SR(OVL_PRELOAD(OMAP_DSS_VIDEO1));
221 240
222 /* VID2 */ 241 /* VID2 */
@@ -245,6 +264,25 @@ void dispc_save_context(void)
245 for (i = 0; i < 8; i++) 264 for (i = 0; i < 8; i++)
246 SR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, i)); 265 SR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, i));
247 266
267 if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
268 SR(OVL_BA0_UV(OMAP_DSS_VIDEO2));
269 SR(OVL_BA1_UV(OMAP_DSS_VIDEO2));
270 SR(OVL_FIR2(OMAP_DSS_VIDEO2));
271 SR(OVL_ACCU2_0(OMAP_DSS_VIDEO2));
272 SR(OVL_ACCU2_1(OMAP_DSS_VIDEO2));
273
274 for (i = 0; i < 8; i++)
275 SR(OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, i));
276
277 for (i = 0; i < 8; i++)
278 SR(OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, i));
279
280 for (i = 0; i < 8; i++)
281 SR(OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, i));
282 }
283 if (dss_has_feature(FEAT_ATTR2))
284 SR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO2));
285
248 SR(OVL_PRELOAD(OMAP_DSS_VIDEO2)); 286 SR(OVL_PRELOAD(OMAP_DSS_VIDEO2));
249 287
250 if (dss_has_feature(FEAT_CORE_CLK_DIV)) 288 if (dss_has_feature(FEAT_CORE_CLK_DIV))
@@ -338,6 +376,25 @@ void dispc_restore_context(void)
338 for (i = 0; i < 8; i++) 376 for (i = 0; i < 8; i++)
339 RR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, i)); 377 RR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, i));
340 378
379 if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
380 RR(OVL_BA0_UV(OMAP_DSS_VIDEO1));
381 RR(OVL_BA1_UV(OMAP_DSS_VIDEO1));
382 RR(OVL_FIR2(OMAP_DSS_VIDEO1));
383 RR(OVL_ACCU2_0(OMAP_DSS_VIDEO1));
384 RR(OVL_ACCU2_1(OMAP_DSS_VIDEO1));
385
386 for (i = 0; i < 8; i++)
387 RR(OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, i));
388
389 for (i = 0; i < 8; i++)
390 RR(OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, i));
391
392 for (i = 0; i < 8; i++)
393 RR(OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, i));
394 }
395 if (dss_has_feature(FEAT_ATTR2))
396 RR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO1));
397
341 RR(OVL_PRELOAD(OMAP_DSS_VIDEO1)); 398 RR(OVL_PRELOAD(OMAP_DSS_VIDEO1));
342 399
343 /* VID2 */ 400 /* VID2 */
@@ -366,6 +423,25 @@ void dispc_restore_context(void)
366 for (i = 0; i < 8; i++) 423 for (i = 0; i < 8; i++)
367 RR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, i)); 424 RR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, i));
368 425
426 if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
427 RR(OVL_BA0_UV(OMAP_DSS_VIDEO2));
428 RR(OVL_BA1_UV(OMAP_DSS_VIDEO2));
429 RR(OVL_FIR2(OMAP_DSS_VIDEO2));
430 RR(OVL_ACCU2_0(OMAP_DSS_VIDEO2));
431 RR(OVL_ACCU2_1(OMAP_DSS_VIDEO2));
432
433 for (i = 0; i < 8; i++)
434 RR(OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, i));
435
436 for (i = 0; i < 8; i++)
437 RR(OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, i));
438
439 for (i = 0; i < 8; i++)
440 RR(OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, i));
441 }
442 if (dss_has_feature(FEAT_ATTR2))
443 RR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO2));
444
369 RR(OVL_PRELOAD(OMAP_DSS_VIDEO2)); 445 RR(OVL_PRELOAD(OMAP_DSS_VIDEO2));
370 446
371 if (dss_has_feature(FEAT_CORE_CLK_DIV)) 447 if (dss_has_feature(FEAT_CORE_CLK_DIV))
@@ -476,6 +552,27 @@ static void _dispc_write_firv_reg(enum omap_plane plane, int reg, u32 value)
476 dispc_write_reg(DISPC_OVL_FIR_COEF_V(plane, reg), value); 552 dispc_write_reg(DISPC_OVL_FIR_COEF_V(plane, reg), value);
477} 553}
478 554
555static void _dispc_write_firh2_reg(enum omap_plane plane, int reg, u32 value)
556{
557 BUG_ON(plane == OMAP_DSS_GFX);
558
559 dispc_write_reg(DISPC_OVL_FIR_COEF_H2(plane, reg), value);
560}
561
562static void _dispc_write_firhv2_reg(enum omap_plane plane, int reg, u32 value)
563{
564 BUG_ON(plane == OMAP_DSS_GFX);
565
566 dispc_write_reg(DISPC_OVL_FIR_COEF_HV2(plane, reg), value);
567}
568
569static void _dispc_write_firv2_reg(enum omap_plane plane, int reg, u32 value)
570{
571 BUG_ON(plane == OMAP_DSS_GFX);
572
573 dispc_write_reg(DISPC_OVL_FIR_COEF_V2(plane, reg), value);
574}
575
479static void _dispc_set_scale_coef(enum omap_plane plane, int hscaleup, 576static void _dispc_set_scale_coef(enum omap_plane plane, int hscaleup,
480 int vscaleup, int five_taps) 577 int vscaleup, int five_taps)
481{ 578{
@@ -645,6 +742,16 @@ static void _dispc_set_plane_ba1(enum omap_plane plane, u32 paddr)
645 dispc_write_reg(DISPC_OVL_BA1(plane), paddr); 742 dispc_write_reg(DISPC_OVL_BA1(plane), paddr);
646} 743}
647 744
745static void _dispc_set_plane_ba0_uv(enum omap_plane plane, u32 paddr)
746{
747 dispc_write_reg(DISPC_OVL_BA0_UV(plane), paddr);
748}
749
750static void _dispc_set_plane_ba1_uv(enum omap_plane plane, u32 paddr)
751{
752 dispc_write_reg(DISPC_OVL_BA1_UV(plane), paddr);
753}
754
648static void _dispc_set_plane_pos(enum omap_plane plane, int x, int y) 755static void _dispc_set_plane_pos(enum omap_plane plane, int x, int y)
649{ 756{
650 u32 val = FLD_VAL(y, 26, 16) | FLD_VAL(x, 10, 0); 757 u32 val = FLD_VAL(y, 26, 16) | FLD_VAL(x, 10, 0);
@@ -1025,6 +1132,21 @@ static void _dispc_set_vid_accu1(enum omap_plane plane, int haccu, int vaccu)
1025 dispc_write_reg(DISPC_OVL_ACCU1(plane), val); 1132 dispc_write_reg(DISPC_OVL_ACCU1(plane), val);
1026} 1133}
1027 1134
1135static void _dispc_set_vid_accu2_0(enum omap_plane plane, int haccu, int vaccu)
1136{
1137 u32 val;
1138
1139 val = FLD_VAL(vaccu, 26, 16) | FLD_VAL(haccu, 10, 0);
1140 dispc_write_reg(DISPC_OVL_ACCU2_0(plane), val);
1141}
1142
1143static void _dispc_set_vid_accu2_1(enum omap_plane plane, int haccu, int vaccu)
1144{
1145 u32 val;
1146
1147 val = FLD_VAL(vaccu, 26, 16) | FLD_VAL(haccu, 10, 0);
1148 dispc_write_reg(DISPC_OVL_ACCU2_1(plane), val);
1149}
1028 1150
1029static void _dispc_set_scaling(enum omap_plane plane, 1151static void _dispc_set_scaling(enum omap_plane plane,
1030 u16 orig_width, u16 orig_height, 1152 u16 orig_width, u16 orig_height,
@@ -2496,6 +2618,44 @@ void dispc_dump_regs(struct seq_file *s)
2496 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 6)); 2618 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 6));
2497 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 7)); 2619 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 7));
2498 2620
2621 if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
2622 DUMPREG(DISPC_OVL_BA0_UV(OMAP_DSS_VIDEO1));
2623 DUMPREG(DISPC_OVL_BA1_UV(OMAP_DSS_VIDEO1));
2624 DUMPREG(DISPC_OVL_FIR2(OMAP_DSS_VIDEO1));
2625 DUMPREG(DISPC_OVL_ACCU2_0(OMAP_DSS_VIDEO1));
2626 DUMPREG(DISPC_OVL_ACCU2_1(OMAP_DSS_VIDEO1));
2627
2628 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 0));
2629 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 1));
2630 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 2));
2631 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 3));
2632 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 4));
2633 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 5));
2634 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 6));
2635 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO1, 7));
2636
2637 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 0));
2638 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 1));
2639 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 2));
2640 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 3));
2641 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 4));
2642 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 5));
2643 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 6));
2644 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO1, 7));
2645
2646 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 0));
2647 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 1));
2648 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 2));
2649 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 3));
2650 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 4));
2651 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 5));
2652 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 6));
2653 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO1, 7));
2654 }
2655 if (dss_has_feature(FEAT_ATTR2))
2656 DUMPREG(DISPC_OVL_ATTRIBUTES2(OMAP_DSS_VIDEO1));
2657
2658
2499 DUMPREG(DISPC_OVL_FIR_COEF_H(OMAP_DSS_VIDEO2, 0)); 2659 DUMPREG(DISPC_OVL_FIR_COEF_H(OMAP_DSS_VIDEO2, 0));
2500 DUMPREG(DISPC_OVL_FIR_COEF_H(OMAP_DSS_VIDEO2, 1)); 2660 DUMPREG(DISPC_OVL_FIR_COEF_H(OMAP_DSS_VIDEO2, 1));
2501 DUMPREG(DISPC_OVL_FIR_COEF_H(OMAP_DSS_VIDEO2, 2)); 2661 DUMPREG(DISPC_OVL_FIR_COEF_H(OMAP_DSS_VIDEO2, 2));
@@ -2526,6 +2686,43 @@ void dispc_dump_regs(struct seq_file *s)
2526 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 6)); 2686 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 6));
2527 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 7)); 2687 DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 7));
2528 2688
2689 if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
2690 DUMPREG(DISPC_OVL_BA0_UV(OMAP_DSS_VIDEO2));
2691 DUMPREG(DISPC_OVL_BA1_UV(OMAP_DSS_VIDEO2));
2692 DUMPREG(DISPC_OVL_FIR2(OMAP_DSS_VIDEO2));
2693 DUMPREG(DISPC_OVL_ACCU2_0(OMAP_DSS_VIDEO2));
2694 DUMPREG(DISPC_OVL_ACCU2_1(OMAP_DSS_VIDEO2));
2695
2696 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 0));
2697 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 1));
2698 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 2));
2699 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 3));
2700 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 4));
2701 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 5));
2702 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 6));
2703 DUMPREG(DISPC_OVL_FIR_COEF_H2(OMAP_DSS_VIDEO2, 7));
2704
2705 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 0));
2706 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 1));
2707 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 2));
2708 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 3));
2709 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 4));
2710 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 5));
2711 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 6));
2712 DUMPREG(DISPC_OVL_FIR_COEF_HV2(OMAP_DSS_VIDEO2, 7));
2713
2714 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 0));
2715 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 1));
2716 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 2));
2717 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 3));
2718 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 4));
2719 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 5));
2720 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 6));
2721 DUMPREG(DISPC_OVL_FIR_COEF_V2(OMAP_DSS_VIDEO2, 7));
2722 }
2723 if (dss_has_feature(FEAT_ATTR2))
2724 DUMPREG(DISPC_OVL_ATTRIBUTES2(OMAP_DSS_VIDEO2));
2725
2529 DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_VIDEO1)); 2726 DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_VIDEO1));
2530 DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_VIDEO2)); 2727 DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_VIDEO2));
2531 2728
diff --git a/drivers/video/omap2/dss/dispc.h b/drivers/video/omap2/dss/dispc.h
index d45f010d75d..6c9ee0a0efb 100644
--- a/drivers/video/omap2/dss/dispc.h
+++ b/drivers/video/omap2/dss/dispc.h
@@ -42,12 +42,18 @@
42 DISPC_BA0_OFFSET(n)) 42 DISPC_BA0_OFFSET(n))
43#define DISPC_OVL_BA1(n) (DISPC_OVL_BASE(n) + \ 43#define DISPC_OVL_BA1(n) (DISPC_OVL_BASE(n) + \
44 DISPC_BA1_OFFSET(n)) 44 DISPC_BA1_OFFSET(n))
45#define DISPC_OVL_BA0_UV(n) (DISPC_OVL_BASE(n) + \
46 DISPC_BA0_UV_OFFSET(n))
47#define DISPC_OVL_BA1_UV(n) (DISPC_OVL_BASE(n) + \
48 DISPC_BA1_UV_OFFSET(n))
45#define DISPC_OVL_POSITION(n) (DISPC_OVL_BASE(n) + \ 49#define DISPC_OVL_POSITION(n) (DISPC_OVL_BASE(n) + \
46 DISPC_POS_OFFSET(n)) 50 DISPC_POS_OFFSET(n))
47#define DISPC_OVL_SIZE(n) (DISPC_OVL_BASE(n) + \ 51#define DISPC_OVL_SIZE(n) (DISPC_OVL_BASE(n) + \
48 DISPC_SIZE_OFFSET(n)) 52 DISPC_SIZE_OFFSET(n))
49#define DISPC_OVL_ATTRIBUTES(n) (DISPC_OVL_BASE(n) + \ 53#define DISPC_OVL_ATTRIBUTES(n) (DISPC_OVL_BASE(n) + \
50 DISPC_ATTR_OFFSET(n)) 54 DISPC_ATTR_OFFSET(n))
55#define DISPC_OVL_ATTRIBUTES2(n) (DISPC_OVL_BASE(n) + \
56 DISPC_ATTR2_OFFSET(n))
51#define DISPC_OVL_FIFO_THRESHOLD(n) (DISPC_OVL_BASE(n) + \ 57#define DISPC_OVL_FIFO_THRESHOLD(n) (DISPC_OVL_BASE(n) + \
52 DISPC_FIFO_THRESH_OFFSET(n)) 58 DISPC_FIFO_THRESH_OFFSET(n))
53#define DISPC_OVL_FIFO_SIZE_STATUS(n) (DISPC_OVL_BASE(n) + \ 59#define DISPC_OVL_FIFO_SIZE_STATUS(n) (DISPC_OVL_BASE(n) + \
@@ -62,20 +68,32 @@
62 DISPC_TABLE_BA_OFFSET(n)) 68 DISPC_TABLE_BA_OFFSET(n))
63#define DISPC_OVL_FIR(n) (DISPC_OVL_BASE(n) + \ 69#define DISPC_OVL_FIR(n) (DISPC_OVL_BASE(n) + \
64 DISPC_FIR_OFFSET(n)) 70 DISPC_FIR_OFFSET(n))
71#define DISPC_OVL_FIR2(n) (DISPC_OVL_BASE(n) + \
72 DISPC_FIR2_OFFSET(n))
65#define DISPC_OVL_PICTURE_SIZE(n) (DISPC_OVL_BASE(n) + \ 73#define DISPC_OVL_PICTURE_SIZE(n) (DISPC_OVL_BASE(n) + \
66 DISPC_PIC_SIZE_OFFSET(n)) 74 DISPC_PIC_SIZE_OFFSET(n))
67#define DISPC_OVL_ACCU0(n) (DISPC_OVL_BASE(n) + \ 75#define DISPC_OVL_ACCU0(n) (DISPC_OVL_BASE(n) + \
68 DISPC_ACCU0_OFFSET(n)) 76 DISPC_ACCU0_OFFSET(n))
69#define DISPC_OVL_ACCU1(n) (DISPC_OVL_BASE(n) + \ 77#define DISPC_OVL_ACCU1(n) (DISPC_OVL_BASE(n) + \
70 DISPC_ACCU1_OFFSET(n)) 78 DISPC_ACCU1_OFFSET(n))
79#define DISPC_OVL_ACCU2_0(n) (DISPC_OVL_BASE(n) + \
80 DISPC_ACCU2_0_OFFSET(n))
81#define DISPC_OVL_ACCU2_1(n) (DISPC_OVL_BASE(n) + \
82 DISPC_ACCU2_1_OFFSET(n))
71#define DISPC_OVL_FIR_COEF_H(n, i) (DISPC_OVL_BASE(n) + \ 83#define DISPC_OVL_FIR_COEF_H(n, i) (DISPC_OVL_BASE(n) + \
72 DISPC_FIR_COEF_H_OFFSET(n, i)) 84 DISPC_FIR_COEF_H_OFFSET(n, i))
73#define DISPC_OVL_FIR_COEF_HV(n, i) (DISPC_OVL_BASE(n) + \ 85#define DISPC_OVL_FIR_COEF_HV(n, i) (DISPC_OVL_BASE(n) + \
74 DISPC_FIR_COEF_HV_OFFSET(n, i)) 86 DISPC_FIR_COEF_HV_OFFSET(n, i))
87#define DISPC_OVL_FIR_COEF_H2(n, i) (DISPC_OVL_BASE(n) + \
88 DISPC_FIR_COEF_H2_OFFSET(n, i))
89#define DISPC_OVL_FIR_COEF_HV2(n, i) (DISPC_OVL_BASE(n) + \
90 DISPC_FIR_COEF_HV2_OFFSET(n, i))
75#define DISPC_OVL_CONV_COEF(n, i) (DISPC_OVL_BASE(n) + \ 91#define DISPC_OVL_CONV_COEF(n, i) (DISPC_OVL_BASE(n) + \
76 DISPC_CONV_COEF_OFFSET(n, i)) 92 DISPC_CONV_COEF_OFFSET(n, i))
77#define DISPC_OVL_FIR_COEF_V(n, i) (DISPC_OVL_BASE(n) + \ 93#define DISPC_OVL_FIR_COEF_V(n, i) (DISPC_OVL_BASE(n) + \
78 DISPC_FIR_COEF_V_OFFSET(n, i)) 94 DISPC_FIR_COEF_V_OFFSET(n, i))
95#define DISPC_OVL_FIR_COEF_V2(n, i) (DISPC_OVL_BASE(n) + \
96 DISPC_FIR_COEF_V2_OFFSET(n, i))
79#define DISPC_OVL_PRELOAD(n) (DISPC_OVL_BASE(n) + \ 97#define DISPC_OVL_PRELOAD(n) (DISPC_OVL_BASE(n) + \
80 DISPC_PRELOAD_OFFSET(n)) 98 DISPC_PRELOAD_OFFSET(n))
81 99
@@ -303,6 +321,34 @@ static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
303 } 321 }
304} 322}
305 323
324static inline u16 DISPC_BA0_UV_OFFSET(enum omap_plane plane)
325{
326 switch (plane) {
327 case OMAP_DSS_GFX:
328 BUG();
329 case OMAP_DSS_VIDEO1:
330 return 0x0544;
331 case OMAP_DSS_VIDEO2:
332 return 0x04BC;
333 default:
334 BUG();
335 }
336}
337
338static inline u16 DISPC_BA1_UV_OFFSET(enum omap_plane plane)
339{
340 switch (plane) {
341 case OMAP_DSS_GFX:
342 BUG();
343 case OMAP_DSS_VIDEO1:
344 return 0x0548;
345 case OMAP_DSS_VIDEO2:
346 return 0x04C0;
347 default:
348 BUG();
349 }
350}
351
306static inline u16 DISPC_POS_OFFSET(enum omap_plane plane) 352static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
307{ 353{
308 switch (plane) { 354 switch (plane) {
@@ -340,6 +386,20 @@ static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
340 } 386 }
341} 387}
342 388
389static inline u16 DISPC_ATTR2_OFFSET(enum omap_plane plane)
390{
391 switch (plane) {
392 case OMAP_DSS_GFX:
393 BUG();
394 case OMAP_DSS_VIDEO1:
395 return 0x0568;
396 case OMAP_DSS_VIDEO2:
397 return 0x04DC;
398 default:
399 BUG();
400 }
401}
402
343static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane) 403static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
344{ 404{
345 switch (plane) { 405 switch (plane) {
@@ -431,6 +491,20 @@ static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
431 } 491 }
432} 492}
433 493
494static inline u16 DISPC_FIR2_OFFSET(enum omap_plane plane)
495{
496 switch (plane) {
497 case OMAP_DSS_GFX:
498 BUG();
499 case OMAP_DSS_VIDEO1:
500 return 0x0580;
501 case OMAP_DSS_VIDEO2:
502 return 0x055C;
503 default:
504 BUG();
505 }
506}
507
434static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane) 508static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
435{ 509{
436 switch (plane) { 510 switch (plane) {
@@ -458,6 +532,20 @@ static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
458 } 532 }
459} 533}
460 534
535static inline u16 DISPC_ACCU2_0_OFFSET(enum omap_plane plane)
536{
537 switch (plane) {
538 case OMAP_DSS_GFX:
539 BUG();
540 case OMAP_DSS_VIDEO1:
541 return 0x0584;
542 case OMAP_DSS_VIDEO2:
543 return 0x0560;
544 default:
545 BUG();
546 }
547}
548
461static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane) 549static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
462{ 550{
463 switch (plane) { 551 switch (plane) {
@@ -471,6 +559,20 @@ static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
471 } 559 }
472} 560}
473 561
562static inline u16 DISPC_ACCU2_1_OFFSET(enum omap_plane plane)
563{
564 switch (plane) {
565 case OMAP_DSS_GFX:
566 BUG();
567 case OMAP_DSS_VIDEO1:
568 return 0x0588;
569 case OMAP_DSS_VIDEO2:
570 return 0x0564;
571 default:
572 BUG();
573 }
574}
575
474/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */ 576/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
475static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i) 577static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
476{ 578{
@@ -486,6 +588,21 @@ static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
486} 588}
487 589
488/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */ 590/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
591static inline u16 DISPC_FIR_COEF_H2_OFFSET(enum omap_plane plane, u16 i)
592{
593 switch (plane) {
594 case OMAP_DSS_GFX:
595 BUG();
596 case OMAP_DSS_VIDEO1:
597 return 0x058C + i * 0x8;
598 case OMAP_DSS_VIDEO2:
599 return 0x0568 + i * 0x8;
600 default:
601 BUG();
602 }
603}
604
605/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
489static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i) 606static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
490{ 607{
491 switch (plane) { 608 switch (plane) {
@@ -499,6 +616,21 @@ static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
499 } 616 }
500} 617}
501 618
619/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
620static inline u16 DISPC_FIR_COEF_HV2_OFFSET(enum omap_plane plane, u16 i)
621{
622 switch (plane) {
623 case OMAP_DSS_GFX:
624 BUG();
625 case OMAP_DSS_VIDEO1:
626 return 0x0590 + i * 8;
627 case OMAP_DSS_VIDEO2:
628 return 0x056C + i * 0x8;
629 default:
630 BUG();
631 }
632}
633
502/* coef index i = {0, 1, 2, 3, 4,} */ 634/* coef index i = {0, 1, 2, 3, 4,} */
503static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i) 635static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
504{ 636{
@@ -528,6 +660,21 @@ static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
528 } 660 }
529} 661}
530 662
663/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
664static inline u16 DISPC_FIR_COEF_V2_OFFSET(enum omap_plane plane, u16 i)
665{
666 switch (plane) {
667 case OMAP_DSS_GFX:
668 BUG();
669 case OMAP_DSS_VIDEO1:
670 return 0x05CC + i * 0x4;
671 case OMAP_DSS_VIDEO2:
672 return 0x05A8 + i * 0x4;
673 default:
674 BUG();
675 }
676}
677
531static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane) 678static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
532{ 679{
533 switch (plane) { 680 switch (plane) {
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
index 6d88a632322..1c18888e5df 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -327,7 +327,7 @@ static const struct omap_dss_features omap4430_es1_0_dss_features = {
327 FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1 | 327 FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1 |
328 FEAT_CORE_CLK_DIV | FEAT_LCD_CLK_SRC | 328 FEAT_CORE_CLK_DIV | FEAT_LCD_CLK_SRC |
329 FEAT_DSI_DCS_CMD_CONFIG_VC | FEAT_DSI_VC_OCP_WIDTH | 329 FEAT_DSI_DCS_CMD_CONFIG_VC | FEAT_DSI_VC_OCP_WIDTH |
330 FEAT_DSI_GNQ, 330 FEAT_DSI_GNQ | FEAT_HANDLE_UV_SEPARATE | FEAT_ATTR2,
331 331
332 .num_mgrs = 3, 332 .num_mgrs = 3,
333 .num_ovls = 3, 333 .num_ovls = 3,
@@ -347,7 +347,8 @@ static const struct omap_dss_features omap4_dss_features = {
347 FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1 | 347 FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1 |
348 FEAT_CORE_CLK_DIV | FEAT_LCD_CLK_SRC | 348 FEAT_CORE_CLK_DIV | FEAT_LCD_CLK_SRC |
349 FEAT_DSI_DCS_CMD_CONFIG_VC | FEAT_DSI_VC_OCP_WIDTH | 349 FEAT_DSI_DCS_CMD_CONFIG_VC | FEAT_DSI_VC_OCP_WIDTH |
350 FEAT_DSI_GNQ | FEAT_HDMI_CTS_SWMODE, 350 FEAT_DSI_GNQ | FEAT_HDMI_CTS_SWMODE |
351 FEAT_HANDLE_UV_SEPARATE | FEAT_ATTR2,
351 352
352 .num_mgrs = 3, 353 .num_mgrs = 3,
353 .num_ovls = 3, 354 .num_ovls = 3,
diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
index af791af122c..07b346f7d91 100644
--- a/drivers/video/omap2/dss/dss_features.h
+++ b/drivers/video/omap2/dss/dss_features.h
@@ -49,6 +49,8 @@ enum dss_feat_id {
49 FEAT_DSI_REVERSE_TXCLKESC = 1 << 17, 49 FEAT_DSI_REVERSE_TXCLKESC = 1 << 17,
50 FEAT_DSI_GNQ = 1 << 18, 50 FEAT_DSI_GNQ = 1 << 18,
51 FEAT_HDMI_CTS_SWMODE = 1 << 19, 51 FEAT_HDMI_CTS_SWMODE = 1 << 19,
52 FEAT_HANDLE_UV_SEPARATE = 1 << 20,
53 FEAT_ATTR2 = 1 << 21,
52}; 54};
53 55
54/* DSS register field id */ 56/* DSS register field id */