Rev 4539 | Rev 5060 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4539 | Rev 4560 | ||
---|---|---|---|
Line 461... | Line 461... | ||
461 | { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 552750, 2560, 2608, |
461 | { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 552750, 2560, 2608, |
462 | 2640, 2720, 0, 1600, 1603, 1609, 1694, 0, |
462 | 2640, 2720, 0, 1600, 1603, 1609, 1694, 0, |
463 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, |
463 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, |
464 | }; |
464 | }; |
Line -... | Line 465... | ||
- | 465 | ||
- | 466 | /* |
|
- | 467 | * These more or less come from the DMT spec. The 720x400 modes are |
|
- | 468 | * inferred from historical 80x25 practice. The 640x480@67 and 832x624@75 |
|
- | 469 | * modes are old-school Mac modes. The EDID spec says the 1152x864@75 mode |
|
- | 470 | * should be 1152x870, again for the Mac, but instead we use the x864 DMT |
|
- | 471 | * mode. |
|
- | 472 | * |
|
- | 473 | * The DMT modes have been fact-checked; the rest are mild guesses. |
|
465 | 474 | */ |
|
466 | static const struct drm_display_mode edid_est_modes[] = { |
475 | static const struct drm_display_mode edid_est_modes[] = { |
467 | { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840, |
476 | { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840, |
468 | 968, 1056, 0, 600, 601, 605, 628, 0, |
477 | 968, 1056, 0, 600, 601, 605, 628, 0, |
469 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@60Hz */ |
478 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@60Hz */ |
Line 563... | Line 572... | ||
563 | { 1600, 1200, 70, 0 }, |
572 | { 1600, 1200, 70, 0 }, |
564 | /* byte 10 */ |
573 | /* byte 10 */ |
565 | { 1600, 1200, 75, 0 }, |
574 | { 1600, 1200, 75, 0 }, |
566 | { 1600, 1200, 85, 0 }, |
575 | { 1600, 1200, 85, 0 }, |
567 | { 1792, 1344, 60, 0 }, |
576 | { 1792, 1344, 60, 0 }, |
568 | { 1792, 1344, 85, 0 }, |
577 | { 1792, 1344, 75, 0 }, |
569 | { 1856, 1392, 60, 0 }, |
578 | { 1856, 1392, 60, 0 }, |
570 | { 1856, 1392, 75, 0 }, |
579 | { 1856, 1392, 75, 0 }, |
571 | { 1920, 1200, 60, 1 }, |
580 | { 1920, 1200, 60, 1 }, |
572 | { 1920, 1200, 60, 0 }, |
581 | { 1920, 1200, 60, 0 }, |
573 | /* byte 11 */ |
582 | /* byte 11 */ |
Line 594... | Line 603... | ||
594 | static const struct drm_display_mode edid_cea_modes[] = { |
603 | static const struct drm_display_mode edid_cea_modes[] = { |
595 | /* 1 - 640x480@60Hz */ |
604 | /* 1 - 640x480@60Hz */ |
596 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, |
605 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, |
597 | 752, 800, 0, 480, 490, 492, 525, 0, |
606 | 752, 800, 0, 480, 490, 492, 525, 0, |
598 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
607 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
599 | .vrefresh = 60, }, |
608 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
600 | /* 2 - 720x480@60Hz */ |
609 | /* 2 - 720x480@60Hz */ |
601 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, |
610 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, |
602 | 798, 858, 0, 480, 489, 495, 525, 0, |
611 | 798, 858, 0, 480, 489, 495, 525, 0, |
603 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
612 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
604 | .vrefresh = 60, }, |
613 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
605 | /* 3 - 720x480@60Hz */ |
614 | /* 3 - 720x480@60Hz */ |
606 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, |
615 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, |
607 | 798, 858, 0, 480, 489, 495, 525, 0, |
616 | 798, 858, 0, 480, 489, 495, 525, 0, |
608 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
617 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
609 | .vrefresh = 60, }, |
618 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
610 | /* 4 - 1280x720@60Hz */ |
619 | /* 4 - 1280x720@60Hz */ |
611 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390, |
620 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390, |
612 | 1430, 1650, 0, 720, 725, 730, 750, 0, |
621 | 1430, 1650, 0, 720, 725, 730, 750, 0, |
613 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
622 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
614 | .vrefresh = 60, }, |
623 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
615 | /* 5 - 1920x1080i@60Hz */ |
624 | /* 5 - 1920x1080i@60Hz */ |
616 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, |
625 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, |
617 | 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, |
626 | 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, |
618 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
627 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
619 | DRM_MODE_FLAG_INTERLACE), |
628 | DRM_MODE_FLAG_INTERLACE), |
620 | .vrefresh = 60, }, |
629 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
621 | /* 6 - 1440x480i@60Hz */ |
630 | /* 6 - 1440x480i@60Hz */ |
622 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
631 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
623 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
632 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
624 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
633 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
625 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
634 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
626 | .vrefresh = 60, }, |
635 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
627 | /* 7 - 1440x480i@60Hz */ |
636 | /* 7 - 1440x480i@60Hz */ |
628 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
637 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
629 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
638 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
630 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
639 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
631 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
640 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
632 | .vrefresh = 60, }, |
641 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
633 | /* 8 - 1440x240@60Hz */ |
642 | /* 8 - 1440x240@60Hz */ |
634 | { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
643 | { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
635 | 1602, 1716, 0, 240, 244, 247, 262, 0, |
644 | 1602, 1716, 0, 240, 244, 247, 262, 0, |
636 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
645 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
637 | DRM_MODE_FLAG_DBLCLK), |
646 | DRM_MODE_FLAG_DBLCLK), |
638 | .vrefresh = 60, }, |
647 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
639 | /* 9 - 1440x240@60Hz */ |
648 | /* 9 - 1440x240@60Hz */ |
640 | { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
649 | { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, |
641 | 1602, 1716, 0, 240, 244, 247, 262, 0, |
650 | 1602, 1716, 0, 240, 244, 247, 262, 0, |
642 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
651 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
643 | DRM_MODE_FLAG_DBLCLK), |
652 | DRM_MODE_FLAG_DBLCLK), |
644 | .vrefresh = 60, }, |
653 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
645 | /* 10 - 2880x480i@60Hz */ |
654 | /* 10 - 2880x480i@60Hz */ |
646 | { DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
655 | { DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
647 | 3204, 3432, 0, 480, 488, 494, 525, 0, |
656 | 3204, 3432, 0, 480, 488, 494, 525, 0, |
648 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
657 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
649 | DRM_MODE_FLAG_INTERLACE), |
658 | DRM_MODE_FLAG_INTERLACE), |
650 | .vrefresh = 60, }, |
659 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
651 | /* 11 - 2880x480i@60Hz */ |
660 | /* 11 - 2880x480i@60Hz */ |
652 | { DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
661 | { DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
653 | 3204, 3432, 0, 480, 488, 494, 525, 0, |
662 | 3204, 3432, 0, 480, 488, 494, 525, 0, |
654 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
663 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
655 | DRM_MODE_FLAG_INTERLACE), |
664 | DRM_MODE_FLAG_INTERLACE), |
656 | .vrefresh = 60, }, |
665 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
657 | /* 12 - 2880x240@60Hz */ |
666 | /* 12 - 2880x240@60Hz */ |
658 | { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
667 | { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
659 | 3204, 3432, 0, 240, 244, 247, 262, 0, |
668 | 3204, 3432, 0, 240, 244, 247, 262, 0, |
660 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
669 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
661 | .vrefresh = 60, }, |
670 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
662 | /* 13 - 2880x240@60Hz */ |
671 | /* 13 - 2880x240@60Hz */ |
663 | { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
672 | { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, |
664 | 3204, 3432, 0, 240, 244, 247, 262, 0, |
673 | 3204, 3432, 0, 240, 244, 247, 262, 0, |
665 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
674 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
666 | .vrefresh = 60, }, |
675 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
667 | /* 14 - 1440x480@60Hz */ |
676 | /* 14 - 1440x480@60Hz */ |
668 | { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, |
677 | { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, |
669 | 1596, 1716, 0, 480, 489, 495, 525, 0, |
678 | 1596, 1716, 0, 480, 489, 495, 525, 0, |
670 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
679 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
671 | .vrefresh = 60, }, |
680 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
672 | /* 15 - 1440x480@60Hz */ |
681 | /* 15 - 1440x480@60Hz */ |
673 | { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, |
682 | { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, |
674 | 1596, 1716, 0, 480, 489, 495, 525, 0, |
683 | 1596, 1716, 0, 480, 489, 495, 525, 0, |
675 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
684 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
676 | .vrefresh = 60, }, |
685 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
677 | /* 16 - 1920x1080@60Hz */ |
686 | /* 16 - 1920x1080@60Hz */ |
678 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, |
687 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, |
679 | 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, |
688 | 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, |
680 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
689 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
681 | .vrefresh = 60, }, |
690 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
682 | /* 17 - 720x576@50Hz */ |
691 | /* 17 - 720x576@50Hz */ |
683 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, |
692 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, |
684 | 796, 864, 0, 576, 581, 586, 625, 0, |
693 | 796, 864, 0, 576, 581, 586, 625, 0, |
685 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
694 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
686 | .vrefresh = 50, }, |
695 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
687 | /* 18 - 720x576@50Hz */ |
696 | /* 18 - 720x576@50Hz */ |
688 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, |
697 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, |
689 | 796, 864, 0, 576, 581, 586, 625, 0, |
698 | 796, 864, 0, 576, 581, 586, 625, 0, |
690 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
699 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
691 | .vrefresh = 50, }, |
700 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
692 | /* 19 - 1280x720@50Hz */ |
701 | /* 19 - 1280x720@50Hz */ |
693 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720, |
702 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720, |
694 | 1760, 1980, 0, 720, 725, 730, 750, 0, |
703 | 1760, 1980, 0, 720, 725, 730, 750, 0, |
695 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
704 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
696 | .vrefresh = 50, }, |
705 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
697 | /* 20 - 1920x1080i@50Hz */ |
706 | /* 20 - 1920x1080i@50Hz */ |
698 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, |
707 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, |
699 | 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, |
708 | 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, |
700 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
709 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
701 | DRM_MODE_FLAG_INTERLACE), |
710 | DRM_MODE_FLAG_INTERLACE), |
702 | .vrefresh = 50, }, |
711 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
703 | /* 21 - 1440x576i@50Hz */ |
712 | /* 21 - 1440x576i@50Hz */ |
704 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
713 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
705 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
714 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
706 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
715 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
707 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
716 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
708 | .vrefresh = 50, }, |
717 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
709 | /* 22 - 1440x576i@50Hz */ |
718 | /* 22 - 1440x576i@50Hz */ |
710 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
719 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
711 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
720 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
712 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
721 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
713 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
722 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
714 | .vrefresh = 50, }, |
723 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
715 | /* 23 - 1440x288@50Hz */ |
724 | /* 23 - 1440x288@50Hz */ |
716 | { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
725 | { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
717 | 1590, 1728, 0, 288, 290, 293, 312, 0, |
726 | 1590, 1728, 0, 288, 290, 293, 312, 0, |
718 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
727 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
719 | DRM_MODE_FLAG_DBLCLK), |
728 | DRM_MODE_FLAG_DBLCLK), |
720 | .vrefresh = 50, }, |
729 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
721 | /* 24 - 1440x288@50Hz */ |
730 | /* 24 - 1440x288@50Hz */ |
722 | { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
731 | { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, |
723 | 1590, 1728, 0, 288, 290, 293, 312, 0, |
732 | 1590, 1728, 0, 288, 290, 293, 312, 0, |
724 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
733 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
725 | DRM_MODE_FLAG_DBLCLK), |
734 | DRM_MODE_FLAG_DBLCLK), |
726 | .vrefresh = 50, }, |
735 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
727 | /* 25 - 2880x576i@50Hz */ |
736 | /* 25 - 2880x576i@50Hz */ |
728 | { DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
737 | { DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
729 | 3180, 3456, 0, 576, 580, 586, 625, 0, |
738 | 3180, 3456, 0, 576, 580, 586, 625, 0, |
730 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
739 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
731 | DRM_MODE_FLAG_INTERLACE), |
740 | DRM_MODE_FLAG_INTERLACE), |
732 | .vrefresh = 50, }, |
741 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
733 | /* 26 - 2880x576i@50Hz */ |
742 | /* 26 - 2880x576i@50Hz */ |
734 | { DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
743 | { DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
735 | 3180, 3456, 0, 576, 580, 586, 625, 0, |
744 | 3180, 3456, 0, 576, 580, 586, 625, 0, |
736 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
745 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
737 | DRM_MODE_FLAG_INTERLACE), |
746 | DRM_MODE_FLAG_INTERLACE), |
738 | .vrefresh = 50, }, |
747 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
739 | /* 27 - 2880x288@50Hz */ |
748 | /* 27 - 2880x288@50Hz */ |
740 | { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
749 | { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
741 | 3180, 3456, 0, 288, 290, 293, 312, 0, |
750 | 3180, 3456, 0, 288, 290, 293, 312, 0, |
742 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
751 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
743 | .vrefresh = 50, }, |
752 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
744 | /* 28 - 2880x288@50Hz */ |
753 | /* 28 - 2880x288@50Hz */ |
745 | { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
754 | { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, |
746 | 3180, 3456, 0, 288, 290, 293, 312, 0, |
755 | 3180, 3456, 0, 288, 290, 293, 312, 0, |
747 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
756 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
748 | .vrefresh = 50, }, |
757 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
749 | /* 29 - 1440x576@50Hz */ |
758 | /* 29 - 1440x576@50Hz */ |
750 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
759 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
751 | 1592, 1728, 0, 576, 581, 586, 625, 0, |
760 | 1592, 1728, 0, 576, 581, 586, 625, 0, |
752 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
761 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
753 | .vrefresh = 50, }, |
762 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
754 | /* 30 - 1440x576@50Hz */ |
763 | /* 30 - 1440x576@50Hz */ |
755 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
764 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
756 | 1592, 1728, 0, 576, 581, 586, 625, 0, |
765 | 1592, 1728, 0, 576, 581, 586, 625, 0, |
757 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
766 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
758 | .vrefresh = 50, }, |
767 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
759 | /* 31 - 1920x1080@50Hz */ |
768 | /* 31 - 1920x1080@50Hz */ |
760 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, |
769 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, |
761 | 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, |
770 | 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, |
762 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
771 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
763 | .vrefresh = 50, }, |
772 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
764 | /* 32 - 1920x1080@24Hz */ |
773 | /* 32 - 1920x1080@24Hz */ |
765 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558, |
774 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558, |
766 | 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, |
775 | 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, |
767 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
776 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
768 | .vrefresh = 24, }, |
777 | .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
769 | /* 33 - 1920x1080@25Hz */ |
778 | /* 33 - 1920x1080@25Hz */ |
770 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, |
779 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, |
771 | 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, |
780 | 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, |
772 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
781 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
773 | .vrefresh = 25, }, |
782 | .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
774 | /* 34 - 1920x1080@30Hz */ |
783 | /* 34 - 1920x1080@30Hz */ |
775 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, |
784 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, |
776 | 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, |
785 | 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, |
777 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
786 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
778 | .vrefresh = 30, }, |
787 | .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
779 | /* 35 - 2880x480@60Hz */ |
788 | /* 35 - 2880x480@60Hz */ |
780 | { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, |
789 | { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, |
781 | 3192, 3432, 0, 480, 489, 495, 525, 0, |
790 | 3192, 3432, 0, 480, 489, 495, 525, 0, |
782 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
791 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
783 | .vrefresh = 60, }, |
792 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
784 | /* 36 - 2880x480@60Hz */ |
793 | /* 36 - 2880x480@60Hz */ |
785 | { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, |
794 | { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, |
786 | 3192, 3432, 0, 480, 489, 495, 525, 0, |
795 | 3192, 3432, 0, 480, 489, 495, 525, 0, |
787 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
796 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
788 | .vrefresh = 60, }, |
797 | .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
789 | /* 37 - 2880x576@50Hz */ |
798 | /* 37 - 2880x576@50Hz */ |
790 | { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, |
799 | { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, |
791 | 3184, 3456, 0, 576, 581, 586, 625, 0, |
800 | 3184, 3456, 0, 576, 581, 586, 625, 0, |
792 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
801 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
793 | .vrefresh = 50, }, |
802 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
794 | /* 38 - 2880x576@50Hz */ |
803 | /* 38 - 2880x576@50Hz */ |
795 | { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, |
804 | { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, |
796 | 3184, 3456, 0, 576, 581, 586, 625, 0, |
805 | 3184, 3456, 0, 576, 581, 586, 625, 0, |
797 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
806 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
798 | .vrefresh = 50, }, |
807 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
799 | /* 39 - 1920x1080i@50Hz */ |
808 | /* 39 - 1920x1080i@50Hz */ |
800 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 72000, 1920, 1952, |
809 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 72000, 1920, 1952, |
801 | 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, |
810 | 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, |
802 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC | |
811 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC | |
803 | DRM_MODE_FLAG_INTERLACE), |
812 | DRM_MODE_FLAG_INTERLACE), |
804 | .vrefresh = 50, }, |
813 | .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
805 | /* 40 - 1920x1080i@100Hz */ |
814 | /* 40 - 1920x1080i@100Hz */ |
806 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, |
815 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, |
807 | 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, |
816 | 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, |
808 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
817 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
809 | DRM_MODE_FLAG_INTERLACE), |
818 | DRM_MODE_FLAG_INTERLACE), |
810 | .vrefresh = 100, }, |
819 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
811 | /* 41 - 1280x720@100Hz */ |
820 | /* 41 - 1280x720@100Hz */ |
812 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720, |
821 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720, |
813 | 1760, 1980, 0, 720, 725, 730, 750, 0, |
822 | 1760, 1980, 0, 720, 725, 730, 750, 0, |
814 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
823 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
815 | .vrefresh = 100, }, |
824 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
816 | /* 42 - 720x576@100Hz */ |
825 | /* 42 - 720x576@100Hz */ |
817 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, |
826 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, |
818 | 796, 864, 0, 576, 581, 586, 625, 0, |
827 | 796, 864, 0, 576, 581, 586, 625, 0, |
819 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
828 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
820 | .vrefresh = 100, }, |
829 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
821 | /* 43 - 720x576@100Hz */ |
830 | /* 43 - 720x576@100Hz */ |
822 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, |
831 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, |
823 | 796, 864, 0, 576, 581, 586, 625, 0, |
832 | 796, 864, 0, 576, 581, 586, 625, 0, |
824 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
833 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
825 | .vrefresh = 100, }, |
834 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
826 | /* 44 - 1440x576i@100Hz */ |
835 | /* 44 - 1440x576i@100Hz */ |
827 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
836 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
828 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
837 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
829 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
838 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
830 | DRM_MODE_FLAG_DBLCLK), |
839 | DRM_MODE_FLAG_DBLCLK), |
831 | .vrefresh = 100, }, |
840 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
832 | /* 45 - 1440x576i@100Hz */ |
841 | /* 45 - 1440x576i@100Hz */ |
833 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
842 | { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, |
834 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
843 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
835 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
844 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
836 | DRM_MODE_FLAG_DBLCLK), |
845 | DRM_MODE_FLAG_DBLCLK), |
837 | .vrefresh = 100, }, |
846 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
838 | /* 46 - 1920x1080i@120Hz */ |
847 | /* 46 - 1920x1080i@120Hz */ |
839 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, |
848 | { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, |
840 | 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, |
849 | 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, |
841 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
850 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
842 | DRM_MODE_FLAG_INTERLACE), |
851 | DRM_MODE_FLAG_INTERLACE), |
843 | .vrefresh = 120, }, |
852 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
844 | /* 47 - 1280x720@120Hz */ |
853 | /* 47 - 1280x720@120Hz */ |
845 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390, |
854 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390, |
846 | 1430, 1650, 0, 720, 725, 730, 750, 0, |
855 | 1430, 1650, 0, 720, 725, 730, 750, 0, |
847 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
856 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
848 | .vrefresh = 120, }, |
857 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
849 | /* 48 - 720x480@120Hz */ |
858 | /* 48 - 720x480@120Hz */ |
850 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, |
859 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, |
851 | 798, 858, 0, 480, 489, 495, 525, 0, |
860 | 798, 858, 0, 480, 489, 495, 525, 0, |
852 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
861 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
853 | .vrefresh = 120, }, |
862 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
854 | /* 49 - 720x480@120Hz */ |
863 | /* 49 - 720x480@120Hz */ |
855 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, |
864 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, |
856 | 798, 858, 0, 480, 489, 495, 525, 0, |
865 | 798, 858, 0, 480, 489, 495, 525, 0, |
857 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
866 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
858 | .vrefresh = 120, }, |
867 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
859 | /* 50 - 1440x480i@120Hz */ |
868 | /* 50 - 1440x480i@120Hz */ |
860 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, |
869 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, |
861 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
870 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
862 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
871 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
863 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
872 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
864 | .vrefresh = 120, }, |
873 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
865 | /* 51 - 1440x480i@120Hz */ |
874 | /* 51 - 1440x480i@120Hz */ |
866 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, |
875 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, |
867 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
876 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
868 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
877 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
869 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
878 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
870 | .vrefresh = 120, }, |
879 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
871 | /* 52 - 720x576@200Hz */ |
880 | /* 52 - 720x576@200Hz */ |
872 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, |
881 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, |
873 | 796, 864, 0, 576, 581, 586, 625, 0, |
882 | 796, 864, 0, 576, 581, 586, 625, 0, |
874 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
883 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
875 | .vrefresh = 200, }, |
884 | .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
876 | /* 53 - 720x576@200Hz */ |
885 | /* 53 - 720x576@200Hz */ |
877 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, |
886 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, |
878 | 796, 864, 0, 576, 581, 586, 625, 0, |
887 | 796, 864, 0, 576, 581, 586, 625, 0, |
879 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
888 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
880 | .vrefresh = 200, }, |
889 | .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
881 | /* 54 - 1440x576i@200Hz */ |
890 | /* 54 - 1440x576i@200Hz */ |
882 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, |
891 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, |
883 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
892 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
884 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
893 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
885 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
894 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
886 | .vrefresh = 200, }, |
895 | .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
887 | /* 55 - 1440x576i@200Hz */ |
896 | /* 55 - 1440x576i@200Hz */ |
888 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, |
897 | { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, |
889 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
898 | 1590, 1728, 0, 576, 580, 586, 625, 0, |
890 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
899 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
891 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
900 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
892 | .vrefresh = 200, }, |
901 | .vrefresh = 200, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
893 | /* 56 - 720x480@240Hz */ |
902 | /* 56 - 720x480@240Hz */ |
894 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, |
903 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, |
895 | 798, 858, 0, 480, 489, 495, 525, 0, |
904 | 798, 858, 0, 480, 489, 495, 525, 0, |
896 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
905 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
897 | .vrefresh = 240, }, |
906 | .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
898 | /* 57 - 720x480@240Hz */ |
907 | /* 57 - 720x480@240Hz */ |
899 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, |
908 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, |
900 | 798, 858, 0, 480, 489, 495, 525, 0, |
909 | 798, 858, 0, 480, 489, 495, 525, 0, |
901 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
910 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), |
902 | .vrefresh = 240, }, |
911 | .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
903 | /* 58 - 1440x480i@240 */ |
912 | /* 58 - 1440x480i@240 */ |
904 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, |
913 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, |
905 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
914 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
906 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
915 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
907 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
916 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
908 | .vrefresh = 240, }, |
917 | .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, |
909 | /* 59 - 1440x480i@240 */ |
918 | /* 59 - 1440x480i@240 */ |
910 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, |
919 | { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, |
911 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
920 | 1602, 1716, 0, 480, 488, 494, 525, 0, |
912 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
921 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | |
913 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
922 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK), |
914 | .vrefresh = 240, }, |
923 | .vrefresh = 240, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
915 | /* 60 - 1280x720@24Hz */ |
924 | /* 60 - 1280x720@24Hz */ |
916 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040, |
925 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040, |
917 | 3080, 3300, 0, 720, 725, 730, 750, 0, |
926 | 3080, 3300, 0, 720, 725, 730, 750, 0, |
918 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
927 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
919 | .vrefresh = 24, }, |
928 | .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
920 | /* 61 - 1280x720@25Hz */ |
929 | /* 61 - 1280x720@25Hz */ |
921 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700, |
930 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700, |
922 | 3740, 3960, 0, 720, 725, 730, 750, 0, |
931 | 3740, 3960, 0, 720, 725, 730, 750, 0, |
923 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
932 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
924 | .vrefresh = 25, }, |
933 | .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
925 | /* 62 - 1280x720@30Hz */ |
934 | /* 62 - 1280x720@30Hz */ |
926 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040, |
935 | { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040, |
927 | 3080, 3300, 0, 720, 725, 730, 750, 0, |
936 | 3080, 3300, 0, 720, 725, 730, 750, 0, |
928 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
937 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
929 | .vrefresh = 30, }, |
938 | .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
930 | /* 63 - 1920x1080@120Hz */ |
939 | /* 63 - 1920x1080@120Hz */ |
931 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008, |
940 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008, |
932 | 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, |
941 | 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, |
933 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
942 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
934 | .vrefresh = 120, }, |
943 | .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
935 | /* 64 - 1920x1080@100Hz */ |
944 | /* 64 - 1920x1080@100Hz */ |
936 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448, |
945 | { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448, |
937 | 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, |
946 | 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, |
938 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
947 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), |
939 | .vrefresh = 100, }, |
948 | .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, |
940 | }; |
949 | }; |
Line 941... | Line 950... | ||
941 | 950 | ||
942 | /* |
951 | /* |
943 | * HDMI 1.4 4k modes. |
952 | * HDMI 1.4 4k modes. |
Line 1267... | Line 1276... | ||
1267 | 1276 | ||
1268 | return edid; |
1277 | return edid; |
1269 | } |
1278 | } |
Line -... | Line 1279... | ||
- | 1279 | EXPORT_SYMBOL(drm_get_edid); |
|
- | 1280 | ||
- | 1281 | /** |
|
- | 1282 | * drm_edid_duplicate - duplicate an EDID and the extensions |
|
- | 1283 | * @edid: EDID to duplicate |
|
- | 1284 | * |
|
- | 1285 | * Return duplicate edid or NULL on allocation failure. |
|
- | 1286 | */ |
|
- | 1287 | struct edid *drm_edid_duplicate(const struct edid *edid) |
|
- | 1288 | { |
|
- | 1289 | return kmemdup(edid, (edid->extensions + 1) * EDID_LENGTH, GFP_KERNEL); |
|
- | 1290 | } |
|
1270 | EXPORT_SYMBOL(drm_get_edid); |
1291 | EXPORT_SYMBOL(drm_edid_duplicate); |
Line 1271... | Line 1292... | ||
1271 | 1292 | ||
1272 | /*** EDID parsing ***/ |
1293 | /*** EDID parsing ***/ |
1273 | 1294 | ||
Line 1311... | Line 1332... | ||
1311 | 1332 | ||
1312 | return 0; |
1333 | return 0; |
Line 1313... | Line 1334... | ||
1313 | } |
1334 | } |
1314 | 1335 | ||
Line 1315... | Line 1336... | ||
1315 | #define MODE_SIZE(m) ((m)->hdisplay * (m)->vdisplay) |
1336 | #define MODE_SIZE(m) ((m)->hdisplay * (m)->vdisplay) |
1316 | #define MODE_REFRESH_DIFF(m,r) (abs((m)->vrefresh - target_refresh)) |
1337 | #define MODE_REFRESH_DIFF(c,t) (abs((c) - (t))) |
1317 | 1338 | ||
1318 | /** |
1339 | /** |
Line 1326... | Line 1347... | ||
1326 | static void edid_fixup_preferred(struct drm_connector *connector, |
1347 | static void edid_fixup_preferred(struct drm_connector *connector, |
1327 | u32 quirks) |
1348 | u32 quirks) |
1328 | { |
1349 | { |
1329 | struct drm_display_mode *t, *cur_mode, *preferred_mode; |
1350 | struct drm_display_mode *t, *cur_mode, *preferred_mode; |
1330 | int target_refresh = 0; |
1351 | int target_refresh = 0; |
- | 1352 | int cur_vrefresh, preferred_vrefresh; |
|
Line 1331... | Line 1353... | ||
1331 | 1353 | ||
1332 | if (list_empty(&connector->probed_modes)) |
1354 | if (list_empty(&connector->probed_modes)) |
Line 1333... | Line 1355... | ||
1333 | return; |
1355 | return; |
Line 1348... | Line 1370... | ||
1348 | 1370 | ||
1349 | /* Largest mode is preferred */ |
1371 | /* Largest mode is preferred */ |
1350 | if (MODE_SIZE(cur_mode) > MODE_SIZE(preferred_mode)) |
1372 | if (MODE_SIZE(cur_mode) > MODE_SIZE(preferred_mode)) |
Line -... | Line 1373... | ||
- | 1373 | preferred_mode = cur_mode; |
|
- | 1374 | ||
- | 1375 | cur_vrefresh = cur_mode->vrefresh ? |
|
- | 1376 | cur_mode->vrefresh : drm_mode_vrefresh(cur_mode); |
|
1351 | preferred_mode = cur_mode; |
1377 | preferred_vrefresh = preferred_mode->vrefresh ? |
1352 | 1378 | preferred_mode->vrefresh : drm_mode_vrefresh(preferred_mode); |
|
1353 | /* At a given size, try to get closest to target refresh */ |
1379 | /* At a given size, try to get closest to target refresh */ |
1354 | if ((MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) && |
1380 | if ((MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) && |
1355 | MODE_REFRESH_DIFF(cur_mode, target_refresh) < |
1381 | MODE_REFRESH_DIFF(cur_vrefresh, target_refresh) < |
1356 | MODE_REFRESH_DIFF(preferred_mode, target_refresh)) { |
1382 | MODE_REFRESH_DIFF(preferred_vrefresh, target_refresh)) { |
1357 | preferred_mode = cur_mode; |
1383 | preferred_mode = cur_mode; |
Line 1358... | Line 1384... | ||
1358 | } |
1384 | } |
Line 2071... | Line 2097... | ||
2071 | int i, j, m, modes = 0; |
2097 | int i, j, m, modes = 0; |
2072 | struct drm_display_mode *mode; |
2098 | struct drm_display_mode *mode; |
2073 | u8 *est = ((u8 *)timing) + 5; |
2099 | u8 *est = ((u8 *)timing) + 5; |
Line 2074... | Line 2100... | ||
2074 | 2100 | ||
2075 | for (i = 0; i < 6; i++) { |
2101 | for (i = 0; i < 6; i++) { |
2076 | for (j = 7; j > 0; j--) { |
2102 | for (j = 7; j >= 0; j--) { |
2077 | m = (i * 8) + (7 - j); |
2103 | m = (i * 8) + (7 - j); |
2078 | if (m >= ARRAY_SIZE(est3_modes)) |
2104 | if (m >= ARRAY_SIZE(est3_modes)) |
2079 | break; |
2105 | break; |
2080 | if (est[i] & (1 << j)) { |
2106 | if (est[i] & (1 << j)) { |
Line 2407... | Line 2433... | ||
2407 | clock1 = cea_mode->clock; |
2433 | clock1 = cea_mode->clock; |
2408 | clock2 = cea_mode_alternate_clock(cea_mode); |
2434 | clock2 = cea_mode_alternate_clock(cea_mode); |
Line 2409... | Line 2435... | ||
2409 | 2435 | ||
2410 | if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) || |
2436 | if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) || |
2411 | KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) && |
2437 | KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) && |
2412 | drm_mode_equal_no_clocks(to_match, cea_mode)) |
2438 | drm_mode_equal_no_clocks_no_stereo(to_match, cea_mode)) |
2413 | return mode + 1; |
2439 | return mode + 1; |
2414 | } |
2440 | } |
2415 | return 0; |
2441 | return 0; |
2416 | } |
2442 | } |
Line 2456... | Line 2482... | ||
2456 | clock1 = hdmi_mode->clock; |
2482 | clock1 = hdmi_mode->clock; |
2457 | clock2 = hdmi_mode_alternate_clock(hdmi_mode); |
2483 | clock2 = hdmi_mode_alternate_clock(hdmi_mode); |
Line 2458... | Line 2484... | ||
2458 | 2484 | ||
2459 | if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) || |
2485 | if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) || |
2460 | KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) && |
2486 | KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) && |
2461 | drm_mode_equal_no_clocks(to_match, hdmi_mode)) |
2487 | drm_mode_equal_no_clocks_no_stereo(to_match, hdmi_mode)) |
2462 | return mode + 1; |
2488 | return mode + 1; |
2463 | } |
2489 | } |
2464 | return 0; |
2490 | return 0; |
Line 2510... | Line 2536... | ||
2510 | 2536 | ||
2511 | newmode = drm_mode_duplicate(dev, cea_mode); |
2537 | newmode = drm_mode_duplicate(dev, cea_mode); |
2512 | if (!newmode) |
2538 | if (!newmode) |
Line -... | Line 2539... | ||
- | 2539 | continue; |
|
- | 2540 | ||
- | 2541 | /* Carry over the stereo flags */ |
|
2513 | continue; |
2542 | newmode->flags |= mode->flags & DRM_MODE_FLAG_3D_MASK; |
2514 | 2543 | ||
2515 | /* |
2544 | /* |
2516 | * The current mode could be either variant. Make |
2545 | * The current mode could be either variant. Make |
2517 | * sure to pick the "other" clock for the new mode. |
2546 | * sure to pick the "other" clock for the new mode. |
Line 2531... | Line 2560... | ||
2531 | } |
2560 | } |
Line 2532... | Line 2561... | ||
2532 | 2561 | ||
2533 | return modes; |
2562 | return modes; |
Line -... | Line 2563... | ||
- | 2563 | } |
|
- | 2564 | ||
- | 2565 | static struct drm_display_mode * |
|
- | 2566 | drm_display_mode_from_vic_index(struct drm_connector *connector, |
|
- | 2567 | const u8 *video_db, u8 video_len, |
|
- | 2568 | u8 video_index) |
|
- | 2569 | { |
|
- | 2570 | struct drm_device *dev = connector->dev; |
|
- | 2571 | struct drm_display_mode *newmode; |
|
- | 2572 | u8 cea_mode; |
|
- | 2573 | ||
- | 2574 | if (video_db == NULL || video_index >= video_len) |
|
- | 2575 | return NULL; |
|
- | 2576 | ||
- | 2577 | /* CEA modes are numbered 1..127 */ |
|
- | 2578 | cea_mode = (video_db[video_index] & 127) - 1; |
|
- | 2579 | if (cea_mode >= ARRAY_SIZE(edid_cea_modes)) |
|
- | 2580 | return NULL; |
|
- | 2581 | ||
- | 2582 | newmode = drm_mode_duplicate(dev, &edid_cea_modes[cea_mode]); |
|
- | 2583 | newmode->vrefresh = 0; |
|
- | 2584 | ||
- | 2585 | return newmode; |
|
2534 | } |
2586 | } |
2535 | 2587 | ||
2536 | static int |
2588 | static int |
- | 2589 | do_cea_modes(struct drm_connector *connector, const u8 *db, u8 len) |
|
- | 2590 | { |
|
- | 2591 | int i, modes = 0; |
|
- | 2592 | ||
- | 2593 | for (i = 0; i < len; i++) { |
|
- | 2594 | struct drm_display_mode *mode; |
|
- | 2595 | mode = drm_display_mode_from_vic_index(connector, db, len, i); |
|
- | 2596 | if (mode) { |
|
- | 2597 | drm_mode_probed_add(connector, mode); |
|
- | 2598 | modes++; |
|
- | 2599 | } |
|
- | 2600 | } |
|
- | 2601 | ||
- | 2602 | return modes; |
|
- | 2603 | } |
|
- | 2604 | ||
- | 2605 | struct stereo_mandatory_mode { |
|
- | 2606 | int width, height, vrefresh; |
|
- | 2607 | unsigned int flags; |
|
- | 2608 | }; |
|
- | 2609 | ||
- | 2610 | static const struct stereo_mandatory_mode stereo_mandatory_modes[] = { |
|
- | 2611 | { 1920, 1080, 24, DRM_MODE_FLAG_3D_TOP_AND_BOTTOM }, |
|
- | 2612 | { 1920, 1080, 24, DRM_MODE_FLAG_3D_FRAME_PACKING }, |
|
- | 2613 | { 1920, 1080, 50, |
|
- | 2614 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF }, |
|
- | 2615 | { 1920, 1080, 60, |
|
- | 2616 | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF }, |
|
- | 2617 | { 1280, 720, 50, DRM_MODE_FLAG_3D_TOP_AND_BOTTOM }, |
|
- | 2618 | { 1280, 720, 50, DRM_MODE_FLAG_3D_FRAME_PACKING }, |
|
- | 2619 | { 1280, 720, 60, DRM_MODE_FLAG_3D_TOP_AND_BOTTOM }, |
|
- | 2620 | { 1280, 720, 60, DRM_MODE_FLAG_3D_FRAME_PACKING } |
|
- | 2621 | }; |
|
- | 2622 | ||
- | 2623 | static bool |
|
- | 2624 | stereo_match_mandatory(const struct drm_display_mode *mode, |
|
- | 2625 | const struct stereo_mandatory_mode *stereo_mode) |
|
- | 2626 | { |
|
- | 2627 | unsigned int interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE; |
|
- | 2628 | ||
- | 2629 | return mode->hdisplay == stereo_mode->width && |
|
- | 2630 | mode->vdisplay == stereo_mode->height && |
|
- | 2631 | interlaced == (stereo_mode->flags & DRM_MODE_FLAG_INTERLACE) && |
|
- | 2632 | drm_mode_vrefresh(mode) == stereo_mode->vrefresh; |
|
- | 2633 | } |
|
- | 2634 | ||
2537 | do_cea_modes(struct drm_connector *connector, const u8 *db, u8 len) |
2635 | static int add_hdmi_mandatory_stereo_modes(struct drm_connector *connector) |
2538 | { |
2636 | { |
2539 | struct drm_device *dev = connector->dev; |
2637 | struct drm_device *dev = connector->dev; |
2540 | const u8 *mode; |
2638 | const struct drm_display_mode *mode; |
- | 2639 | struct list_head stereo_modes; |
|
- | 2640 | int modes = 0, i; |
|
- | 2641 | ||
- | 2642 | INIT_LIST_HEAD(&stereo_modes); |
|
- | 2643 | ||
- | 2644 | list_for_each_entry(mode, &connector->probed_modes, head) { |
|
- | 2645 | for (i = 0; i < ARRAY_SIZE(stereo_mandatory_modes); i++) { |
|
- | 2646 | const struct stereo_mandatory_mode *mandatory; |
|
- | 2647 | struct drm_display_mode *new_mode; |
|
- | 2648 | ||
- | 2649 | if (!stereo_match_mandatory(mode, |
|
- | 2650 | &stereo_mandatory_modes[i])) |
|
- | 2651 | continue; |
|
- | 2652 | ||
- | 2653 | mandatory = &stereo_mandatory_modes[i]; |
|
- | 2654 | new_mode = drm_mode_duplicate(dev, mode); |
|
- | 2655 | if (!new_mode) |
|
- | 2656 | continue; |
|
- | 2657 | ||
- | 2658 | new_mode->flags |= mandatory->flags; |
|
- | 2659 | list_add_tail(&new_mode->head, &stereo_modes); |
|
- | 2660 | modes++; |
|
Line 2541... | Line 2661... | ||
2541 | u8 cea_mode; |
2661 | } |
- | 2662 | } |
|
- | 2663 | ||
- | 2664 | list_splice_tail(&stereo_modes, &connector->probed_modes); |
|
- | 2665 | ||
2542 | int modes = 0; |
2666 | return modes; |
- | 2667 | } |
|
2543 | 2668 | ||
2544 | for (mode = db; mode < db + len; mode++) { |
2669 | static int add_hdmi_mode(struct drm_connector *connector, u8 vic) |
- | 2670 | { |
|
- | 2671 | struct drm_device *dev = connector->dev; |
|
- | 2672 | struct drm_display_mode *newmode; |
|
- | 2673 | ||
- | 2674 | vic--; /* VICs start at 1 */ |
|
- | 2675 | if (vic >= ARRAY_SIZE(edid_4k_modes)) { |
|
- | 2676 | DRM_ERROR("Unknown HDMI VIC: %d\n", vic); |
|
2545 | cea_mode = (*mode & 127) - 1; /* CEA modes are numbered 1..127 */ |
2677 | return 0; |
- | 2678 | } |
|
- | 2679 | ||
- | 2680 | newmode = drm_mode_duplicate(dev, &edid_4k_modes[vic]); |
|
- | 2681 | if (!newmode) |
|
- | 2682 | return 0; |
|
- | 2683 | ||
- | 2684 | drm_mode_probed_add(connector, newmode); |
|
- | 2685 | ||
- | 2686 | return 1; |
|
- | 2687 | } |
|
- | 2688 | ||
2546 | if (cea_mode < ARRAY_SIZE(edid_cea_modes)) { |
2689 | static int add_3d_struct_modes(struct drm_connector *connector, u16 structure, |
- | 2690 | const u8 *video_db, u8 video_len, u8 video_index) |
|
- | 2691 | { |
|
- | 2692 | struct drm_display_mode *newmode; |
|
- | 2693 | int modes = 0; |
|
- | 2694 | ||
- | 2695 | if (structure & (1 << 0)) { |
|
2547 | struct drm_display_mode *newmode; |
2696 | newmode = drm_display_mode_from_vic_index(connector, video_db, |
- | 2697 | video_len, |
|
- | 2698 | video_index); |
|
2548 | newmode = drm_mode_duplicate(dev, |
2699 | if (newmode) { |
- | 2700 | newmode->flags |= DRM_MODE_FLAG_3D_FRAME_PACKING; |
|
- | 2701 | drm_mode_probed_add(connector, newmode); |
|
- | 2702 | modes++; |
|
- | 2703 | } |
|
- | 2704 | } |
|
- | 2705 | if (structure & (1 << 6)) { |
|
- | 2706 | newmode = drm_display_mode_from_vic_index(connector, video_db, |
|
- | 2707 | video_len, |
|
2549 | &edid_cea_modes[cea_mode]); |
2708 | video_index); |
2550 | if (newmode) { |
2709 | if (newmode) { |
2551 | newmode->vrefresh = 0; |
2710 | newmode->flags |= DRM_MODE_FLAG_3D_TOP_AND_BOTTOM; |
2552 | drm_mode_probed_add(connector, newmode); |
2711 | drm_mode_probed_add(connector, newmode); |
- | 2712 | modes++; |
|
- | 2713 | } |
|
- | 2714 | } |
|
- | 2715 | if (structure & (1 << 8)) { |
|
- | 2716 | newmode = drm_display_mode_from_vic_index(connector, video_db, |
|
- | 2717 | video_len, |
|
- | 2718 | video_index); |
|
- | 2719 | if (newmode) { |
|
- | 2720 | newmode->flags |= DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF; |
|
2553 | modes++; |
2721 | drm_mode_probed_add(connector, newmode); |
Line 2554... | Line 2722... | ||
2554 | } |
2722 | modes++; |
2555 | } |
2723 | } |
Line 2562... | Line 2730... | ||
2562 | * do_hdmi_vsdb_modes - Parse the HDMI Vendor Specific data block |
2730 | * do_hdmi_vsdb_modes - Parse the HDMI Vendor Specific data block |
2563 | * @connector: connector corresponding to the HDMI sink |
2731 | * @connector: connector corresponding to the HDMI sink |
2564 | * @db: start of the CEA vendor specific block |
2732 | * @db: start of the CEA vendor specific block |
2565 | * @len: length of the CEA block payload, ie. one can access up to db[len] |
2733 | * @len: length of the CEA block payload, ie. one can access up to db[len] |
2566 | * |
2734 | * |
2567 | * Parses the HDMI VSDB looking for modes to add to @connector. |
2735 | * Parses the HDMI VSDB looking for modes to add to @connector. This function |
- | 2736 | * also adds the stereo 3d modes when applicable. |
|
2568 | */ |
2737 | */ |
2569 | static int |
2738 | static int |
2570 | do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len) |
2739 | do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len, |
- | 2740 | const u8 *video_db, u8 video_len) |
|
2571 | { |
2741 | { |
2572 | struct drm_device *dev = connector->dev; |
2742 | int modes = 0, offset = 0, i, multi_present = 0, multi_len; |
2573 | int modes = 0, offset = 0, i; |
2743 | u8 vic_len, hdmi_3d_len = 0; |
2574 | u8 vic_len; |
2744 | u16 mask; |
- | 2745 | u16 structure_all; |
|
Line 2575... | Line 2746... | ||
2575 | 2746 | ||
2576 | if (len < 8) |
2747 | if (len < 8) |
Line 2577... | Line 2748... | ||
2577 | goto out; |
2748 | goto out; |
Line 2588... | Line 2759... | ||
2588 | if (db[8] & (1 << 6)) |
2759 | if (db[8] & (1 << 6)) |
2589 | offset += 2; |
2760 | offset += 2; |
Line 2590... | Line 2761... | ||
2590 | 2761 | ||
2591 | /* the declared length is not long enough for the 2 first bytes |
2762 | /* the declared length is not long enough for the 2 first bytes |
2592 | * of additional video format capabilities */ |
- | |
2593 | offset += 2; |
2763 | * of additional video format capabilities */ |
2594 | if (len < (8 + offset)) |
2764 | if (len < (8 + offset + 2)) |
Line -... | Line 2765... | ||
- | 2765 | goto out; |
|
- | 2766 | ||
- | 2767 | /* 3D_Present */ |
|
- | 2768 | offset++; |
|
- | 2769 | if (db[8 + offset] & (1 << 7)) { |
|
- | 2770 | modes += add_hdmi_mandatory_stereo_modes(connector); |
|
- | 2771 | ||
- | 2772 | /* 3D_Multi_present */ |
|
- | 2773 | multi_present = (db[8 + offset] & 0x60) >> 5; |
|
- | 2774 | } |
|
2595 | goto out; |
2775 | |
- | 2776 | offset++; |
|
Line 2596... | Line 2777... | ||
2596 | 2777 | vic_len = db[8 + offset] >> 5; |
|
2597 | vic_len = db[8 + offset] >> 5; |
- | |
2598 | 2778 | hdmi_3d_len = db[8 + offset] & 0x1f; |
|
Line 2599... | Line 2779... | ||
2599 | for (i = 0; i < vic_len && len >= (9 + offset + i); i++) { |
2779 | |
- | 2780 | for (i = 0; i < vic_len && len >= (9 + offset + i); i++) { |
|
- | 2781 | u8 vic; |
|
- | 2782 | ||
Line 2600... | Line 2783... | ||
2600 | struct drm_display_mode *newmode; |
2783 | vic = db[9 + offset + i]; |
- | 2784 | modes += add_hdmi_mode(connector, vic); |
|
- | 2785 | } |
|
- | 2786 | offset += 1 + vic_len; |
|
- | 2787 | ||
- | 2788 | if (multi_present == 1) |
|
- | 2789 | multi_len = 2; |
|
2601 | u8 vic; |
2790 | else if (multi_present == 2) |
- | 2791 | multi_len = 4; |
|
- | 2792 | else |
|
2602 | 2793 | multi_len = 0; |
|
2603 | vic = db[9 + offset + i]; |
2794 | |
- | 2795 | if (len < (8 + offset + hdmi_3d_len - 1)) |
|
- | 2796 | goto out; |
|
- | 2797 | ||
- | 2798 | if (hdmi_3d_len < multi_len) |
|
- | 2799 | goto out; |
|
- | 2800 | ||
- | 2801 | if (multi_present == 1 || multi_present == 2) { |
|
- | 2802 | /* 3D_Structure_ALL */ |
|
- | 2803 | structure_all = (db[8 + offset] << 8) | db[9 + offset]; |
|
- | 2804 | ||
- | 2805 | /* check if 3D_MASK is present */ |
|
- | 2806 | if (multi_present == 2) |
|
- | 2807 | mask = (db[10 + offset] << 8) | db[11 + offset]; |
|
- | 2808 | else |
|
- | 2809 | mask = 0xffff; |
|
- | 2810 | ||
- | 2811 | for (i = 0; i < 16; i++) { |
|
- | 2812 | if (mask & (1 << i)) |
|
2604 | 2813 | modes += add_3d_struct_modes(connector, |
|
Line -... | Line 2814... | ||
- | 2814 | structure_all, |
|
- | 2815 | video_db, |
|
2605 | vic--; /* VICs start at 1 */ |
2816 | video_len, i); |
2606 | if (vic >= ARRAY_SIZE(edid_4k_modes)) { |
2817 | } |
- | 2818 | } |
|
- | 2819 | ||
- | 2820 | offset += multi_len; |
|
- | 2821 | ||
- | 2822 | for (i = 0; i < (hdmi_3d_len - multi_len); i++) { |
|
- | 2823 | int vic_index; |
|
- | 2824 | struct drm_display_mode *newmode = NULL; |
|
- | 2825 | unsigned int newflag = 0; |
|
- | 2826 | bool detail_present; |
|
- | 2827 | ||
- | 2828 | detail_present = ((db[8 + offset + i] & 0x0f) > 7); |
|
- | 2829 | ||
- | 2830 | if (detail_present && (i + 1 == hdmi_3d_len - multi_len)) |
|
- | 2831 | break; |
|
- | 2832 | ||
- | 2833 | /* 2D_VIC_order_X */ |
|
- | 2834 | vic_index = db[8 + offset + i] >> 4; |
|
- | 2835 | ||
- | 2836 | /* 3D_Structure_X */ |
|
- | 2837 | switch (db[8 + offset + i] & 0x0f) { |
|
- | 2838 | case 0: |
|
- | 2839 | newflag = DRM_MODE_FLAG_3D_FRAME_PACKING; |
|
- | 2840 | break; |
|
- | 2841 | case 6: |
|
2607 | DRM_ERROR("Unknown HDMI VIC: %d\n", vic); |
2842 | newflag = DRM_MODE_FLAG_3D_TOP_AND_BOTTOM; |
- | 2843 | break; |
|
Line -... | Line 2844... | ||
- | 2844 | case 8: |
|
- | 2845 | /* 3D_Detail_X */ |
|
- | 2846 | if ((db[9 + offset + i] >> 4) == 1) |
|
- | 2847 | newflag = DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF; |
|
- | 2848 | break; |
|
- | 2849 | } |
|
- | 2850 | ||
- | 2851 | if (newflag != 0) { |
|
2608 | continue; |
2852 | newmode = drm_display_mode_from_vic_index(connector, |
2609 | } |
2853 | video_db, |
2610 | 2854 | video_len, |
|
- | 2855 | vic_index); |
|
- | 2856 | ||
- | 2857 | if (newmode) { |
|
- | 2858 | newmode->flags |= newflag; |
|
- | 2859 | drm_mode_probed_add(connector, newmode); |
|
Line 2611... | Line 2860... | ||
2611 | newmode = drm_mode_duplicate(dev, &edid_4k_modes[vic]); |
2860 | modes++; |
2612 | if (!newmode) |
2861 | } |
2613 | continue; |
2862 | } |
Line 2671... | Line 2920... | ||
2671 | 2920 | ||
2672 | static int |
2921 | static int |
2673 | add_cea_modes(struct drm_connector *connector, struct edid *edid) |
2922 | add_cea_modes(struct drm_connector *connector, struct edid *edid) |
2674 | { |
2923 | { |
2675 | const u8 *cea = drm_find_cea_extension(edid); |
2924 | const u8 *cea = drm_find_cea_extension(edid); |
2676 | const u8 *db; |
2925 | const u8 *db, *hdmi = NULL, *video = NULL; |
2677 | u8 dbl; |
2926 | u8 dbl, hdmi_len, video_len = 0; |
Line 2678... | Line 2927... | ||
2678 | int modes = 0; |
2927 | int modes = 0; |
2679 | 2928 | ||
Line 2685... | Line 2934... | ||
2685 | 2934 | ||
2686 | for_each_cea_db(cea, i, start, end) { |
2935 | for_each_cea_db(cea, i, start, end) { |
2687 | db = &cea[i]; |
2936 | db = &cea[i]; |
Line 2688... | Line 2937... | ||
2688 | dbl = cea_db_payload_len(db); |
2937 | dbl = cea_db_payload_len(db); |
- | 2938 | ||
- | 2939 | if (cea_db_tag(db) == VIDEO_BLOCK) { |
|
2689 | 2940 | video = db + 1; |
|
- | 2941 | video_len = dbl; |
|
2690 | if (cea_db_tag(db) == VIDEO_BLOCK) |
2942 | modes += do_cea_modes(connector, video, dbl); |
- | 2943 | } |
|
2691 | modes += do_cea_modes(connector, db + 1, dbl); |
2944 | else if (cea_db_is_hdmi_vsdb(db)) { |
- | 2945 | hdmi = db; |
|
2692 | else if (cea_db_is_hdmi_vsdb(db)) |
2946 | hdmi_len = dbl; |
2693 | modes += do_hdmi_vsdb_modes(connector, db, dbl); |
2947 | } |
Line -... | Line 2948... | ||
- | 2948 | } |
|
- | 2949 | } |
|
- | 2950 | ||
- | 2951 | /* |
|
- | 2952 | * We parse the HDMI VSDB after having added the cea modes as we will |
|
- | 2953 | * be patching their flags when the sink supports stereo 3D. |
|
- | 2954 | */ |
|
- | 2955 | if (hdmi) |
|
2694 | } |
2956 | modes += do_hdmi_vsdb_modes(connector, hdmi, hdmi_len, video, |
2695 | } |
2957 | video_len); |
Line 2696... | Line 2958... | ||
2696 | 2958 | ||
2697 | return modes; |
2959 | return modes; |
Line 3294... | Line 3556... | ||
3294 | } |
3556 | } |
3295 | return num_modes; |
3557 | return num_modes; |
3296 | } |
3558 | } |
3297 | EXPORT_SYMBOL(drm_add_modes_noedid); |
3559 | EXPORT_SYMBOL(drm_add_modes_noedid); |
Line -... | Line 3560... | ||
- | 3560 | ||
- | 3561 | void drm_set_preferred_mode(struct drm_connector *connector, |
|
- | 3562 | int hpref, int vpref) |
|
- | 3563 | { |
|
- | 3564 | struct drm_display_mode *mode; |
|
- | 3565 | ||
- | 3566 | list_for_each_entry(mode, &connector->probed_modes, head) { |
|
- | 3567 | if (drm_mode_width(mode) == hpref && |
|
- | 3568 | drm_mode_height(mode) == vpref) |
|
- | 3569 | mode->type |= DRM_MODE_TYPE_PREFERRED; |
|
- | 3570 | } |
|
- | 3571 | } |
|
- | 3572 | EXPORT_SYMBOL(drm_set_preferred_mode); |
|
3298 | 3573 | ||
3299 | /** |
3574 | /** |
3300 | * drm_hdmi_avi_infoframe_from_display_mode() - fill an HDMI AVI infoframe with |
3575 | * drm_hdmi_avi_infoframe_from_display_mode() - fill an HDMI AVI infoframe with |
3301 | * data from a DRM display mode |
3576 | * data from a DRM display mode |
3302 | * @frame: HDMI AVI infoframe |
3577 | * @frame: HDMI AVI infoframe |
Line 3327... | Line 3602... | ||
3327 | 3602 | ||
3328 | return 0; |
3603 | return 0; |
3329 | } |
3604 | } |
Line -... | Line 3605... | ||
- | 3605 | EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode); |
|
- | 3606 | ||
- | 3607 | static enum hdmi_3d_structure |
|
- | 3608 | s3d_structure_from_display_mode(const struct drm_display_mode *mode) |
|
- | 3609 | { |
|
- | 3610 | u32 layout = mode->flags & DRM_MODE_FLAG_3D_MASK; |
|
- | 3611 | ||
- | 3612 | switch (layout) { |
|
- | 3613 | case DRM_MODE_FLAG_3D_FRAME_PACKING: |
|
- | 3614 | return HDMI_3D_STRUCTURE_FRAME_PACKING; |
|
- | 3615 | case DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE: |
|
- | 3616 | return HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE; |
|
- | 3617 | case DRM_MODE_FLAG_3D_LINE_ALTERNATIVE: |
|
- | 3618 | return HDMI_3D_STRUCTURE_LINE_ALTERNATIVE; |
|
- | 3619 | case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL: |
|
- | 3620 | return HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL; |
|
- | 3621 | case DRM_MODE_FLAG_3D_L_DEPTH: |
|
- | 3622 | return HDMI_3D_STRUCTURE_L_DEPTH; |
|
- | 3623 | case DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH: |
|
- | 3624 | return HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH; |
|
- | 3625 | case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: |
|
- | 3626 | return HDMI_3D_STRUCTURE_TOP_AND_BOTTOM; |
|
- | 3627 | case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: |
|
- | 3628 | return HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF; |
|
- | 3629 | default: |
|
- | 3630 | return HDMI_3D_STRUCTURE_INVALID; |
|
- | 3631 | } |
|
3330 | EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode); |
3632 | } |
3331 | 3633 | ||
3332 | /** |
3634 | /** |
3333 | * drm_hdmi_vendor_infoframe_from_display_mode() - fill an HDMI infoframe with |
3635 | * drm_hdmi_vendor_infoframe_from_display_mode() - fill an HDMI infoframe with |
3334 | * data from a DRM display mode |
3636 | * data from a DRM display mode |
Line 3344... | Line 3646... | ||
3344 | int |
3646 | int |
3345 | drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame, |
3647 | drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame, |
3346 | const struct drm_display_mode *mode) |
3648 | const struct drm_display_mode *mode) |
3347 | { |
3649 | { |
3348 | int err; |
3650 | int err; |
- | 3651 | u32 s3d_flags; |
|
3349 | u8 vic; |
3652 | u8 vic; |
Line 3350... | Line 3653... | ||
3350 | 3653 | ||
3351 | if (!frame || !mode) |
3654 | if (!frame || !mode) |
Line 3352... | Line 3655... | ||
3352 | return -EINVAL; |
3655 | return -EINVAL; |
- | 3656 | ||
- | 3657 | vic = drm_match_hdmi_mode(mode); |
|
3353 | 3658 | s3d_flags = mode->flags & DRM_MODE_FLAG_3D_MASK; |
|
- | 3659 | ||
- | 3660 | if (!vic && !s3d_flags) |
|
- | 3661 | return -EINVAL; |
|
3354 | vic = drm_match_hdmi_mode(mode); |
3662 | |
Line 3355... | Line 3663... | ||
3355 | if (!vic) |
3663 | if (vic && s3d_flags) |
3356 | return -EINVAL; |
3664 | return -EINVAL; |
3357 | 3665 | ||
Line -... | Line 3666... | ||
- | 3666 | err = hdmi_vendor_infoframe_init(frame); |
|
3358 | err = hdmi_vendor_infoframe_init(frame); |
3667 | if (err < 0) |
- | 3668 | return err; |
|
- | 3669 | ||
Line 3359... | Line 3670... | ||
3359 | if (err < 0) |
3670 | if (vic) |
3360 | return err; |
3671 | frame->vic = vic; |
3361 | 3672 | else |