diff options
author | Manjunath Hadli <manjunath.hadli@ti.com> | 2012-02-23 04:47:46 -0500 |
---|---|---|
committer | Sekhar Nori <nsekhar@ti.com> | 2012-03-11 03:11:31 -0400 |
commit | d5be5f549c9d619fe3e16160c453a72f718284de (patch) | |
tree | 4268749a048a1c774514575c46ab292bc8c886c9 /arch/arm/mach-davinci/board-dm644x-evm.c | |
parent | af946f269973cda86d7263ac9f2dad659773545c (diff) |
ARM: davinci: dm644x evm: add support for VPBE display
This patch adds support for V4L2 video display to DM6446 EVM.
Support for SD and ED modes is provided, along with composite
and component outputs.
Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Diffstat (limited to 'arch/arm/mach-davinci/board-dm644x-evm.c')
-rw-r--r-- | arch/arm/mach-davinci/board-dm644x-evm.c | 109 |
1 files changed, 108 insertions, 1 deletions
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index a61aa8d0a2b1..385423558f17 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c | |||
@@ -613,6 +613,113 @@ static void __init evm_init_i2c(void) | |||
613 | i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info)); | 613 | i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info)); |
614 | } | 614 | } |
615 | 615 | ||
616 | #define VENC_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) | ||
617 | |||
618 | /* venc standard timings */ | ||
619 | static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = { | ||
620 | { | ||
621 | .name = "ntsc", | ||
622 | .timings_type = VPBE_ENC_STD, | ||
623 | .timings = {V4L2_STD_525_60}, | ||
624 | .interlaced = 1, | ||
625 | .xres = 720, | ||
626 | .yres = 480, | ||
627 | .aspect = {11, 10}, | ||
628 | .fps = {30000, 1001}, | ||
629 | .left_margin = 0x79, | ||
630 | .upper_margin = 0x10, | ||
631 | }, | ||
632 | { | ||
633 | .name = "pal", | ||
634 | .timings_type = VPBE_ENC_STD, | ||
635 | .timings = {V4L2_STD_625_50}, | ||
636 | .interlaced = 1, | ||
637 | .xres = 720, | ||
638 | .yres = 576, | ||
639 | .aspect = {54, 59}, | ||
640 | .fps = {25, 1}, | ||
641 | .left_margin = 0x7e, | ||
642 | .upper_margin = 0x16, | ||
643 | }, | ||
644 | }; | ||
645 | |||
646 | /* venc dv preset timings */ | ||
647 | static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = { | ||
648 | { | ||
649 | .name = "480p59_94", | ||
650 | .timings_type = VPBE_ENC_DV_PRESET, | ||
651 | .timings = {V4L2_DV_480P59_94}, | ||
652 | .interlaced = 0, | ||
653 | .xres = 720, | ||
654 | .yres = 480, | ||
655 | .aspect = {1, 1}, | ||
656 | .fps = {5994, 100}, | ||
657 | .left_margin = 0x80, | ||
658 | .upper_margin = 0x20, | ||
659 | }, | ||
660 | { | ||
661 | .name = "576p50", | ||
662 | .timings_type = VPBE_ENC_DV_PRESET, | ||
663 | .timings = {V4L2_DV_576P50}, | ||
664 | .interlaced = 0, | ||
665 | .xres = 720, | ||
666 | .yres = 576, | ||
667 | .aspect = {1, 1}, | ||
668 | .fps = {50, 1}, | ||
669 | .left_margin = 0x7e, | ||
670 | .upper_margin = 0x30, | ||
671 | }, | ||
672 | }; | ||
673 | |||
674 | /* | ||
675 | * The outputs available from VPBE + encoders. Keep the order same | ||
676 | * as that of encoders. First those from venc followed by that from | ||
677 | * encoders. Index in the output refers to index on a particular encoder. | ||
678 | * Driver uses this index to pass it to encoder when it supports more | ||
679 | * than one output. Userspace applications use index of the array to | ||
680 | * set an output. | ||
681 | */ | ||
682 | static struct vpbe_output dm644xevm_vpbe_outputs[] = { | ||
683 | { | ||
684 | .output = { | ||
685 | .index = 0, | ||
686 | .name = "Composite", | ||
687 | .type = V4L2_OUTPUT_TYPE_ANALOG, | ||
688 | .std = VENC_STD_ALL, | ||
689 | .capabilities = V4L2_OUT_CAP_STD, | ||
690 | }, | ||
691 | .subdev_name = VPBE_VENC_SUBDEV_NAME, | ||
692 | .default_mode = "ntsc", | ||
693 | .num_modes = ARRAY_SIZE(dm644xevm_enc_std_timing), | ||
694 | .modes = dm644xevm_enc_std_timing, | ||
695 | }, | ||
696 | { | ||
697 | .output = { | ||
698 | .index = 1, | ||
699 | .name = "Component", | ||
700 | .type = V4L2_OUTPUT_TYPE_ANALOG, | ||
701 | .capabilities = V4L2_OUT_CAP_PRESETS, | ||
702 | }, | ||
703 | .subdev_name = VPBE_VENC_SUBDEV_NAME, | ||
704 | .default_mode = "480p59_94", | ||
705 | .num_modes = ARRAY_SIZE(dm644xevm_enc_preset_timing), | ||
706 | .modes = dm644xevm_enc_preset_timing, | ||
707 | }, | ||
708 | }; | ||
709 | |||
710 | static struct vpbe_config dm644xevm_display_cfg = { | ||
711 | .module_name = "dm644x-vpbe-display", | ||
712 | .i2c_adapter_id = 1, | ||
713 | .osd = { | ||
714 | .module_name = VPBE_OSD_SUBDEV_NAME, | ||
715 | }, | ||
716 | .venc = { | ||
717 | .module_name = VPBE_VENC_SUBDEV_NAME, | ||
718 | }, | ||
719 | .num_outputs = ARRAY_SIZE(dm644xevm_vpbe_outputs), | ||
720 | .outputs = dm644xevm_vpbe_outputs, | ||
721 | }; | ||
722 | |||
616 | static struct platform_device *davinci_evm_devices[] __initdata = { | 723 | static struct platform_device *davinci_evm_devices[] __initdata = { |
617 | &davinci_fb_device, | 724 | &davinci_fb_device, |
618 | &rtc_dev, | 725 | &rtc_dev, |
@@ -696,7 +803,7 @@ static __init void davinci_evm_init(void) | |||
696 | evm_init_i2c(); | 803 | evm_init_i2c(); |
697 | 804 | ||
698 | davinci_setup_mmc(0, &dm6446evm_mmc_config); | 805 | davinci_setup_mmc(0, &dm6446evm_mmc_config); |
699 | dm644x_init_video(&dm644xevm_capture_cfg, NULL); | 806 | dm644x_init_video(&dm644xevm_capture_cfg, &dm644xevm_display_cfg); |
700 | 807 | ||
701 | davinci_serial_init(&uart_config); | 808 | davinci_serial_init(&uart_config); |
702 | dm644x_init_asp(&dm644x_evm_snd_data); | 809 | dm644x_init_asp(&dm644x_evm_snd_data); |