aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2011-09-13 08:50:33 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-10-03 09:51:54 -0400
commitb8c095b4d62f90ed8da0cca7116125863b1d8bef (patch)
tree7724679eebdeebc1e78721af058c6dfde161320f /drivers/video
parent11354dd58da1134ec9c96b65104e5cf2d50e1eb9 (diff)
OMAPDSS: DISPC: VIDEO3 pipeline support
Add support for VIDEO3 pipeline on OMAP4: - Add VIDEO3 pipeline information in dss_features and omapdss.h - Add VIDEO3 pipeline register coefficients in dispc.h - Create a new overlay structure corresponding to VIDEO3. - Make changes in dispc.c for VIDEO3 Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dss/dispc.c17
-rw-r--r--drivers/video/omap2/dss/dispc.h57
-rw-r--r--drivers/video/omap2/dss/dss_features.c18
-rw-r--r--drivers/video/omap2/dss/dss_features.h2
-rw-r--r--drivers/video/omap2/dss/overlay.c5
5 files changed, 93 insertions, 6 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e0639d328c5b..fa7aadfec7b8 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -751,7 +751,7 @@ static void dispc_ovl_set_pre_mult_alpha(enum omap_plane plane, bool enable)
751 751
752static void dispc_ovl_setup_global_alpha(enum omap_plane plane, u8 global_alpha) 752static void dispc_ovl_setup_global_alpha(enum omap_plane plane, u8 global_alpha)
753{ 753{
754 static const unsigned shifts[] = { 0, 8, 16, }; 754 static const unsigned shifts[] = { 0, 8, 16, 24, };
755 int shift; 755 int shift;
756 struct omap_overlay *ovl = omap_dss_get_overlay(plane); 756 struct omap_overlay *ovl = omap_dss_get_overlay(plane);
757 757
@@ -866,6 +866,7 @@ static void dispc_ovl_set_channel_out(enum omap_plane plane,
866 break; 866 break;
867 case OMAP_DSS_VIDEO1: 867 case OMAP_DSS_VIDEO1:
868 case OMAP_DSS_VIDEO2: 868 case OMAP_DSS_VIDEO2:
869 case OMAP_DSS_VIDEO3:
869 shift = 16; 870 shift = 16;
870 break; 871 break;
871 default: 872 default:
@@ -903,7 +904,7 @@ static void dispc_ovl_set_channel_out(enum omap_plane plane,
903static void dispc_ovl_set_burst_size(enum omap_plane plane, 904static void dispc_ovl_set_burst_size(enum omap_plane plane,
904 enum omap_burst_size burst_size) 905 enum omap_burst_size burst_size)
905{ 906{
906 static const unsigned shifts[] = { 6, 14, 14, }; 907 static const unsigned shifts[] = { 6, 14, 14, 14, };
907 int shift; 908 int shift;
908 909
909 shift = shifts[plane]; 910 shift = shifts[plane];
@@ -988,7 +989,7 @@ static void dispc_ovl_set_vid_color_conv(enum omap_plane plane, bool enable)
988 989
989static void dispc_ovl_enable_replication(enum omap_plane plane, bool enable) 990static void dispc_ovl_enable_replication(enum omap_plane plane, bool enable)
990{ 991{
991 static const unsigned shifts[] = { 5, 10, 10 }; 992 static const unsigned shifts[] = { 5, 10, 10, 10 };
992 int shift; 993 int shift;
993 994
994 shift = shifts[plane]; 995 shift = shifts[plane];
@@ -2558,6 +2559,10 @@ void dispc_dump_irqs(struct seq_file *s)
2558 PIS(VID1_END_WIN); 2559 PIS(VID1_END_WIN);
2559 PIS(VID2_FIFO_UNDERFLOW); 2560 PIS(VID2_FIFO_UNDERFLOW);
2560 PIS(VID2_END_WIN); 2561 PIS(VID2_END_WIN);
2562 if (dss_feat_get_num_ovls() > 3) {
2563 PIS(VID3_FIFO_UNDERFLOW);
2564 PIS(VID3_END_WIN);
2565 }
2561 PIS(SYNC_LOST); 2566 PIS(SYNC_LOST);
2562 PIS(SYNC_LOST_DIGIT); 2567 PIS(SYNC_LOST_DIGIT);
2563 PIS(WAKEUP); 2568 PIS(WAKEUP);
@@ -2583,6 +2588,7 @@ void dispc_dump_regs(struct seq_file *s)
2583 [OMAP_DSS_GFX] = "GFX", 2588 [OMAP_DSS_GFX] = "GFX",
2584 [OMAP_DSS_VIDEO1] = "VID1", 2589 [OMAP_DSS_VIDEO1] = "VID1",
2585 [OMAP_DSS_VIDEO2] = "VID2", 2590 [OMAP_DSS_VIDEO2] = "VID2",
2591 [OMAP_DSS_VIDEO3] = "VID3",
2586 }; 2592 };
2587 const char **p_names; 2593 const char **p_names;
2588 2594
@@ -2985,6 +2991,8 @@ static void print_irq_status(u32 status)
2985 PIS(OCP_ERR); 2991 PIS(OCP_ERR);
2986 PIS(VID1_FIFO_UNDERFLOW); 2992 PIS(VID1_FIFO_UNDERFLOW);
2987 PIS(VID2_FIFO_UNDERFLOW); 2993 PIS(VID2_FIFO_UNDERFLOW);
2994 if (dss_feat_get_num_ovls() > 3)
2995 PIS(VID3_FIFO_UNDERFLOW);
2988 PIS(SYNC_LOST); 2996 PIS(SYNC_LOST);
2989 PIS(SYNC_LOST_DIGIT); 2997 PIS(SYNC_LOST_DIGIT);
2990 if (dss_has_feature(FEAT_MGR_LCD2)) 2998 if (dss_has_feature(FEAT_MGR_LCD2))
@@ -3082,6 +3090,7 @@ static void dispc_error_worker(struct work_struct *work)
3082 DISPC_IRQ_GFX_FIFO_UNDERFLOW, 3090 DISPC_IRQ_GFX_FIFO_UNDERFLOW,
3083 DISPC_IRQ_VID1_FIFO_UNDERFLOW, 3091 DISPC_IRQ_VID1_FIFO_UNDERFLOW,
3084 DISPC_IRQ_VID2_FIFO_UNDERFLOW, 3092 DISPC_IRQ_VID2_FIFO_UNDERFLOW,
3093 DISPC_IRQ_VID3_FIFO_UNDERFLOW,
3085 }; 3094 };
3086 3095
3087 static const unsigned sync_lost_bits[] = { 3096 static const unsigned sync_lost_bits[] = {
@@ -3257,6 +3266,8 @@ static void _omap_dispc_initialize_irq(void)
3257 dispc.irq_error_mask = DISPC_IRQ_MASK_ERROR; 3266 dispc.irq_error_mask = DISPC_IRQ_MASK_ERROR;
3258 if (dss_has_feature(FEAT_MGR_LCD2)) 3267 if (dss_has_feature(FEAT_MGR_LCD2))
3259 dispc.irq_error_mask |= DISPC_IRQ_SYNC_LOST2; 3268 dispc.irq_error_mask |= DISPC_IRQ_SYNC_LOST2;
3269 if (dss_feat_get_num_ovls() > 3)
3270 dispc.irq_error_mask |= DISPC_IRQ_VID3_FIFO_UNDERFLOW;
3260 3271
3261 /* there's SYNC_LOST_DIGIT waiting after enabling the DSS, 3272 /* there's SYNC_LOST_DIGIT waiting after enabling the DSS,
3262 * so clear it */ 3273 * so clear it */
diff --git a/drivers/video/omap2/dss/dispc.h b/drivers/video/omap2/dss/dispc.h
index 6c9ee0a0efb3..c06efc38983e 100644
--- a/drivers/video/omap2/dss/dispc.h
+++ b/drivers/video/omap2/dss/dispc.h
@@ -291,6 +291,8 @@ static inline u16 DISPC_OVL_BASE(enum omap_plane plane)
291 return 0x00BC; 291 return 0x00BC;
292 case OMAP_DSS_VIDEO2: 292 case OMAP_DSS_VIDEO2:
293 return 0x014C; 293 return 0x014C;
294 case OMAP_DSS_VIDEO3:
295 return 0x0300;
294 default: 296 default:
295 BUG(); 297 BUG();
296 } 298 }
@@ -304,6 +306,8 @@ static inline u16 DISPC_BA0_OFFSET(enum omap_plane plane)
304 case OMAP_DSS_VIDEO1: 306 case OMAP_DSS_VIDEO1:
305 case OMAP_DSS_VIDEO2: 307 case OMAP_DSS_VIDEO2:
306 return 0x0000; 308 return 0x0000;
309 case OMAP_DSS_VIDEO3:
310 return 0x0008;
307 default: 311 default:
308 BUG(); 312 BUG();
309 } 313 }
@@ -316,6 +320,8 @@ static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
316 case OMAP_DSS_VIDEO1: 320 case OMAP_DSS_VIDEO1:
317 case OMAP_DSS_VIDEO2: 321 case OMAP_DSS_VIDEO2:
318 return 0x0004; 322 return 0x0004;
323 case OMAP_DSS_VIDEO3:
324 return 0x000C;
319 default: 325 default:
320 BUG(); 326 BUG();
321 } 327 }
@@ -330,6 +336,8 @@ static inline u16 DISPC_BA0_UV_OFFSET(enum omap_plane plane)
330 return 0x0544; 336 return 0x0544;
331 case OMAP_DSS_VIDEO2: 337 case OMAP_DSS_VIDEO2:
332 return 0x04BC; 338 return 0x04BC;
339 case OMAP_DSS_VIDEO3:
340 return 0x0310;
333 default: 341 default:
334 BUG(); 342 BUG();
335 } 343 }
@@ -344,6 +352,8 @@ static inline u16 DISPC_BA1_UV_OFFSET(enum omap_plane plane)
344 return 0x0548; 352 return 0x0548;
345 case OMAP_DSS_VIDEO2: 353 case OMAP_DSS_VIDEO2:
346 return 0x04C0; 354 return 0x04C0;
355 case OMAP_DSS_VIDEO3:
356 return 0x0314;
347 default: 357 default:
348 BUG(); 358 BUG();
349 } 359 }
@@ -356,6 +366,8 @@ static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
356 case OMAP_DSS_VIDEO1: 366 case OMAP_DSS_VIDEO1:
357 case OMAP_DSS_VIDEO2: 367 case OMAP_DSS_VIDEO2:
358 return 0x0008; 368 return 0x0008;
369 case OMAP_DSS_VIDEO3:
370 return 0x009C;
359 default: 371 default:
360 BUG(); 372 BUG();
361 } 373 }
@@ -368,6 +380,8 @@ static inline u16 DISPC_SIZE_OFFSET(enum omap_plane plane)
368 case OMAP_DSS_VIDEO1: 380 case OMAP_DSS_VIDEO1:
369 case OMAP_DSS_VIDEO2: 381 case OMAP_DSS_VIDEO2:
370 return 0x000C; 382 return 0x000C;
383 case OMAP_DSS_VIDEO3:
384 return 0x00A8;
371 default: 385 default:
372 BUG(); 386 BUG();
373 } 387 }
@@ -381,6 +395,8 @@ static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
381 case OMAP_DSS_VIDEO1: 395 case OMAP_DSS_VIDEO1:
382 case OMAP_DSS_VIDEO2: 396 case OMAP_DSS_VIDEO2:
383 return 0x0010; 397 return 0x0010;
398 case OMAP_DSS_VIDEO3:
399 return 0x0070;
384 default: 400 default:
385 BUG(); 401 BUG();
386 } 402 }
@@ -395,6 +411,8 @@ static inline u16 DISPC_ATTR2_OFFSET(enum omap_plane plane)
395 return 0x0568; 411 return 0x0568;
396 case OMAP_DSS_VIDEO2: 412 case OMAP_DSS_VIDEO2:
397 return 0x04DC; 413 return 0x04DC;
414 case OMAP_DSS_VIDEO3:
415 return 0x032C;
398 default: 416 default:
399 BUG(); 417 BUG();
400 } 418 }
@@ -408,6 +426,8 @@ static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
408 case OMAP_DSS_VIDEO1: 426 case OMAP_DSS_VIDEO1:
409 case OMAP_DSS_VIDEO2: 427 case OMAP_DSS_VIDEO2:
410 return 0x0014; 428 return 0x0014;
429 case OMAP_DSS_VIDEO3:
430 return 0x008C;
411 default: 431 default:
412 BUG(); 432 BUG();
413 } 433 }
@@ -421,6 +441,8 @@ static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane)
421 case OMAP_DSS_VIDEO1: 441 case OMAP_DSS_VIDEO1:
422 case OMAP_DSS_VIDEO2: 442 case OMAP_DSS_VIDEO2:
423 return 0x0018; 443 return 0x0018;
444 case OMAP_DSS_VIDEO3:
445 return 0x0088;
424 default: 446 default:
425 BUG(); 447 BUG();
426 } 448 }
@@ -434,6 +456,8 @@ static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane plane)
434 case OMAP_DSS_VIDEO1: 456 case OMAP_DSS_VIDEO1:
435 case OMAP_DSS_VIDEO2: 457 case OMAP_DSS_VIDEO2:
436 return 0x001C; 458 return 0x001C;
459 case OMAP_DSS_VIDEO3:
460 return 0x00A4;
437 default: 461 default:
438 BUG(); 462 BUG();
439 } 463 }
@@ -447,6 +471,8 @@ static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane plane)
447 case OMAP_DSS_VIDEO1: 471 case OMAP_DSS_VIDEO1:
448 case OMAP_DSS_VIDEO2: 472 case OMAP_DSS_VIDEO2:
449 return 0x0020; 473 return 0x0020;
474 case OMAP_DSS_VIDEO3:
475 return 0x0098;
450 default: 476 default:
451 BUG(); 477 BUG();
452 } 478 }
@@ -459,6 +485,7 @@ static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane)
459 return 0x0034; 485 return 0x0034;
460 case OMAP_DSS_VIDEO1: 486 case OMAP_DSS_VIDEO1:
461 case OMAP_DSS_VIDEO2: 487 case OMAP_DSS_VIDEO2:
488 case OMAP_DSS_VIDEO3:
462 BUG(); 489 BUG();
463 default: 490 default:
464 BUG(); 491 BUG();
@@ -472,6 +499,7 @@ static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane plane)
472 return 0x0038; 499 return 0x0038;
473 case OMAP_DSS_VIDEO1: 500 case OMAP_DSS_VIDEO1:
474 case OMAP_DSS_VIDEO2: 501 case OMAP_DSS_VIDEO2:
502 case OMAP_DSS_VIDEO3:
475 BUG(); 503 BUG();
476 default: 504 default:
477 BUG(); 505 BUG();
@@ -486,6 +514,8 @@ static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
486 case OMAP_DSS_VIDEO1: 514 case OMAP_DSS_VIDEO1:
487 case OMAP_DSS_VIDEO2: 515 case OMAP_DSS_VIDEO2:
488 return 0x0024; 516 return 0x0024;
517 case OMAP_DSS_VIDEO3:
518 return 0x0090;
489 default: 519 default:
490 BUG(); 520 BUG();
491 } 521 }
@@ -500,6 +530,8 @@ static inline u16 DISPC_FIR2_OFFSET(enum omap_plane plane)
500 return 0x0580; 530 return 0x0580;
501 case OMAP_DSS_VIDEO2: 531 case OMAP_DSS_VIDEO2:
502 return 0x055C; 532 return 0x055C;
533 case OMAP_DSS_VIDEO3:
534 return 0x0424;
503 default: 535 default:
504 BUG(); 536 BUG();
505 } 537 }
@@ -513,6 +545,8 @@ static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
513 case OMAP_DSS_VIDEO1: 545 case OMAP_DSS_VIDEO1:
514 case OMAP_DSS_VIDEO2: 546 case OMAP_DSS_VIDEO2:
515 return 0x0028; 547 return 0x0028;
548 case OMAP_DSS_VIDEO3:
549 return 0x0094;
516 default: 550 default:
517 BUG(); 551 BUG();
518 } 552 }
@@ -527,6 +561,8 @@ static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
527 case OMAP_DSS_VIDEO1: 561 case OMAP_DSS_VIDEO1:
528 case OMAP_DSS_VIDEO2: 562 case OMAP_DSS_VIDEO2:
529 return 0x002C; 563 return 0x002C;
564 case OMAP_DSS_VIDEO3:
565 return 0x0000;
530 default: 566 default:
531 BUG(); 567 BUG();
532 } 568 }
@@ -541,6 +577,8 @@ static inline u16 DISPC_ACCU2_0_OFFSET(enum omap_plane plane)
541 return 0x0584; 577 return 0x0584;
542 case OMAP_DSS_VIDEO2: 578 case OMAP_DSS_VIDEO2:
543 return 0x0560; 579 return 0x0560;
580 case OMAP_DSS_VIDEO3:
581 return 0x0428;
544 default: 582 default:
545 BUG(); 583 BUG();
546 } 584 }
@@ -554,6 +592,8 @@ static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
554 case OMAP_DSS_VIDEO1: 592 case OMAP_DSS_VIDEO1:
555 case OMAP_DSS_VIDEO2: 593 case OMAP_DSS_VIDEO2:
556 return 0x0030; 594 return 0x0030;
595 case OMAP_DSS_VIDEO3:
596 return 0x0004;
557 default: 597 default:
558 BUG(); 598 BUG();
559 } 599 }
@@ -568,6 +608,8 @@ static inline u16 DISPC_ACCU2_1_OFFSET(enum omap_plane plane)
568 return 0x0588; 608 return 0x0588;
569 case OMAP_DSS_VIDEO2: 609 case OMAP_DSS_VIDEO2:
570 return 0x0564; 610 return 0x0564;
611 case OMAP_DSS_VIDEO3:
612 return 0x042C;
571 default: 613 default:
572 BUG(); 614 BUG();
573 } 615 }
@@ -582,6 +624,8 @@ static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
582 case OMAP_DSS_VIDEO1: 624 case OMAP_DSS_VIDEO1:
583 case OMAP_DSS_VIDEO2: 625 case OMAP_DSS_VIDEO2:
584 return 0x0034 + i * 0x8; 626 return 0x0034 + i * 0x8;
627 case OMAP_DSS_VIDEO3:
628 return 0x0010 + i * 0x8;
585 default: 629 default:
586 BUG(); 630 BUG();
587 } 631 }
@@ -597,6 +641,8 @@ static inline u16 DISPC_FIR_COEF_H2_OFFSET(enum omap_plane plane, u16 i)
597 return 0x058C + i * 0x8; 641 return 0x058C + i * 0x8;
598 case OMAP_DSS_VIDEO2: 642 case OMAP_DSS_VIDEO2:
599 return 0x0568 + i * 0x8; 643 return 0x0568 + i * 0x8;
644 case OMAP_DSS_VIDEO3:
645 return 0x0430 + i * 0x8;
600 default: 646 default:
601 BUG(); 647 BUG();
602 } 648 }
@@ -611,6 +657,8 @@ static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
611 case OMAP_DSS_VIDEO1: 657 case OMAP_DSS_VIDEO1:
612 case OMAP_DSS_VIDEO2: 658 case OMAP_DSS_VIDEO2:
613 return 0x0038 + i * 0x8; 659 return 0x0038 + i * 0x8;
660 case OMAP_DSS_VIDEO3:
661 return 0x0014 + i * 0x8;
614 default: 662 default:
615 BUG(); 663 BUG();
616 } 664 }
@@ -626,6 +674,8 @@ static inline u16 DISPC_FIR_COEF_HV2_OFFSET(enum omap_plane plane, u16 i)
626 return 0x0590 + i * 8; 674 return 0x0590 + i * 8;
627 case OMAP_DSS_VIDEO2: 675 case OMAP_DSS_VIDEO2:
628 return 0x056C + i * 0x8; 676 return 0x056C + i * 0x8;
677 case OMAP_DSS_VIDEO3:
678 return 0x0434 + i * 0x8;
629 default: 679 default:
630 BUG(); 680 BUG();
631 } 681 }
@@ -639,6 +689,7 @@ static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
639 BUG(); 689 BUG();
640 case OMAP_DSS_VIDEO1: 690 case OMAP_DSS_VIDEO1:
641 case OMAP_DSS_VIDEO2: 691 case OMAP_DSS_VIDEO2:
692 case OMAP_DSS_VIDEO3:
642 return 0x0074 + i * 0x4; 693 return 0x0074 + i * 0x4;
643 default: 694 default:
644 BUG(); 695 BUG();
@@ -655,6 +706,8 @@ static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
655 return 0x0124 + i * 0x4; 706 return 0x0124 + i * 0x4;
656 case OMAP_DSS_VIDEO2: 707 case OMAP_DSS_VIDEO2:
657 return 0x00B4 + i * 0x4; 708 return 0x00B4 + i * 0x4;
709 case OMAP_DSS_VIDEO3:
710 return 0x0050 + i * 0x4;
658 default: 711 default:
659 BUG(); 712 BUG();
660 } 713 }
@@ -670,6 +723,8 @@ static inline u16 DISPC_FIR_COEF_V2_OFFSET(enum omap_plane plane, u16 i)
670 return 0x05CC + i * 0x4; 723 return 0x05CC + i * 0x4;
671 case OMAP_DSS_VIDEO2: 724 case OMAP_DSS_VIDEO2:
672 return 0x05A8 + i * 0x4; 725 return 0x05A8 + i * 0x4;
726 case OMAP_DSS_VIDEO3:
727 return 0x0470 + i * 0x4;
673 default: 728 default:
674 BUG(); 729 BUG();
675 } 730 }
@@ -684,6 +739,8 @@ static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
684 return 0x0174; 739 return 0x0174;
685 case OMAP_DSS_VIDEO2: 740 case OMAP_DSS_VIDEO2:
686 return 0x00E8; 741 return 0x00E8;
742 case OMAP_DSS_VIDEO3:
743 return 0x00A0;
687 default: 744 default:
688 BUG(); 745 BUG();
689 } 746 }
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
index eb08b003ba49..b402699168a5 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -210,6 +210,16 @@ static const enum omap_color_mode omap4_dss_supported_color_modes[] = {
210 OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 | 210 OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 |
211 OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 | 211 OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 |
212 OMAP_DSS_COLOR_RGBX32, 212 OMAP_DSS_COLOR_RGBX32,
213
214 /* OMAP_DSS_VIDEO3 */
215 OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U |
216 OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 |
217 OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 |
218 OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U |
219 OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY |
220 OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 |
221 OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 |
222 OMAP_DSS_COLOR_RGBX32,
213}; 223};
214 224
215static const enum omap_overlay_caps omap2_dss_overlay_caps[] = { 225static const enum omap_overlay_caps omap2_dss_overlay_caps[] = {
@@ -258,6 +268,10 @@ static const enum omap_overlay_caps omap4_dss_overlay_caps[] = {
258 /* OMAP_DSS_VIDEO2 */ 268 /* OMAP_DSS_VIDEO2 */
259 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | 269 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
260 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER, 270 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER,
271
272 /* OMAP_DSS_VIDEO3 */
273 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
274 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER,
261}; 275};
262 276
263static const char * const omap2_dss_clk_source_names[] = { 277static const char * const omap2_dss_clk_source_names[] = {
@@ -401,7 +415,7 @@ static const struct omap_dss_features omap4430_es1_0_dss_features = {
401 FEAT_ALPHA_FREE_ZORDER, 415 FEAT_ALPHA_FREE_ZORDER,
402 416
403 .num_mgrs = 3, 417 .num_mgrs = 3,
404 .num_ovls = 3, 418 .num_ovls = 4,
405 .supported_displays = omap4_dss_supported_displays, 419 .supported_displays = omap4_dss_supported_displays,
406 .supported_color_modes = omap4_dss_supported_color_modes, 420 .supported_color_modes = omap4_dss_supported_color_modes,
407 .overlay_caps = omap4_dss_overlay_caps, 421 .overlay_caps = omap4_dss_overlay_caps,
@@ -425,7 +439,7 @@ static const struct omap_dss_features omap4_dss_features = {
425 FEAT_PRELOAD | FEAT_FIR_COEF_V | FEAT_ALPHA_FREE_ZORDER, 439 FEAT_PRELOAD | FEAT_FIR_COEF_V | FEAT_ALPHA_FREE_ZORDER,
426 440
427 .num_mgrs = 3, 441 .num_mgrs = 3,
428 .num_ovls = 3, 442 .num_ovls = 4,
429 .supported_displays = omap4_dss_supported_displays, 443 .supported_displays = omap4_dss_supported_displays,
430 .supported_color_modes = omap4_dss_supported_color_modes, 444 .supported_color_modes = omap4_dss_supported_color_modes,
431 .overlay_caps = omap4_dss_overlay_caps, 445 .overlay_caps = omap4_dss_overlay_caps,
diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
index e81271a0e005..6a6c05dd45ce 100644
--- a/drivers/video/omap2/dss/dss_features.h
+++ b/drivers/video/omap2/dss/dss_features.h
@@ -25,7 +25,7 @@
25#endif 25#endif
26 26
27#define MAX_DSS_MANAGERS 3 27#define MAX_DSS_MANAGERS 3
28#define MAX_DSS_OVERLAYS 3 28#define MAX_DSS_OVERLAYS 4
29#define MAX_DSS_LCD_MANAGERS 2 29#define MAX_DSS_LCD_MANAGERS 2
30#define MAX_NUM_DSI 2 30#define MAX_NUM_DSI 2
31 31
diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c
index afb75839a328..11d21e3347ad 100644
--- a/drivers/video/omap2/dss/overlay.c
+++ b/drivers/video/omap2/dss/overlay.c
@@ -615,6 +615,11 @@ void dss_init_overlays(struct platform_device *pdev)
615 ovl->id = OMAP_DSS_VIDEO2; 615 ovl->id = OMAP_DSS_VIDEO2;
616 ovl->info.global_alpha = 255; 616 ovl->info.global_alpha = 255;
617 break; 617 break;
618 case 3:
619 ovl->name = "vid3";
620 ovl->id = OMAP_DSS_VIDEO3;
621 ovl->info.global_alpha = 255;
622 break;
618 } 623 }
619 624
620 ovl->set_manager = &omap_dss_set_manager; 625 ovl->set_manager = &omap_dss_set_manager;