From patchwork Mon Jul 6 18:24:44 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 34283 X-Patchwork-Delegate: mchehab@redhat.com Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n66IOpGa022020 for ; Mon, 6 Jul 2009 18:24:51 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752787AbZGFSYq (ORCPT ); Mon, 6 Jul 2009 14:24:46 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752819AbZGFSYq (ORCPT ); Mon, 6 Jul 2009 14:24:46 -0400 Received: from smtp-cloud1.xs4all.nl ([194.109.24.61]:41751 "EHLO smtp-cloud1.xs4all.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752787AbZGFSYp (ORCPT ); Mon, 6 Jul 2009 14:24:45 -0400 Authentication-Results: smtp-cloud1.xs4all.nl smtp.user=hverkuil; auth=pass (PLAIN) Received: from [84.208.85.194] ([84.208.85.194:52866] helo=tschai.lan) by smtp-cloud1.xs4all.nl (envelope-from ) (ecelerity 2.2.2.41 r(31179/31189)) with ESMTPSA (cipher=AES256-SHA) id 96/63-08282-E61425A4; Mon, 06 Jul 2009 20:24:47 +0200 From: Hans Verkuil To: linux-media@vger.kernel.org Subject: [PULL] http://www.linuxtv.org/hg/~hverkuil/v4l-dvb-vpfe-cap Date: Mon, 6 Jul 2009 20:24:44 +0200 User-Agent: KMail/1.9.9 Cc: Muralidharan Karicheri , Mauro Carvalho Chehab MIME-Version: 1.0 Message-Id: <200907062024.44703.hverkuil@xs4all.nl> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Hi Mauro, Please pull from http://www.linuxtv.org/hg/~hverkuil/v4l-dvb-vpfe-cap for the following: - tvp514x: Migration to sub-device framework - tvp514x: formatting comments as per kernel documentation - v4l: vpfe capture bridge driver for DM355 and DM6446 - v4l: ccdc hw device header file for vpfe capture - v4l: dm355 ccdc module for vpfe capture driver - v4l: dm644x ccdc module for vpfe capture driver - v4l: ccdc types used across ccdc modules for vpfe capture driver - v4l: common vpss module for video drivers - v4l: Makefile and config files for vpfe capture driver - v4l: davinci drivers should only be compiled for kernels >= 2.6.31. Hopefully these changes can be merged into 2.6.31. I have attached two arch/arm patches that need to be applied to the git tree. These patches should be applied after merging this tree. I've compiled this driver against the latest Linus' git tree. Thanks, Hans diffstat: b/linux/drivers/media/video/davinci/ccdc_hw_device.h | 110 b/linux/drivers/media/video/davinci/dm355_ccdc.c | 978 +++++++ b/linux/drivers/media/video/davinci/dm355_ccdc_regs.h | 310 ++ b/linux/drivers/media/video/davinci/dm644x_ccdc.c | 878 +++++++ b/linux/drivers/media/video/davinci/dm644x_ccdc_regs.h | 145 + b/linux/drivers/media/video/davinci/vpfe_capture.c | 2124 +++++++++++++++++ b/linux/drivers/media/video/davinci/vpss.c | 301 ++ b/linux/include/media/davinci/ccdc_types.h | 43 b/linux/include/media/davinci/dm355_ccdc.h | 321 ++ b/linux/include/media/davinci/dm644x_ccdc.h | 184 + b/linux/include/media/davinci/vpfe_capture.h | 198 + b/linux/include/media/davinci/vpfe_types.h | 51 b/linux/include/media/davinci/vpss.h | 69 linux/drivers/media/video/Kconfig | 49 linux/drivers/media/video/Makefile | 2 linux/drivers/media/video/davinci/Makefile | 6 linux/drivers/media/video/tvp514x.c | 1154 ++++----- linux/drivers/media/video/tvp514x_regs.h | 10 linux/include/media/tvp514x.h | 4 v4l/versions.txt | 7 20 files changed, 6284 insertions(+), 660 deletions(-) From: m-karicheri2@ti.com To: hverkuil@xs4all.nl, mchehab@infradead.org Cc: Muralidharan Karicheri Subject: [PATCH 7/11 - v3] DM355 platform changes for vpfe capture driver Date: Mon, 6 Jul 2009 13:32:45 -0400 From: Muralidharan Karicheri DM355 platform and board setup This has platform and board setup changes to support vpfe capture driver for DM355 EVMs. Reviewed by: Hans Verkuil Reviewed by: Laurent Pinchart Reviewed by: Kevin Hilman Reviewed by: David Brownell Signed-off-by: Muralidharan Karicheri --- Applies to Linus' GIT Tree arch/arm/mach-davinci/board-dm355-evm.c | 76 ++++++++++++++++++++++++- arch/arm/mach-davinci/dm355.c | 83 ++++++++++++++++++++++++++++ arch/arm/mach-davinci/include/mach/dm355.h | 2 + arch/arm/mach-davinci/include/mach/mux.h | 9 +++ 4 files changed, 167 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c index 5ac2f56..605bf03 100644 --- a/arch/arm/mach-davinci/board-dm355-evm.c +++ b/arch/arm/mach-davinci/board-dm355-evm.c @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include @@ -135,11 +137,11 @@ static void dm355evm_mmcsd_gpios(unsigned gpio) } 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 */ }, + }, + /* { plus irq }, */ /* { I2C_BOARD_INFO("tlv320aic3x", 0x1b), }, */ - /* { I2C_BOARD_INFO("tvp5146", 0x5d), }, */ }; static void __init evm_init_i2c(void) @@ -178,6 +180,72 @@ static struct platform_device dm355evm_dm9000 = { .num_resources = ARRAY_SIZE(dm355evm_dm9000_rsrc), }; +static struct tvp514x_platform_data tvp5146_pdata = { + .clk_polarity = 0, + .hs_polarity = 1, + .vs_polarity = 1 +}; + +#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) +/* Inputs available at the TVP5146 */ +static struct v4l2_input tvp5146_inputs[] = { + { + .index = 0, + .name = "Composite", + .type = V4L2_INPUT_TYPE_CAMERA, + .std = TVP514X_STD_ALL, + }, + { + .index = 1, + .name = "S-Video", + .type = V4L2_INPUT_TYPE_CAMERA, + .std = TVP514X_STD_ALL, + }, +}; + +/* + * this is the route info for connecting each input to decoder + * ouput that goes to vpfe. There is a one to one correspondence + * with tvp5146_inputs + */ +static struct vpfe_route tvp5146_routes[] = { + { + .input = INPUT_CVBS_VI2B, + .output = OUTPUT_10BIT_422_EMBEDDED_SYNC, + }, + { + .input = INPUT_SVIDEO_VI2C_VI1C, + .output = OUTPUT_10BIT_422_EMBEDDED_SYNC, + }, +}; + +static struct vpfe_subdev_info vpfe_sub_devs[] = { + { + .name = "tvp5146", + .grp_id = 0, + .num_inputs = ARRAY_SIZE(tvp5146_inputs), + .inputs = tvp5146_inputs, + .routes = tvp5146_routes, + .can_route = 1, + .ccdc_if_params = { + .if_type = VPFE_BT656, + .hdpol = VPFE_PINPOL_POSITIVE, + .vdpol = VPFE_PINPOL_POSITIVE, + }, + .board_info = { + I2C_BOARD_INFO("tvp5146", 0x5d), + .platform_data = &tvp5146_pdata, + }, + } +}; + +static struct vpfe_config vpfe_cfg = { + .num_subdevs = ARRAY_SIZE(vpfe_sub_devs), + .sub_devs = vpfe_sub_devs, + .card_name = "DM355 EVM", + .ccdc = "DM355 CCDC", +}; + static struct platform_device *davinci_evm_devices[] __initdata = { &dm355evm_dm9000, &davinci_nand_device, @@ -189,6 +257,8 @@ static struct davinci_uart_config uart_config __initdata = { static void __init dm355_evm_map_io(void) { + /* setup input configuration for VPFE input devices */ + dm355_set_vpfe_config(&vpfe_cfg); dm355_init(); } diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c index baaaf32..2696df1 100644 --- a/arch/arm/mach-davinci/dm355.c +++ b/arch/arm/mach-davinci/dm355.c @@ -481,6 +481,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) #endif }; @@ -604,6 +612,67 @@ static struct platform_device dm355_edma_device = { .resource = edma_resources, }; +static struct resource dm355_vpss_resources[] = { + { + /* VPSS BL Base address */ + .name = "vpss", + .start = 0x01c70800, + .end = 0x01c70800 + 0xff, + .flags = IORESOURCE_MEM, + }, + { + /* VPSS CLK Base address */ + .name = "vpss", + .start = 0x01c70000, + .end = 0x01c70000 + 0xf, + .flags = IORESOURCE_MEM, + }, +}; + +static struct platform_device dm355_vpss_device = { + .name = "vpss", + .id = -1, + .dev.platform_data = "dm355_vpss", + .num_resources = ARRAY_SIZE(dm355_vpss_resources), + .resource = dm355_vpss_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, + }, +}; + +static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32); +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_BIT_MASK(32), + }, +}; + +void dm355_set_vpfe_config(struct vpfe_config *cfg) +{ + vpfe_capture_dev.dev.platform_data = cfg; +} + /*----------------------------------------------------------------------*/ static struct map_desc dm355_io_desc[] = { @@ -725,6 +794,20 @@ static int __init dm355_init_devices(void) davinci_cfg_reg(DM355_INT_EDMA_CC); platform_device_register(&dm355_edma_device); + platform_device_register(&dm355_vpss_device); + /* + * 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 54903b7..e28713c 100644 --- a/arch/arm/mach-davinci/include/mach/dm355.h +++ b/arch/arm/mach-davinci/include/mach/dm355.h @@ -12,11 +12,13 @@ #define __ASM_ARCH_DM355_H #include +#include struct spi_board_info; void __init dm355_init(void); void dm355_init_spi0(unsigned chipselect_mask, struct spi_board_info *info, unsigned len); +void dm355_set_vpfe_config(struct vpfe_config *cfg); #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 2737845..f288063 100644 --- a/arch/arm/mach-davinci/include/mach/mux.h +++ b/arch/arm/mach-davinci/include/mach/mux.h @@ -154,6 +154,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