RE: [PATCH 2/2] AM3517: Add VPFE Capture driver support to board file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Vaibhav,

See below my comments...

Murali Karicheri
Software Design Engineer
Texas Instruments Inc.
Germantown, MD 20874
phone: 301-407-9583
email: m-karicheri2@xxxxxx

>-----Original Message-----
>From: Hiremath, Vaibhav
>Sent: Thursday, May 27, 2010 9:11 AM
>To: linux-media@xxxxxxxxxxxxxxx
>Cc: mchehab@xxxxxxxxxx; Karicheri, Muralidharan; linux-
>omap@xxxxxxxxxxxxxxx; Hiremath, Vaibhav
>Subject: [PATCH 2/2] AM3517: Add VPFE Capture driver support to board file
>
>From: Vaibhav Hiremath <hvaibhav@xxxxxx>
>
>Also created vpfe master/slave clock aliases, since naming
>convention is different in both Davinci and AM3517 devices.
>
>Signed-off-by: Vaibhav Hiremath <hvaibhav@xxxxxx>
>---
> arch/arm/mach-omap2/board-am3517evm.c |  161
>+++++++++++++++++++++++++++++++++
> 1 files changed, 161 insertions(+), 0 deletions(-)
>
>diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-
>omap2/board-am3517evm.c
>index c1c4389..edcb6db 100644
>--- a/arch/arm/mach-omap2/board-am3517evm.c
>+++ b/arch/arm/mach-omap2/board-am3517evm.c
>@@ -30,15 +30,168 @@
>
> #include <plat/board.h>
> #include <plat/common.h>
>+#include <plat/control.h>
> #include <plat/usb.h>
> #include <plat/display.h>
>
>+#include <media/tvp514x.h>
>+#include <media/davinci/vpfe_capture.h>
>+
> #include "mux.h"
>
> #define LCD_PANEL_PWR		176
> #define LCD_PANEL_BKLIGHT_PWR	182
> #define LCD_PANEL_PWM		181
>
>+/*
>+ * VPFE - Video Decoder interface
>+ */
>+#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,
>+	},
>+};
>+
>+static struct tvp514x_platform_data tvp5146_pdata = {
>+	.clk_polarity	= 0,
>+	.hs_polarity	= 1,
>+	.vs_polarity	= 1
>+};
>+
>+static struct vpfe_route tvp5146_routes[] = {
>+	{
>+		.input	= INPUT_CVBS_VI1A,
>+		.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", 0x5C),
>+			.platform_data = &tvp5146_pdata,
>+		},
>+	},
>+};
>+
>+static void am3517_evm_clear_vpfe_intr(int vdint)
>+{
>+	unsigned int vpfe_int_clr;
>+
>+	vpfe_int_clr = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
>+
>+	switch (vdint) {
>+	/* VD0 interrrupt */
>+	case INT_35XX_CCDC_VD0_IRQ:
>+		vpfe_int_clr &= ~AM35XX_VPFE_CCDC_VD0_INT_CLR;
>+		vpfe_int_clr |= AM35XX_VPFE_CCDC_VD0_INT_CLR;
>+		break;
>+	/* VD1 interrrupt */
>+	case INT_35XX_CCDC_VD1_IRQ:
>+		vpfe_int_clr &= ~AM35XX_VPFE_CCDC_VD1_INT_CLR;
>+		vpfe_int_clr |= AM35XX_VPFE_CCDC_VD1_INT_CLR;
>+		break;
>+	/* VD2 interrrupt */
>+	case INT_35XX_CCDC_VD2_IRQ:
>+		vpfe_int_clr &= ~AM35XX_VPFE_CCDC_VD2_INT_CLR;
>+		vpfe_int_clr |= AM35XX_VPFE_CCDC_VD2_INT_CLR;
>+		break;
>+	/* Clear all interrrupts */
>+	default:
>+		vpfe_int_clr &= ~(AM35XX_VPFE_CCDC_VD0_INT_CLR |
>+				AM35XX_VPFE_CCDC_VD1_INT_CLR |
>+				AM35XX_VPFE_CCDC_VD2_INT_CLR);
>+		vpfe_int_clr |= (AM35XX_VPFE_CCDC_VD0_INT_CLR |
>+				AM35XX_VPFE_CCDC_VD1_INT_CLR |
>+				AM35XX_VPFE_CCDC_VD2_INT_CLR);
>+		break;
>+	}
>+	omap_ctrl_writel(vpfe_int_clr, AM35XX_CONTROL_LVL_INTR_CLEAR);
>+	vpfe_int_clr = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
>+}
>+
>+static struct vpfe_config vpfe_cfg = {
>+	.num_subdevs	= ARRAY_SIZE(vpfe_sub_devs),
>+	.i2c_adapter_id	= 3,
>+	.sub_devs	= vpfe_sub_devs,
>+	.clr_intr	= am3517_evm_clear_vpfe_intr,
>+	.card_name	= "DM6446 EVM",

[MK] You might want to change the card name to match with what you are using.
This is what user will see in querycap and should reflect the correct name IMO.

>+	.ccdc		= "DM6446 CCDC",
>+};
>+
>+static struct resource vpfe_resources[] = {
>+	{
>+		.start	= INT_35XX_CCDC_VD0_IRQ,
>+		.end	= INT_35XX_CCDC_VD0_IRQ,
>+		.flags	= IORESOURCE_IRQ,
>+	},
>+	{
>+		.start	= INT_35XX_CCDC_VD1_IRQ,
>+		.end	= INT_35XX_CCDC_VD1_IRQ,
>+		.flags	= IORESOURCE_IRQ,
>+	},
>+};
>+
>+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),
>+		.platform_data		= &vpfe_cfg,
>+	},
>+};
>+
>+static struct resource dm644x_ccdc_resource[] = {
>+	/* CCDC Base address */
>+	{
>+		.start	= AM35XX_IPSS_VPFE_BASE,
>+		.end	= AM35XX_IPSS_VPFE_BASE + 0xffff,
>+		.flags	= IORESOURCE_MEM,
>+	},
>+};

