aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-davinci/dm365.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-davinci/dm365.c')
-rw-r--r--arch/arm/mach-davinci/dm365.c102
1 files changed, 101 insertions, 1 deletions
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c
index f53735cb922e..ce9da43a628b 100644
--- a/arch/arm/mach-davinci/dm365.c
+++ b/arch/arm/mach-davinci/dm365.c
@@ -1008,6 +1008,97 @@ void __init dm365_init(void)
1008 davinci_common_init(&davinci_soc_info_dm365); 1008 davinci_common_init(&davinci_soc_info_dm365);
1009} 1009}
1010 1010
1011static struct resource dm365_vpss_resources[] = {
1012 {
1013 /* VPSS ISP5 Base address */
1014 .name = "isp5",
1015 .start = 0x01c70000,
1016 .end = 0x01c70000 + 0xff,
1017 .flags = IORESOURCE_MEM,
1018 },
1019 {
1020 /* VPSS CLK Base address */
1021 .name = "vpss",
1022 .start = 0x01c70200,
1023 .end = 0x01c70200 + 0xff,
1024 .flags = IORESOURCE_MEM,
1025 },
1026};
1027
1028static struct platform_device dm365_vpss_device = {
1029 .name = "vpss",
1030 .id = -1,
1031 .dev.platform_data = "dm365_vpss",
1032 .num_resources = ARRAY_SIZE(dm365_vpss_resources),
1033 .resource = dm365_vpss_resources,
1034};
1035
1036static struct resource vpfe_resources[] = {
1037 {
1038 .start = IRQ_VDINT0,
1039 .end = IRQ_VDINT0,
1040 .flags = IORESOURCE_IRQ,
1041 },
1042 {
1043 .start = IRQ_VDINT1,
1044 .end = IRQ_VDINT1,
1045 .flags = IORESOURCE_IRQ,
1046 },
1047};
1048
1049static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32);
1050static struct platform_device vpfe_capture_dev = {
1051 .name = CAPTURE_DRV_NAME,
1052 .id = -1,
1053 .num_resources = ARRAY_SIZE(vpfe_resources),
1054 .resource = vpfe_resources,
1055 .dev = {
1056 .dma_mask = &vpfe_capture_dma_mask,
1057 .coherent_dma_mask = DMA_BIT_MASK(32),
1058 },
1059};
1060
1061static void dm365_isif_setup_pinmux(void)
1062{
1063 davinci_cfg_reg(DM365_VIN_CAM_WEN);
1064 davinci_cfg_reg(DM365_VIN_CAM_VD);
1065 davinci_cfg_reg(DM365_VIN_CAM_HD);
1066 davinci_cfg_reg(DM365_VIN_YIN4_7_EN);
1067 davinci_cfg_reg(DM365_VIN_YIN0_3_EN);
1068}
1069
1070static struct resource isif_resource[] = {
1071 /* ISIF Base address */
1072 {
1073 .start = 0x01c71000,
1074 .end = 0x01c71000 + 0x1ff,
1075 .flags = IORESOURCE_MEM,
1076 },
1077 /* ISIF Linearization table 0 */
1078 {
1079 .start = 0x1C7C000,
1080 .end = 0x1C7C000 + 0x2ff,
1081 .flags = IORESOURCE_MEM,
1082 },
1083 /* ISIF Linearization table 1 */
1084 {
1085 .start = 0x1C7C400,
1086 .end = 0x1C7C400 + 0x2ff,
1087 .flags = IORESOURCE_MEM,
1088 },
1089};
1090static struct platform_device dm365_isif_dev = {
1091 .name = "isif",
1092 .id = -1,
1093 .num_resources = ARRAY_SIZE(isif_resource),
1094 .resource = isif_resource,
1095 .dev = {
1096 .dma_mask = &vpfe_capture_dma_mask,
1097 .coherent_dma_mask = DMA_BIT_MASK(32),
1098 .platform_data = dm365_isif_setup_pinmux,
1099 },
1100};
1101
1011static int __init dm365_init_devices(void) 1102static int __init dm365_init_devices(void)
1012{ 1103{
1013 if (!cpu_is_davinci_dm365()) 1104 if (!cpu_is_davinci_dm365())
@@ -1016,7 +1107,16 @@ static int __init dm365_init_devices(void)
1016 davinci_cfg_reg(DM365_INT_EDMA_CC); 1107 davinci_cfg_reg(DM365_INT_EDMA_CC);
1017 platform_device_register(&dm365_edma_device); 1108 platform_device_register(&dm365_edma_device);
1018 platform_device_register(&dm365_emac_device); 1109 platform_device_register(&dm365_emac_device);
1019 1110 /* Add isif clock alias */
1111 clk_add_alias("master", dm365_isif_dev.name, "vpss_master", NULL);
1112 platform_device_register(&dm365_vpss_device);
1113 platform_device_register(&dm365_isif_dev);
1114 platform_device_register(&vpfe_capture_dev);
1020 return 0; 1115 return 0;
1021} 1116}
1022postcore_initcall(dm365_init_devices); 1117postcore_initcall(dm365_init_devices);
1118
1119void dm365_set_vpfe_config(struct vpfe_config *cfg)
1120{
1121 vpfe_capture_dev.dev.platform_data = cfg;
1122}