diff options
author | Koen Kooi <koen@openembedded.org> | 2009-03-17 22:51:32 +0100 |
---|---|---|
committer | Koen Kooi <koen@openembedded.org> | 2009-03-17 22:51:32 +0100 |
commit | bcde4467f8ac2de9bf9a061f7a3bb3621410d9ef (patch) | |
tree | 9c7f347420619d60fe4216e51f093556d4f48ec0 /recipes/linux/linux-davinci/vfpe7.patch | |
parent | 3b7b721db9da9de480a0efc2710e5592b47255fa (diff) |
linux-davinci git: add vfpe driver for davinci and dm355, enable it in dm355-leopard defconfig
Diffstat (limited to 'recipes/linux/linux-davinci/vfpe7.patch')
-rw-r--r-- | recipes/linux/linux-davinci/vfpe7.patch | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/recipes/linux/linux-davinci/vfpe7.patch b/recipes/linux/linux-davinci/vfpe7.patch new file mode 100644 index 0000000000..a6695a8cda --- /dev/null +++ b/recipes/linux/linux-davinci/vfpe7.patch @@ -0,0 +1,283 @@ +Subject: +[PATCH 7/7] DM355 platform related changes for vpfe capture driver +From: +m-karicheri2-l0cyMroinI0@public.gmane.org +Date: +Fri, 13 Mar 2009 17:24:34 -0400 +To: +davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org, davinci_opensource_ccb-uAqBSO/uNfhBDgjK7y7TUQ@public.gmane.org, psp_video-uAqBSO/uNfhBDgjK7y7TUQ@public.gmane.org +Newsgroups: +gmane.linux.davinci + +Add platform related changes for vpfe capture driver on DM355 + +Signed-off-by: Murali Karicheri <m-karicheri2-l0cyMroinI0@public.gmane.org> +--- + arch/arm/mach-davinci/board-dm355-evm.c | 91 +++++++++++++++++++++++++++- + arch/arm/mach-davinci/dm355.c | 64 +++++++++++++++++++ + arch/arm/mach-davinci/include/mach/dm355.h | 2 + + arch/arm/mach-davinci/include/mach/mux.h | 9 +++ + 4 files changed, 163 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c +index e104650..aaa58ba 100644 +--- a/arch/arm/mach-davinci/board-dm355-evm.c ++++ b/arch/arm/mach-davinci/board-dm355-evm.c +@@ -20,6 +20,8 @@ + #include <linux/io.h> + #include <linux/gpio.h> + #include <linux/clk.h> ++#include <media/v4l2-int-device.h> ++#include <media/tvp514x.h> + #include <linux/spi/spi.h> + #include <linux/spi/eeprom.h> + +@@ -134,12 +136,58 @@ static void dm355evm_mmcsd_gpios(unsigned gpio) + dm355evm_mmc_gpios = gpio; + } + ++#define TVP5146_I2C_ADDR 0x5D ++static struct v4l2_ifparm tvp5146_ifparm = { ++ .if_type = V4L2_IF_TYPE_BT656, ++ .u = { ++ .bt656 = { ++ .frame_start_on_rising_vs = 1, ++ .bt_sync_correct = 0, ++ .swap = 0, ++ .latch_clk_inv = 0, ++ .nobt_hs_inv = 0, /* active high */ ++ .nobt_vs_inv = 0, /* active high */ ++ .mode = V4L2_IF_TYPE_BT656_MODE_BT_8BIT, ++ .clock_min = TVP514X_XCLK_BT656, ++ .clock_max = TVP514X_XCLK_BT656, ++ }, ++ }, ++}; ++ ++/** ++ * @brief tvp5146_g_ifparm - Returns the TVP5146 decoder interface parameters ++ * ++ * @param p - pointer to v4l2_ifparm structure ++ * @return result of operation - 0 is success ++ */ ++static int tvp5146_g_ifparm(struct v4l2_ifparm *p) ++{ ++ if (p == NULL) ++ return -EINVAL; ++ ++ *p = tvp5146_ifparm; ++ return 0; ++} ++ ++#define TVP5146_NUM_INPUTS ARRAY_SIZE(tvp5146_input_list) ++ ++static struct tvp514x_platform_data tvp5146_pdata = { ++ .master = CAPTURE_DRV_NAME, ++ .ifparm = tvp5146_g_ifparm, ++ .hs_polarity = 1, ++ .vs_polarity = 1 ++}; ++ + static struct i2c_board_info dm355evm_i2c_info[] = { +- { I2C_BOARD_INFO("dm355evm_msp", 0x25), ++ { I2C_BOARD_INFO("dm355evm_msp", 0x25), + .platform_data = dm355evm_mmcsd_gpios, +- /* plus irq */ }, ++ }, ++ { ++ I2C_BOARD_INFO("tvp5146", TVP5146_I2C_ADDR), ++ .platform_data = &tvp5146_pdata, ++ }, ++ /* { plus irq }, */ + /* { I2C_BOARD_INFO("tlv320aic3x", 0x1b), }, */ +- /* { I2C_BOARD_INFO("tvp5146", 0x5d), }, */ + }; + + static void __init evm_init_i2c(void) +@@ -178,6 +226,41 @@ static struct platform_device dm355evm_dm9000 = { + .num_resources = ARRAY_SIZE(dm355evm_dm9000_rsrc), + }; + ++#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) ++ ++static struct vpfe_capture_input vpfe_capture_inputs = { ++ .num_inputs = VPFE_MAX_DEC_INPUTS, ++ .current_input = 0, ++ .inputs[0] = { ++ .dec_name = TVP514X_MODULE_NAME, ++ .input = { ++ .index = 0, ++ .name = "COMPOSITE", ++ .type = V4L2_INPUT_TYPE_CAMERA, ++ .std = TVP514X_STD_ALL, ++ }, ++ .route = { ++ .input = INPUT_CVBS_VI2B, ++ .output = OUTPUT_10BIT_422_EMBEDDED_SYNC, ++ }, ++ .routing_supported = 1, ++ }, ++ .inputs[1] = { ++ .dec_name = TVP514X_MODULE_NAME, ++ .input = { ++ .index = 1, ++ .name = "SVIDEO", ++ .type = V4L2_INPUT_TYPE_CAMERA, ++ .std = TVP514X_STD_ALL, ++ }, ++ .route = { ++ .input = INPUT_SVIDEO_VI2C_VI1C, ++ .output = OUTPUT_10BIT_422_EMBEDDED_SYNC, ++ }, ++ .routing_supported = 1, ++ }, ++}; ++ + static struct platform_device *davinci_evm_devices[] __initdata = { + &dm355evm_dm9000, + &davinci_nand_device, +@@ -190,6 +273,8 @@ static struct davinci_uart_config uart_config __initdata = { + static void __init dm355_evm_map_io(void) + { + davinci_map_common_io(); ++ /* setup input configuration for VPFE input devices */ ++ setup_vpfe_input_config(&vpfe_capture_inputs); + dm355_init(); + } + +diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c +index 5f31649..e2612dd 100644 +--- a/arch/arm/mach-davinci/dm355.c ++++ b/arch/arm/mach-davinci/dm355.c +@@ -463,6 +463,14 @@ INT_CFG(DM355, INT_EDMA_TC1_ERR, 4, 1, 1, false) + EVT_CFG(DM355, EVT8_ASP1_TX, 0, 1, 0, false) + EVT_CFG(DM355, EVT9_ASP1_RX, 1, 1, 0, false) + EVT_CFG(DM355, EVT26_MMC0_RX, 2, 1, 0, false) ++ ++MUX_CFG(DM355, VIN_PCLK, 0, 14, 1, 1, false) ++MUX_CFG(DM355, VIN_CAM_WEN, 0, 13, 1, 1, false) ++MUX_CFG(DM355, VIN_CAM_VD, 0, 12, 1, 1, false) ++MUX_CFG(DM355, VIN_CAM_HD, 0, 11, 1, 1, false) ++MUX_CFG(DM355, VIN_YIN_EN, 0, 10, 1, 1, false) ++MUX_CFG(DM355, VIN_CINL_EN, 0, 0, 0xff, 0x55, false) ++MUX_CFG(DM355, VIN_CINH_EN, 0, 8, 3, 3, false) + }; + + /*----------------------------------------------------------------------*/ +@@ -520,6 +528,47 @@ static struct platform_device dm355_edma_device = { + .resource = edma_resources, + }; + ++static struct resource vpfe_resources[] = { ++ { ++ .start = IRQ_VDINT0, ++ .end = IRQ_VDINT0, ++ .flags = IORESOURCE_IRQ, ++ }, ++ { ++ .start = IRQ_VDINT1, ++ .end = IRQ_VDINT1, ++ .flags = IORESOURCE_IRQ, ++ }, ++ /* CCDC Base address */ ++ { ++ .flags = IORESOURCE_MEM, ++ .start = 0x01c70600, ++ .end = 0x01c70600 + 0x1ff, ++ }, ++ /* VPSS Base address */ ++ { ++ .start = 0x01c70800, ++ .end = 0x01c70800 + 0xff, ++ .flags = IORESOURCE_MEM, ++ }, ++}; ++ ++static u64 vpfe_capture_dma_mask = DMA_32BIT_MASK; ++static struct platform_device vpfe_capture_dev = { ++ .name = CAPTURE_DRV_NAME, ++ .id = -1, ++ .num_resources = ARRAY_SIZE(vpfe_resources), ++ .resource = vpfe_resources, ++ .dev = { ++ .dma_mask = &vpfe_capture_dma_mask, ++ .coherent_dma_mask = DMA_32BIT_MASK, ++ }, ++}; ++ ++void setup_vpfe_input_config(struct vpfe_capture_input *input_config) ++{ ++ vpfe_capture_dev.dev.platform_data = input_config; ++} + /*----------------------------------------------------------------------*/ + + void __init dm355_init(void) +@@ -528,13 +577,28 @@ void __init dm355_init(void) + davinci_mux_register(dm355_pins, ARRAY_SIZE(dm355_pins));; + } + ++#define DM355_VPSSCLK_CLKCTRL_REG 0x1c70004 + static int __init dm355_init_devices(void) + { ++ void __iomem *base = IO_ADDRESS(DM355_VPSSCLK_CLKCTRL_REG); + if (!cpu_is_davinci_dm355()) + return 0; + + davinci_cfg_reg(DM355_INT_EDMA_CC); + platform_device_register(&dm355_edma_device); ++ /* setup clock for vpss modules */ ++ __raw_writel(0x79, base); ++ /* setup Mux configuration for vpfe input and register ++ * vpfe capture platform device ++ */ ++ davinci_cfg_reg(DM355_VIN_PCLK); ++ davinci_cfg_reg(DM355_VIN_CAM_WEN); ++ davinci_cfg_reg(DM355_VIN_CAM_VD); ++ davinci_cfg_reg(DM355_VIN_CAM_HD); ++ davinci_cfg_reg(DM355_VIN_YIN_EN); ++ davinci_cfg_reg(DM355_VIN_CINL_EN); ++ davinci_cfg_reg(DM355_VIN_CINH_EN); ++ platform_device_register(&vpfe_capture_dev); + return 0; + } + postcore_initcall(dm355_init_devices); +diff --git a/arch/arm/mach-davinci/include/mach/dm355.h b/arch/arm/mach-davinci/include/mach/dm355.h +index f7100b6..0b3bd76 100644 +--- a/arch/arm/mach-davinci/include/mach/dm355.h ++++ b/arch/arm/mach-davinci/include/mach/dm355.h +@@ -12,6 +12,7 @@ + #define __ASM_ARCH_DM355_H + + #include <mach/hardware.h> ++#include <media/davinci/vpfe_capture.h> + + void __init dm355_init(void); + +@@ -19,5 +20,6 @@ struct spi_board_info; + + void dm355_init_spi0(unsigned chipselect_mask, + struct spi_board_info *info, unsigned len); ++void setup_vpfe_input_config(struct vpfe_capture_input *input_config); + + #endif /* __ASM_ARCH_DM355_H */ +diff --git a/arch/arm/mach-davinci/include/mach/mux.h b/arch/arm/mach-davinci/include/mach/mux.h +index cd95629..4c135b0 100644 +--- a/arch/arm/mach-davinci/include/mach/mux.h ++++ b/arch/arm/mach-davinci/include/mach/mux.h +@@ -149,6 +149,15 @@ enum davinci_dm355_index { + DM355_EVT8_ASP1_TX, + DM355_EVT9_ASP1_RX, + DM355_EVT26_MMC0_RX, ++ ++ /* Video In Pin Mux */ ++ DM355_VIN_PCLK, ++ DM355_VIN_CAM_WEN, ++ DM355_VIN_CAM_VD, ++ DM355_VIN_CAM_HD, ++ DM355_VIN_YIN_EN, ++ DM355_VIN_CINL_EN, ++ DM355_VIN_CINH_EN, + }; + + #ifdef CONFIG_DAVINCI_MUX +-- 1.6.0.4
\ No newline at end of file |