aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/dispc.c
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/dss/dispc.c
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/dss/dispc.c')
-rw-r--r--drivers/video/omap2/dss/dispc.c197
1 files changed, 197 insertions, 0 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