[MK] Does it make sense to use am35xx_ccdc_resource[] instead? We know that
dm6446 ccdc device is re-used by looking at the device name below, right?
I think we also need to think about renaming the dm6446 ccdc device to
something generic in the future.

>+
>+static struct platform_device dm644x_ccdc_dev = {
>+	.name		= "dm644x_ccdc",
>+	.id		= -1,
>+	.num_resources	= ARRAY_SIZE(dm644x_ccdc_resource),
>+	.resource	= dm644x_ccdc_resource,
>+	.dev = {
>+		.dma_mask		= &vpfe_capture_dma_mask,
>+		.coherent_dma_mask	= DMA_BIT_MASK(32),
>+	},
>+};
>+
> static struct i2c_board_info __initdata am3517evm_i2c_boardinfo[] = {
> 	{
> 		I2C_BOARD_INFO("s35390a", 0x30),
>@@ -46,6 +199,7 @@ static struct i2c_board_info __initdata
>am3517evm_i2c_boardinfo[] = {
> 	},
> };
>
>+
> /*
>  * RTC - S35390A
>  */
>@@ -261,6 +415,8 @@ static struct omap_board_config_kernel
>am3517_evm_config[] __initdata = {
>
> static struct platform_device *am3517_evm_devices[] __initdata = {
> 	&am3517_evm_dss_device,
>+	&dm644x_ccdc_dev,
>+	&vpfe_capture_dev,
> };
>
> static void __init am3517_evm_init_irq(void)
>@@ -313,6 +469,11 @@ static void __init am3517_evm_init(void)
>
> 	i2c_register_board_info(1, am3517evm_i2c_boardinfo,
> 				ARRAY_SIZE(am3517evm_i2c_boardinfo));
>+
>+	clk_add_alias("master", "dm644x_ccdc", "master",
>+			&vpfe_capture_dev.dev);
>+	clk_add_alias("slave", "dm644x_ccdc", "slave",
>+			&vpfe_capture_dev.dev);
> }
>
> static void __init am3517_evm_map_io(void)
>--
>1.6.2.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux