[media] ARM: davinci: da850: Add SoC related definitions for VPIF
authorManjunath Hadli <manjunath.hadli@ti.com>
Mon, 23 Jan 2012 09:17:24 +0000 (06:17 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 6 Oct 2012 00:58:35 +0000 (21:58 -0300)
Add clock, pin mux definitions and registration function for
VPIF capture and display driver on DA850/OMAP-L138 SoC.

Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
arch/arm/mach-davinci/da850.c
arch/arm/mach-davinci/include/mach/da8xx.h
arch/arm/mach-davinci/include/mach/mux.h
arch/arm/mach-davinci/include/mach/psc.h

index b44dc844e15e0c2ce8c404486c75494749dfec51..20d16fff6efd5c9a84a22eaede299b7a19bcbe58 100644 (file)
@@ -347,6 +347,13 @@ static struct clk spi1_clk = {
        .flags          = DA850_CLK_ASYNC3,
 };
 
+static struct clk vpif_clk = {
+       .name           = "vpif",
+       .parent         = &pll0_sysclk2,
+       .lpsc           = DA850_LPSC1_VPIF,
+       .gpsc           = 1,
+};
+
 static struct clk sata_clk = {
        .name           = "sata",
        .parent         = &pll0_sysclk2,
@@ -397,6 +404,7 @@ static struct clk_lookup da850_clks[] = {
        CLK(NULL,               "usb20",        &usb20_clk),
        CLK("spi_davinci.0",    NULL,           &spi0_clk),
        CLK("spi_davinci.1",    NULL,           &spi1_clk),
+       CLK("vpif",             NULL,           &vpif_clk),
        CLK("ahci",             NULL,           &sata_clk),
        CLK(NULL,               NULL,           NULL),
 };
@@ -573,6 +581,46 @@ static const struct mux_config da850_pins[] = {
        MUX_CFG(DA850, GPIO6_10,        13,     20,     15,     8,      false)
        MUX_CFG(DA850, GPIO6_13,        13,     8,      15,     8,      false)
        MUX_CFG(DA850, RTC_ALARM,       0,      28,     15,     2,      false)
+       /* VPIF Capture */
+       MUX_CFG(DA850, VPIF_DIN0,       15,     4,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN1,       15,     0,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN2,       14,     28,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN3,       14,     24,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN4,       14,     20,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN5,       14,     16,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN6,       14,     12,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN7,       14,     8,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN8,       16,     4,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN9,       16,     0,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN10,      15,     28,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN11,      15,     24,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN12,      15,     20,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN13,      15,     16,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN14,      15,     12,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DIN15,      15,     8,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_CLKIN0,     14,     0,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_CLKIN1,     14,     4,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_CLKIN2,     19,     8,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_CLKIN3,     19,     16,     15,     1,      false)
+       /* VPIF Display */
+       MUX_CFG(DA850, VPIF_DOUT0,      17,     4,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT1,      17,     0,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT2,      16,     28,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT3,      16,     24,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT4,      16,     20,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT5,      16,     16,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT6,      16,     12,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT7,      16,     8,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT8,      18,     4,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT9,      18,     0,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT10,     17,     28,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT11,     17,     24,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT12,     17,     20,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT13,     17,     16,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT14,     17,     12,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_DOUT15,     17,     8,      15,     1,      false)
+       MUX_CFG(DA850, VPIF_CLKO2,      19,     12,     15,     1,      false)
+       MUX_CFG(DA850, VPIF_CLKO3,      19,     20,     15,     1,      false)
 #endif
 };
 
@@ -595,6 +643,26 @@ const short da850_lcdcntl_pins[] __initdata = {
        -1
 };
 
+const short da850_vpif_capture_pins[] __initdata = {
+       DA850_VPIF_DIN0, DA850_VPIF_DIN1, DA850_VPIF_DIN2, DA850_VPIF_DIN3,
+       DA850_VPIF_DIN4, DA850_VPIF_DIN5, DA850_VPIF_DIN6, DA850_VPIF_DIN7,
+       DA850_VPIF_DIN8, DA850_VPIF_DIN9, DA850_VPIF_DIN10, DA850_VPIF_DIN11,
+       DA850_VPIF_DIN12, DA850_VPIF_DIN13, DA850_VPIF_DIN14, DA850_VPIF_DIN15,
+       DA850_VPIF_CLKIN0, DA850_VPIF_CLKIN1, DA850_VPIF_CLKIN2,
+       DA850_VPIF_CLKIN3,
+       -1
+};
+
+const short da850_vpif_display_pins[] __initdata = {
+       DA850_VPIF_DOUT0, DA850_VPIF_DOUT1, DA850_VPIF_DOUT2, DA850_VPIF_DOUT3,
+       DA850_VPIF_DOUT4, DA850_VPIF_DOUT5, DA850_VPIF_DOUT6, DA850_VPIF_DOUT7,
+       DA850_VPIF_DOUT8, DA850_VPIF_DOUT9, DA850_VPIF_DOUT10,
+       DA850_VPIF_DOUT11, DA850_VPIF_DOUT12, DA850_VPIF_DOUT13,
+       DA850_VPIF_DOUT14, DA850_VPIF_DOUT15, DA850_VPIF_CLKO2,
+       DA850_VPIF_CLKO3,
+       -1
+};
+
 /* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */
 static u8 da850_default_priorities[DA850_N_CP_INTC_IRQ] = {
        [IRQ_DA8XX_COMMTX]              = 7,
@@ -1064,6 +1132,90 @@ no_ddrpll_mem:
        return ret;
 }
 
+/* VPIF resource, platform data */
+static u64 da850_vpif_dma_mask = DMA_BIT_MASK(32);
+
+static struct resource da850_vpif_resource[] = {
+       {
+               .start = DA8XX_VPIF_BASE,
+               .end   = DA8XX_VPIF_BASE + 0xfff,
+               .flags = IORESOURCE_MEM,
+       }
+};
+
+static struct platform_device da850_vpif_dev = {
+       .name           = "vpif",
+       .id             = -1,
+       .dev            = {
+               .dma_mask               = &da850_vpif_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+       },
+       .resource       = da850_vpif_resource,
+       .num_resources  = ARRAY_SIZE(da850_vpif_resource),
+};
+
+static struct resource da850_vpif_display_resource[] = {
+       {
+               .start = IRQ_DA850_VPIFINT,
+               .end   = IRQ_DA850_VPIFINT,
+               .flags = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device da850_vpif_display_dev = {
+       .name           = "vpif_display",
+       .id             = -1,
+       .dev            = {
+               .dma_mask               = &da850_vpif_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+       },
+       .resource       = da850_vpif_display_resource,
+       .num_resources  = ARRAY_SIZE(da850_vpif_display_resource),
+};
+
+static struct resource da850_vpif_capture_resource[] = {
+       {
+               .start = IRQ_DA850_VPIFINT,
+               .end   = IRQ_DA850_VPIFINT,
+               .flags = IORESOURCE_IRQ,
+       },
+       {
+               .start = IRQ_DA850_VPIFINT,
+               .end   = IRQ_DA850_VPIFINT,
+               .flags = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device da850_vpif_capture_dev = {
+       .name           = "vpif_capture",
+       .id             = -1,
+       .dev            = {
+               .dma_mask               = &da850_vpif_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+       },
+       .resource       = da850_vpif_capture_resource,
+       .num_resources  = ARRAY_SIZE(da850_vpif_capture_resource),
+};
+
+int __init da850_register_vpif(void)
+{
+       return platform_device_register(&da850_vpif_dev);
+}
+
+int __init da850_register_vpif_display(struct vpif_display_config
+                                               *display_config)
+{
+       da850_vpif_display_dev.dev.platform_data = display_config;
+       return platform_device_register(&da850_vpif_display_dev);
+}
+
+int __init da850_register_vpif_capture(struct vpif_capture_config
+                                                       *capture_config)
+{
+       da850_vpif_capture_dev.dev.platform_data = capture_config;
+       return platform_device_register(&da850_vpif_capture_dev);
+}
+
 static struct davinci_soc_info davinci_soc_info_da850 = {
        .io_desc                = da850_io_desc,
        .io_desc_num            = ARRAY_SIZE(da850_io_desc),
index a2f1f274f1897f40bf4ae85f5f1bfc91063cf8e3..8eecbce7febc08a64e0b89d6fc15fe8af616652e 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/platform_device.h>
 #include <linux/davinci_emac.h>
 #include <linux/spi/spi.h>
+#include <linux/videodev2.h>
 
 #include <mach/serial.h>
 #include <mach/edma.h>
@@ -26,6 +27,8 @@
 #include <mach/pm.h>
 #include <mach/spi.h>
 
+#include <media/davinci/vpif_types.h>
+
 extern void __iomem *da8xx_syscfg0_base;
 extern void __iomem *da8xx_syscfg1_base;
 
@@ -63,6 +66,7 @@ extern unsigned int da850_max_speed;
 #define DA8XX_PLL0_BASE                0x01c11000
 #define DA8XX_TIMER64P0_BASE   0x01c20000
 #define DA8XX_TIMER64P1_BASE   0x01c21000
+#define DA8XX_VPIF_BASE                0x01e17000
 #define DA8XX_GPIO_BASE                0x01e26000
 #define DA8XX_PSC1_BASE                0x01e27000
 #define DA8XX_AEMIF_CS2_BASE   0x60000000
@@ -92,6 +96,11 @@ int da8xx_register_cpuidle(void);
 void __iomem * __init da8xx_get_mem_ctlr(void);
 int da850_register_pm(struct platform_device *pdev);
 int __init da850_register_sata(unsigned long refclkpn);
+int __init da850_register_vpif(void);
+int __init da850_register_vpif_display
+                       (struct vpif_display_config *display_config);
+int __init da850_register_vpif_capture
+                       (struct vpif_capture_config *capture_config);
 void da8xx_restart(char mode, const char *cmd);
 
 extern struct platform_device da8xx_serial_device;
@@ -126,6 +135,8 @@ extern const short da830_ecap1_pins[];
 extern const short da830_ecap2_pins[];
 extern const short da830_eqep0_pins[];
 extern const short da830_eqep1_pins[];
+extern const short da850_vpif_capture_pins[];
+extern const short da850_vpif_display_pins[];
 
 extern const short da850_i2c0_pins[];
 extern const short da850_i2c1_pins[];
index a7e92fca32e6719457167f1c2f9efbdd2921df73..9e95b8a1edb62964cc473c1947bc61ebc6ca0402 100644 (file)
@@ -928,6 +928,48 @@ enum davinci_da850_index {
        DA850_GPIO6_10,
        DA850_GPIO6_13,
        DA850_RTC_ALARM,
+
+       /* VPIF Capture */
+       DA850_VPIF_DIN0,
+       DA850_VPIF_DIN1,
+       DA850_VPIF_DIN2,
+       DA850_VPIF_DIN3,
+       DA850_VPIF_DIN4,
+       DA850_VPIF_DIN5,
+       DA850_VPIF_DIN6,
+       DA850_VPIF_DIN7,
+       DA850_VPIF_DIN8,
+       DA850_VPIF_DIN9,
+       DA850_VPIF_DIN10,
+       DA850_VPIF_DIN11,
+       DA850_VPIF_DIN12,
+       DA850_VPIF_DIN13,
+       DA850_VPIF_DIN14,
+       DA850_VPIF_DIN15,
+       DA850_VPIF_CLKIN0,
+       DA850_VPIF_CLKIN1,
+       DA850_VPIF_CLKIN2,
+       DA850_VPIF_CLKIN3,
+
+       /* VPIF Display */
+       DA850_VPIF_DOUT0,
+       DA850_VPIF_DOUT1,
+       DA850_VPIF_DOUT2,
+       DA850_VPIF_DOUT3,
+       DA850_VPIF_DOUT4,
+       DA850_VPIF_DOUT5,
+       DA850_VPIF_DOUT6,
+       DA850_VPIF_DOUT7,
+       DA850_VPIF_DOUT8,
+       DA850_VPIF_DOUT9,
+       DA850_VPIF_DOUT10,
+       DA850_VPIF_DOUT11,
+       DA850_VPIF_DOUT12,
+       DA850_VPIF_DOUT13,
+       DA850_VPIF_DOUT14,
+       DA850_VPIF_DOUT15,
+       DA850_VPIF_CLKO2,
+       DA850_VPIF_CLKO3,
 };
 
 enum davinci_tnetv107x_index {
index 405318e35bf63f8422dc5263088d2a9cbe64a212..40a0027838e81601427fbb2bc7ff04311e5300ad 100644 (file)
 #define DA830_LPSC1_McASP1             8
 #define DA850_LPSC1_SATA               8
 #define DA830_LPSC1_McASP2             9
+#define DA850_LPSC1_VPIF               9
 #define DA8XX_LPSC1_SPI1               10
 #define DA8XX_LPSC1_I2C                        11
 #define DA8XX_LPSC1_UART1              12