linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] ARM: davinci: da850/omap-l138: add support for VPIF driver
@ 2012-08-20 14:08 Prabhakar Lad
  2012-08-20 14:08 ` [PATCH v2 1/2] ARM: da850/omap-l138: Add SoC related definitions for VPIF Prabhakar Lad
  2012-08-20 14:08 ` [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work Prabhakar Lad
  0 siblings, 2 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-08-20 14:08 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: dlos, linux-kernel, Prabhakar Lad

This patch series adds support for VPIF
capture and display driver on da850/omap-l138.
Enables SD capture and display.

This patch series is dependent on the following patch:
https://patchwork.kernel.org/patch/1332311/

Changes for v2:
1: Avoid breaking of print messages.
2: Removed the handlers which just returned zero (which did nothing).
3: Clubbed the code where ever possible for DA850_UI_SD_VIDEO_PORT
   config option.
4: Removed the dma_declare_coherent_memory() calls and used 
   global CMA.
5: Added the base address in increasing order.

Manjunath Hadli (2):
  ARM: da850/omap-l138: Add SoC related definitions for VPIF
  ARM: da850/omap-l138: Add EVM specific code for VPIF to work

 arch/arm/mach-davinci/Kconfig              |    9 ++
 arch/arm/mach-davinci/board-da850-evm.c    |  178 ++++++++++++++++++++++++++++
 arch/arm/mach-davinci/da850.c              |  162 +++++++++++++++++++++++++
 arch/arm/mach-davinci/include/mach/da8xx.h |   11 ++
 arch/arm/mach-davinci/include/mach/mux.h   |   42 +++++++
 arch/arm/mach-davinci/include/mach/psc.h   |    1 +
 6 files changed, 403 insertions(+), 0 deletions(-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/2] ARM: da850/omap-l138: Add SoC related definitions for VPIF
  2012-08-20 14:08 [PATCH v2 0/2] ARM: davinci: da850/omap-l138: add support for VPIF driver Prabhakar Lad
@ 2012-08-20 14:08 ` Prabhakar Lad
  2012-09-07 17:01   ` Sekhar Nori
  2012-08-20 14:08 ` [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work Prabhakar Lad
  1 sibling, 1 reply; 8+ messages in thread
From: Prabhakar Lad @ 2012-08-20 14:08 UTC (permalink / raw)
  To: linux-arm-kernel
  Cc: dlos, linux-kernel, Manjunath Hadli, Lad, Prabhakar, Sekhar Nori

From: Manjunath Hadli <manjunath.hadli@ti.com>

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>
Cc: Sekhar Nori <nsekhar@ti.com>
---
 arch/arm/mach-davinci/da850.c              |  162 ++++++++++++++++++++++++++++
 arch/arm/mach-davinci/include/mach/da8xx.h |   11 ++
 arch/arm/mach-davinci/include/mach/mux.h   |   42 +++++++
 arch/arm/mach-davinci/include/mach/psc.h   |    1 +
 4 files changed, 216 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
index b44dc84..76e434a 100644
--- a/arch/arm/mach-davinci/da850.c
+++ b/arch/arm/mach-davinci/da850.c
@@ -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,100 @@ 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 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),
+	},
+};
+
+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),
+	},
+};
+
+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)
+{
+	struct resource da850_vpif_display_resource[] = {
+		{
+			.start = IRQ_DA850_VPIFINT,
+			.end   = IRQ_DA850_VPIFINT,
+			.flags = IORESOURCE_IRQ,
+		},
+	};
+	int ret;
+
+	ret = platform_device_add_resources(&da850_vpif_display_dev,
+				da850_vpif_display_resource,
+				ARRAY_SIZE(da850_vpif_display_resource));
+	if (ret)
+		return -EINVAL;
+
+	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)
+{
+	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,
+		},
+	};
+	int ret;
+
+	ret = platform_device_add_resources(&da850_vpif_capture_dev,
+				da850_vpif_capture_resource,
+				ARRAY_SIZE(da850_vpif_capture_resource));
+	if (ret)
+		return -EINVAL;
+
+	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),
diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
index a2f1f27..8eecbce 100644
--- a/arch/arm/mach-davinci/include/mach/da8xx.h
+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
@@ -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[];
diff --git a/arch/arm/mach-davinci/include/mach/mux.h b/arch/arm/mach-davinci/include/mach/mux.h
index a7e92fc..9e95b8a 100644
--- a/arch/arm/mach-davinci/include/mach/mux.h
+++ b/arch/arm/mach-davinci/include/mach/mux.h
@@ -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 {
diff --git a/arch/arm/mach-davinci/include/mach/psc.h b/arch/arm/mach-davinci/include/mach/psc.h
index 405318e..40a0027 100644
--- a/arch/arm/mach-davinci/include/mach/psc.h
+++ b/arch/arm/mach-davinci/include/mach/psc.h
@@ -166,6 +166,7 @@
 #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
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work
  2012-08-20 14:08 [PATCH v2 0/2] ARM: davinci: da850/omap-l138: add support for VPIF driver Prabhakar Lad
  2012-08-20 14:08 ` [PATCH v2 1/2] ARM: da850/omap-l138: Add SoC related definitions for VPIF Prabhakar Lad
@ 2012-08-20 14:08 ` Prabhakar Lad
  2012-09-07 17:18   ` Sekhar Nori
  1 sibling, 1 reply; 8+ messages in thread
From: Prabhakar Lad @ 2012-08-20 14:08 UTC (permalink / raw)
  To: linux-arm-kernel
  Cc: dlos, linux-kernel, Manjunath Hadli, Lad, Prabhakar, Sekhar Nori

From: Manjunath Hadli <manjunath.hadli@ti.com>

Include the expander settings to select VPIF peripheral on
UI card and add registration call in EVM init. Also add platform
data to configure display and capture devices.

Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Cc: Sekhar Nori <nsekhar@ti.com>
---
 arch/arm/mach-davinci/Kconfig           |    9 ++
 arch/arm/mach-davinci/board-da850-evm.c |  178 +++++++++++++++++++++++++++++++
 2 files changed, 187 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
index ab99c3c..436b47c 100644
--- a/arch/arm/mach-davinci/Kconfig
+++ b/arch/arm/mach-davinci/Kconfig
@@ -186,6 +186,15 @@ config DA850_UI_RMII
 	  NOTE: Please take care while choosing this option, MII PHY will
 	  not be functional if RMII mode is selected.
 
+config DA850_UI_SD_VIDEO_PORT
+	bool "Video Port Interface"
+	help
+	  Say Y if you want to use Video Port Interface (VPIF) on the
+	  DA850/OMAP-L138 EVM. The Video decoders/encoders are found on the
+	  UI daughter card that is supplied with the EVM.
+	  NOTE: Please make sure to disable RMII and CLCD options when you
+	  select Video Port Interface.
+
 endchoice
 
 config DA850_WL12XX
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index 0149fb4..cdbbced 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -45,6 +45,8 @@
 #include <mach/aemif.h>
 #include <mach/spi.h>
 
+#include <media/tvp514x.h>
+
 #define DA850_EVM_PHY_ID		"davinci_mdio-0:00"
 #define DA850_LCD_PWR_PIN		GPIO_TO_PIN(2, 8)
 #define DA850_LCD_BL_PIN		GPIO_TO_PIN(2, 15)
@@ -121,6 +123,12 @@ static struct spi_board_info da850evm_spi_info[] = {
 	},
 };
 
+#define TVP5147_CH0		"tvp514x-0"
+#define TVP5147_CH1		"tvp514x-1"
+
+#define VPIF_STATUS		0x002c
+#define VPIF_STATUS_CLR		0x0030
+
 #ifdef CONFIG_MTD
 static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
 {
@@ -452,6 +460,15 @@ static void da850_evm_ui_keys_init(unsigned gpio)
 	}
 }
 
+#ifdef CONFIG_DA850_UI_SD_VIDEO_PORT
+static inline void da850_evm_setup_video_port(int video_sel)
+{
+	gpio_set_value_cansleep(video_sel, 0);
+}
+#else
+static inline void da850_evm_setup_video_port(int video_sel) { }
+#endif
+
 static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
 						unsigned ngpio, void *c)
 {
@@ -497,6 +514,8 @@ static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
 
 	da850_evm_setup_emac_rmii(sel_a);
 
+	da850_evm_setup_video_port(sel_c);
+
 	return 0;
 
 exp_setup_keys_fail:
@@ -1149,6 +1168,133 @@ static __init int da850_evm_init_cpufreq(void)
 static __init int da850_evm_init_cpufreq(void) { return 0; }
 #endif
 
+#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
+
+/* VPIF capture configuration */
+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)
+
+static const struct vpif_input da850_ch0_inputs[] = {
+	{
+		.input = {
+			.index = 0,
+			.name = "Composite",
+			.type = V4L2_INPUT_TYPE_CAMERA,
+			.std = TVP514X_STD_ALL,
+		},
+		.subdev_name = TVP5147_CH0,
+	},
+};
+
+static const struct vpif_input da850_ch1_inputs[] = {
+	{
+		.input = {
+			.index = 0,
+			.name = "S-Video",
+			.type = V4L2_INPUT_TYPE_CAMERA,
+			.std = TVP514X_STD_ALL,
+		},
+		.subdev_name = TVP5147_CH1,
+	},
+};
+#endif
+
+static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
+#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
+	{
+		.name	= TVP5147_CH0,
+		.board_info = {
+			I2C_BOARD_INFO("tvp5146", 0x5d),
+			.platform_data = &tvp5146_pdata,
+		},
+		.input = INPUT_CVBS_VI2B,
+		.output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
+		.can_route = 1,
+		.vpif_if = {
+			.if_type = VPIF_IF_BT656,
+			.hd_pol = 1,
+			.vd_pol = 1,
+			.fid_pol = 0,
+		},
+	},
+	{
+		.name	= TVP5147_CH1,
+		.board_info = {
+			I2C_BOARD_INFO("tvp5146", 0x5c),
+			.platform_data = &tvp5146_pdata,
+		},
+		.input = INPUT_SVIDEO_VI2C_VI1C,
+		.output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
+		.can_route = 1,
+		.vpif_if = {
+			.if_type = VPIF_IF_BT656,
+			.hd_pol = 1,
+			.vd_pol = 1,
+			.fid_pol = 0,
+		},
+	},
+#endif
+};
+
+static struct vpif_capture_config da850_vpif_capture_config = {
+	.subdev_info = da850_vpif_capture_sdev_info,
+	.subdev_count = ARRAY_SIZE(da850_vpif_capture_sdev_info),
+#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
+	.chan_config[0] = {
+		.inputs = da850_ch0_inputs,
+		.input_count = ARRAY_SIZE(da850_ch0_inputs),
+	},
+	.chan_config[1] = {
+		.inputs = da850_ch1_inputs,
+		.input_count = ARRAY_SIZE(da850_ch1_inputs),
+	},
+#endif
+	.card_name      = "DA850/OMAP-L138 Video Capture",
+};
+
+/* VPIF display configuration */
+static struct vpif_subdev_info da850_vpif_subdev[] = {
+	{
+		.name	= "adv7343",
+		.board_info = {
+			I2C_BOARD_INFO("adv7343", 0x2a),
+		},
+	},
+};
+
+static const char const *vpif_output[] = {
+	"Composite",
+	"Component",
+	"S-Video",
+};
+
+static struct vpif_display_config da850_vpif_display_config = {
+	.subdevinfo	= da850_vpif_subdev,
+	.subdev_count	= ARRAY_SIZE(da850_vpif_subdev),
+	.output		= vpif_output,
+	.output_count	= ARRAY_SIZE(vpif_output),
+	.card_name	= "DA850/OMAP-L138 Video Display",
+};
+
+#if defined(CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY) ||\
+		defined(CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY_MODULE)
+#define HAS_VPIF_DISPLAY 1
+#else
+#define HAS_VPIF_DISPLAY 0
+#endif
+
+#if defined(CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE) ||\
+		defined(CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE_MODULE)
+#define HAS_VPIF_CAPTURE 1
+#else
+#define HAS_VPIF_CAPTURE 0
+#endif
+
 #ifdef CONFIG_DA850_WL12XX
 
 static void wl12xx_set_power(int index, bool power_on)
@@ -1375,6 +1521,38 @@ static __init void da850_evm_init(void)
 		pr_warning("da850_evm_init: suspend registration failed: %d\n",
 				ret);
 
+	if (HAS_VPIF_DISPLAY || HAS_VPIF_CAPTURE) {
+		ret = da850_register_vpif();
+		if (ret)
+			pr_warn("da850_evm_init: VPIF setup failed: %d\n", ret);
+	}
+
+	if (HAS_VPIF_CAPTURE) {
+		ret = davinci_cfg_reg_list(da850_vpif_capture_pins);
+		if (ret)
+			pr_warn(
+			"da850_evm_init: VPIF capture mux setup failed: %d\n",
+			ret);
+
+		ret = da850_register_vpif_capture(&da850_vpif_capture_config);
+		if (ret)
+			pr_warn(
+			"da850_evm_init: VPIF capture setup failed: %d\n", ret);
+	}
+
+	if (HAS_VPIF_DISPLAY) {
+		ret = davinci_cfg_reg_list(da850_vpif_display_pins);
+		if (ret)
+			pr_warn(
+			"da850_evm_init: VPIF display mux setup failed: %d\n",
+			ret);
+
+		ret = da850_register_vpif_display(&da850_vpif_display_config);
+		if (ret)
+			pr_warn(
+			"da850_evm_init: VPIF display setup failed: %d\n", ret);
+	}
+
 	ret = da8xx_register_spi(1, da850evm_spi_info,
 				 ARRAY_SIZE(da850evm_spi_info));
 	if (ret)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] ARM: da850/omap-l138: Add SoC related definitions for VPIF
  2012-08-20 14:08 ` [PATCH v2 1/2] ARM: da850/omap-l138: Add SoC related definitions for VPIF Prabhakar Lad
@ 2012-09-07 17:01   ` Sekhar Nori
  0 siblings, 0 replies; 8+ messages in thread
From: Sekhar Nori @ 2012-09-07 17:01 UTC (permalink / raw)
  To: Prabhakar Lad; +Cc: linux-arm-kernel, dlos, linux-kernel, Manjunath Hadli

Hi Prabhakar,

On 8/20/2012 7:38 PM, Prabhakar Lad wrote:
> From: Manjunath Hadli <manjunath.hadli@ti.com>
> 
> 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>
> Cc: Sekhar Nori <nsekhar@ti.com>
> ---

> +/* 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 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),
> +	},
> +};
> +
> +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),
> +	},
> +};
> +
> +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)
> +{
> +	struct resource da850_vpif_display_resource[] = {
> +		{
> +			.start = IRQ_DA850_VPIFINT,
> +			.end   = IRQ_DA850_VPIFINT,
> +			.flags = IORESOURCE_IRQ,
> +		},
> +	};
> +	int ret;
> +
> +	ret = platform_device_add_resources(&da850_vpif_display_dev,
> +				da850_vpif_display_resource,
> +				ARRAY_SIZE(da850_vpif_display_resource));

Its not obvious to me why you need to add the resources here instead of
just statically defining them as is usually done.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work
  2012-08-20 14:08 ` [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work Prabhakar Lad
@ 2012-09-07 17:18   ` Sekhar Nori
  2012-09-07 17:34     ` Prabhakar Lad
  0 siblings, 1 reply; 8+ messages in thread
From: Sekhar Nori @ 2012-09-07 17:18 UTC (permalink / raw)
  To: Prabhakar Lad; +Cc: linux-arm-kernel, dlos, linux-kernel, Manjunath Hadli

Hi Prabhakar,

On 8/20/2012 7:38 PM, Prabhakar Lad wrote:
> From: Manjunath Hadli <manjunath.hadli@ti.com>
> 
> Include the expander settings to select VPIF peripheral on
> UI card and add registration call in EVM init. Also add platform
> data to configure display and capture devices.
> 
> Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
> Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
> Cc: Sekhar Nori <nsekhar@ti.com>
> ---
>  arch/arm/mach-davinci/Kconfig           |    9 ++
>  arch/arm/mach-davinci/board-da850-evm.c |  178 +++++++++++++++++++++++++++++++
>  2 files changed, 187 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
> index ab99c3c..436b47c 100644
> --- a/arch/arm/mach-davinci/Kconfig
> +++ b/arch/arm/mach-davinci/Kconfig
> @@ -186,6 +186,15 @@ config DA850_UI_RMII
>  	  NOTE: Please take care while choosing this option, MII PHY will
>  	  not be functional if RMII mode is selected.
>  
> +config DA850_UI_SD_VIDEO_PORT
> +	bool "Video Port Interface"
> +	help
> +	  Say Y if you want to use Video Port Interface (VPIF) on the
> +	  DA850/OMAP-L138 EVM. The Video decoders/encoders are found on the
> +	  UI daughter card that is supplied with the EVM.

> +	  NOTE: Please make sure to disable RMII and CLCD options when you
> +	  select Video Port Interface.

I thought you agreed to remove this note. CLCD is not present in
mainline and RMII cannot be selected along with video because of the
choice. So, the note is basically useless.

> +
>  endchoice
>  
>  config DA850_WL12XX
> diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
> index 0149fb4..cdbbced 100644
> --- a/arch/arm/mach-davinci/board-da850-evm.c
> +++ b/arch/arm/mach-davinci/board-da850-evm.c
> @@ -45,6 +45,8 @@
>  #include <mach/aemif.h>
>  #include <mach/spi.h>
>  
> +#include <media/tvp514x.h>
> +
>  #define DA850_EVM_PHY_ID		"davinci_mdio-0:00"
>  #define DA850_LCD_PWR_PIN		GPIO_TO_PIN(2, 8)
>  #define DA850_LCD_BL_PIN		GPIO_TO_PIN(2, 15)
> @@ -121,6 +123,12 @@ static struct spi_board_info da850evm_spi_info[] = {
>  	},
>  };
>  
> +#define TVP5147_CH0		"tvp514x-0"
> +#define TVP5147_CH1		"tvp514x-1"
> +
> +#define VPIF_STATUS		0x002c
> +#define VPIF_STATUS_CLR		0x0030
> +
>  #ifdef CONFIG_MTD
>  static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
>  {
> @@ -452,6 +460,15 @@ static void da850_evm_ui_keys_init(unsigned gpio)
>  	}
>  }
>  
> +#ifdef CONFIG_DA850_UI_SD_VIDEO_PORT
> +static inline void da850_evm_setup_video_port(int video_sel)
> +{
> +	gpio_set_value_cansleep(video_sel, 0);
> +}
> +#else
> +static inline void da850_evm_setup_video_port(int video_sel) { }
> +#endif
> +
>  static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
>  						unsigned ngpio, void *c)
>  {
> @@ -497,6 +514,8 @@ static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
>  
>  	da850_evm_setup_emac_rmii(sel_a);
>  
> +	da850_evm_setup_video_port(sel_c);
> +
>  	return 0;
>  
>  exp_setup_keys_fail:
> @@ -1149,6 +1168,133 @@ static __init int da850_evm_init_cpufreq(void)
>  static __init int da850_evm_init_cpufreq(void) { return 0; }
>  #endif
>  
> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
> +
> +/* VPIF capture configuration */
> +static struct tvp514x_platform_data tvp5146_pdata = {
> +	.clk_polarity = 0,
> +	.hs_polarity = 1,
> +	.vs_polarity = 1

A ',' needed at the end of above line. It will be nice to line up the
initialization using tabs too.

> +};
> +
> +#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
> +
> +static const struct vpif_input da850_ch0_inputs[] = {
> +	{
> +		.input = {
> +			.index = 0,
> +			.name = "Composite",
> +			.type = V4L2_INPUT_TYPE_CAMERA,
> +			.std = TVP514X_STD_ALL,
> +		},
> +		.subdev_name = TVP5147_CH0,
> +	},
> +};
> +
> +static const struct vpif_input da850_ch1_inputs[] = {
> +	{
> +		.input = {
> +			.index = 0,
> +			.name = "S-Video",
> +			.type = V4L2_INPUT_TYPE_CAMERA,
> +			.std = TVP514X_STD_ALL,
> +		},
> +		.subdev_name = TVP5147_CH1,
> +	},
> +};
> +#endif
> +
> +static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)

You agreed to get rid of these multiple ifdefs but you have not fixed that.

> +	{
> +		.name	= TVP5147_CH0,
> +		.board_info = {
> +			I2C_BOARD_INFO("tvp5146", 0x5d),
> +			.platform_data = &tvp5146_pdata,
> +		},
> +		.input = INPUT_CVBS_VI2B,
> +		.output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
> +		.can_route = 1,
> +		.vpif_if = {
> +			.if_type = VPIF_IF_BT656,
> +			.hd_pol = 1,
> +			.vd_pol = 1,
> +			.fid_pol = 0,
> +		},
> +	},
> +	{
> +		.name	= TVP5147_CH1,
> +		.board_info = {
> +			I2C_BOARD_INFO("tvp5146", 0x5c),
> +			.platform_data = &tvp5146_pdata,
> +		},
> +		.input = INPUT_SVIDEO_VI2C_VI1C,
> +		.output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
> +		.can_route = 1,
> +		.vpif_if = {
> +			.if_type = VPIF_IF_BT656,
> +			.hd_pol = 1,
> +			.vd_pol = 1,
> +			.fid_pol = 0,
> +		},
> +	},
> +#endif
> +};
> +
> +static struct vpif_capture_config da850_vpif_capture_config = {
> +	.subdev_info = da850_vpif_capture_sdev_info,
> +	.subdev_count = ARRAY_SIZE(da850_vpif_capture_sdev_info),
> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
> +	.chan_config[0] = {
> +		.inputs = da850_ch0_inputs,
> +		.input_count = ARRAY_SIZE(da850_ch0_inputs),
> +	},
> +	.chan_config[1] = {
> +		.inputs = da850_ch1_inputs,
> +		.input_count = ARRAY_SIZE(da850_ch1_inputs),
> +	},
> +#endif
> +	.card_name      = "DA850/OMAP-L138 Video Capture",
> +};
> +
> +/* VPIF display configuration */
> +static struct vpif_subdev_info da850_vpif_subdev[] = {
> +	{
> +		.name	= "adv7343",
> +		.board_info = {
> +			I2C_BOARD_INFO("adv7343", 0x2a),
> +		},
> +	},
> +};
> +
> +static const char const *vpif_output[] = {
> +	"Composite",
> +	"Component",
> +	"S-Video",
> +};
> +
> +static struct vpif_display_config da850_vpif_display_config = {
> +	.subdevinfo	= da850_vpif_subdev,
> +	.subdev_count	= ARRAY_SIZE(da850_vpif_subdev),
> +	.output		= vpif_output,
> +	.output_count	= ARRAY_SIZE(vpif_output),
> +	.card_name	= "DA850/OMAP-L138 Video Display",
> +};
> +
> +#if defined(CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY) ||\
> +		defined(CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY_MODULE)
> +#define HAS_VPIF_DISPLAY 1
> +#else
> +#define HAS_VPIF_DISPLAY 0
> +#endif
> +
> +#if defined(CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE) ||\
> +		defined(CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE_MODULE)
> +#define HAS_VPIF_CAPTURE 1
> +#else
> +#define HAS_VPIF_CAPTURE 0
> +#endif
> +
>  #ifdef CONFIG_DA850_WL12XX
>  
>  static void wl12xx_set_power(int index, bool power_on)
> @@ -1375,6 +1521,38 @@ static __init void da850_evm_init(void)
>  		pr_warning("da850_evm_init: suspend registration failed: %d\n",
>  				ret);
>  
> +	if (HAS_VPIF_DISPLAY || HAS_VPIF_CAPTURE) {
> +		ret = da850_register_vpif();
> +		if (ret)
> +			pr_warn("da850_evm_init: VPIF setup failed: %d\n", ret);
> +	}
> +
> +	if (HAS_VPIF_CAPTURE) {
> +		ret = davinci_cfg_reg_list(da850_vpif_capture_pins);
> +		if (ret)
> +			pr_warn(
> +			"da850_evm_init: VPIF capture mux setup failed: %d\n",
> +			ret);
> +
> +		ret = da850_register_vpif_capture(&da850_vpif_capture_config);
> +		if (ret)
> +			pr_warn(
> +			"da850_evm_init: VPIF capture setup failed: %d\n", ret);
> +	}
> +
> +	if (HAS_VPIF_DISPLAY) {
> +		ret = davinci_cfg_reg_list(da850_vpif_display_pins);
> +		if (ret)
> +			pr_warn(
> +			"da850_evm_init: VPIF display mux setup failed: %d\n",
> +			ret);
> +
> +		ret = da850_register_vpif_display(&da850_vpif_display_config);
> +		if (ret)
> +			pr_warn(
> +			"da850_evm_init: VPIF display setup failed: %d\n", ret);
> +	}
> +

Registering the platform device only when driver is configured is not
required. Platform device registration should just reflect what is
present in the hardware. Removing this should also get rid of the ugly
line breaks above.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work
  2012-09-07 17:18   ` Sekhar Nori
@ 2012-09-07 17:34     ` Prabhakar Lad
  2012-09-10  9:27       ` Sekhar Nori
  0 siblings, 1 reply; 8+ messages in thread
From: Prabhakar Lad @ 2012-09-07 17:34 UTC (permalink / raw)
  To: Sekhar Nori; +Cc: Prabhakar Lad, dlos, linux-kernel, linux-arm-kernel

Hi Sekhar,

Thanks for the review.

On Fri, Sep 7, 2012 at 10:48 PM, Sekhar Nori <nsekhar@ti.com> wrote:
> Hi Prabhakar,
>
> On 8/20/2012 7:38 PM, Prabhakar Lad wrote:
>> From: Manjunath Hadli <manjunath.hadli@ti.com>
>>
>> Include the expander settings to select VPIF peripheral on
>> UI card and add registration call in EVM init. Also add platform
>> data to configure display and capture devices.
>>
>> Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
>> Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
>> Cc: Sekhar Nori <nsekhar@ti.com>
>> ---
>>  arch/arm/mach-davinci/Kconfig           |    9 ++
>>  arch/arm/mach-davinci/board-da850-evm.c |  178 +++++++++++++++++++++++++++++++
>>  2 files changed, 187 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
>> index ab99c3c..436b47c 100644
>> --- a/arch/arm/mach-davinci/Kconfig
>> +++ b/arch/arm/mach-davinci/Kconfig
>> @@ -186,6 +186,15 @@ config DA850_UI_RMII
>>         NOTE: Please take care while choosing this option, MII PHY will
>>         not be functional if RMII mode is selected.
>>
>> +config DA850_UI_SD_VIDEO_PORT
>> +     bool "Video Port Interface"
>> +     help
>> +       Say Y if you want to use Video Port Interface (VPIF) on the
>> +       DA850/OMAP-L138 EVM. The Video decoders/encoders are found on the
>> +       UI daughter card that is supplied with the EVM.
>
>> +       NOTE: Please make sure to disable RMII and CLCD options when you
>> +       select Video Port Interface.
>
> I thought you agreed to remove this note. CLCD is not present in
> mainline and RMII cannot be selected along with video because of the
> choice. So, the note is basically useless.
>
Ok.

>> +
>>  endchoice
>>
>>  config DA850_WL12XX
>> diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
>> index 0149fb4..cdbbced 100644
>> --- a/arch/arm/mach-davinci/board-da850-evm.c
>> +++ b/arch/arm/mach-davinci/board-da850-evm.c
>> @@ -45,6 +45,8 @@
>>  #include <mach/aemif.h>
>>  #include <mach/spi.h>
>>
>> +#include <media/tvp514x.h>
>> +
>>  #define DA850_EVM_PHY_ID             "davinci_mdio-0:00"
>>  #define DA850_LCD_PWR_PIN            GPIO_TO_PIN(2, 8)
>>  #define DA850_LCD_BL_PIN             GPIO_TO_PIN(2, 15)
>> @@ -121,6 +123,12 @@ static struct spi_board_info da850evm_spi_info[] = {
>>       },
>>  };
>>
>> +#define TVP5147_CH0          "tvp514x-0"
>> +#define TVP5147_CH1          "tvp514x-1"
>> +
>> +#define VPIF_STATUS          0x002c
>> +#define VPIF_STATUS_CLR              0x0030
>> +
>>  #ifdef CONFIG_MTD
>>  static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
>>  {
>> @@ -452,6 +460,15 @@ static void da850_evm_ui_keys_init(unsigned gpio)
>>       }
>>  }
>>
>> +#ifdef CONFIG_DA850_UI_SD_VIDEO_PORT
>> +static inline void da850_evm_setup_video_port(int video_sel)
>> +{
>> +     gpio_set_value_cansleep(video_sel, 0);
>> +}
>> +#else
>> +static inline void da850_evm_setup_video_port(int video_sel) { }
>> +#endif
>> +
>>  static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
>>                                               unsigned ngpio, void *c)
>>  {
>> @@ -497,6 +514,8 @@ static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
>>
>>       da850_evm_setup_emac_rmii(sel_a);
>>
>> +     da850_evm_setup_video_port(sel_c);
>> +
>>       return 0;
>>
>>  exp_setup_keys_fail:
>> @@ -1149,6 +1168,133 @@ static __init int da850_evm_init_cpufreq(void)
>>  static __init int da850_evm_init_cpufreq(void) { return 0; }
>>  #endif
>>
>> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
>> +
>> +/* VPIF capture configuration */
>> +static struct tvp514x_platform_data tvp5146_pdata = {
>> +     .clk_polarity = 0,
>> +     .hs_polarity = 1,
>> +     .vs_polarity = 1
>
> A ',' needed at the end of above line. It will be nice to line up the
> initialization using tabs too.
>
Ok.

>> +};
>> +
>> +#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
>> +
>> +static const struct vpif_input da850_ch0_inputs[] = {
>> +     {
>> +             .input = {
>> +                     .index = 0,
>> +                     .name = "Composite",
>> +                     .type = V4L2_INPUT_TYPE_CAMERA,
>> +                     .std = TVP514X_STD_ALL,
>> +             },
>> +             .subdev_name = TVP5147_CH0,
>> +     },
>> +};
>> +
>> +static const struct vpif_input da850_ch1_inputs[] = {
>> +     {
>> +             .input = {
>> +                     .index = 0,
>> +                     .name = "S-Video",
>> +                     .type = V4L2_INPUT_TYPE_CAMERA,
>> +                     .std = TVP514X_STD_ALL,
>> +             },
>> +             .subdev_name = TVP5147_CH1,
>> +     },
>> +};
>> +#endif
>> +
>> +static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
>> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
>
> You agreed to get rid of these multiple ifdefs but you have not fixed that.
>
I have merged the top one, at later stage when we go  ahead and add sensor
support then we would have require to have define two
da850_vpif_capture_sdev_info
so to avoid it I have kept this one.

>> +     {
>> +             .name   = TVP5147_CH0,
>> +             .board_info = {
>> +                     I2C_BOARD_INFO("tvp5146", 0x5d),
>> +                     .platform_data = &tvp5146_pdata,
>> +             },
>> +             .input = INPUT_CVBS_VI2B,
>> +             .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
>> +             .can_route = 1,
>> +             .vpif_if = {
>> +                     .if_type = VPIF_IF_BT656,
>> +                     .hd_pol = 1,
>> +                     .vd_pol = 1,
>> +                     .fid_pol = 0,
>> +             },
>> +     },
>> +     {
>> +             .name   = TVP5147_CH1,
>> +             .board_info = {
>> +                     I2C_BOARD_INFO("tvp5146", 0x5c),
>> +                     .platform_data = &tvp5146_pdata,
>> +             },
>> +             .input = INPUT_SVIDEO_VI2C_VI1C,
>> +             .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
>> +             .can_route = 1,
>> +             .vpif_if = {
>> +                     .if_type = VPIF_IF_BT656,
>> +                     .hd_pol = 1,
>> +                     .vd_pol = 1,
>> +                     .fid_pol = 0,
>> +             },
>> +     },
>> +#endif
>> +};
>> +
>> +static struct vpif_capture_config da850_vpif_capture_config = {
>> +     .subdev_info = da850_vpif_capture_sdev_info,
>> +     .subdev_count = ARRAY_SIZE(da850_vpif_capture_sdev_info),
>> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
>> +     .chan_config[0] = {
>> +             .inputs = da850_ch0_inputs,
>> +             .input_count = ARRAY_SIZE(da850_ch0_inputs),
>> +     },
>> +     .chan_config[1] = {
>> +             .inputs = da850_ch1_inputs,
>> +             .input_count = ARRAY_SIZE(da850_ch1_inputs),
>> +     },
>> +#endif
>> +     .card_name      = "DA850/OMAP-L138 Video Capture",
>> +};
>> +
>> +/* VPIF display configuration */
>> +static struct vpif_subdev_info da850_vpif_subdev[] = {
>> +     {
>> +             .name   = "adv7343",
>> +             .board_info = {
>> +                     I2C_BOARD_INFO("adv7343", 0x2a),
>> +             },
>> +     },
>> +};
>> +
>> +static const char const *vpif_output[] = {
>> +     "Composite",
>> +     "Component",
>> +     "S-Video",
>> +};
>> +
>> +static struct vpif_display_config da850_vpif_display_config = {
>> +     .subdevinfo     = da850_vpif_subdev,
>> +     .subdev_count   = ARRAY_SIZE(da850_vpif_subdev),
>> +     .output         = vpif_output,
>> +     .output_count   = ARRAY_SIZE(vpif_output),
>> +     .card_name      = "DA850/OMAP-L138 Video Display",
>> +};
>> +
>> +#if defined(CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY) ||\
>> +             defined(CONFIG_VIDEO_DAVINCI_VPIF_DISPLAY_MODULE)
>> +#define HAS_VPIF_DISPLAY 1
>> +#else
>> +#define HAS_VPIF_DISPLAY 0
>> +#endif
>> +
>> +#if defined(CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE) ||\
>> +             defined(CONFIG_VIDEO_DAVINCI_VPIF_CAPTURE_MODULE)
>> +#define HAS_VPIF_CAPTURE 1
>> +#else
>> +#define HAS_VPIF_CAPTURE 0
>> +#endif
>> +
>>  #ifdef CONFIG_DA850_WL12XX
>>
>>  static void wl12xx_set_power(int index, bool power_on)
>> @@ -1375,6 +1521,38 @@ static __init void da850_evm_init(void)
>>               pr_warning("da850_evm_init: suspend registration failed: %d\n",
>>                               ret);
>>
>> +     if (HAS_VPIF_DISPLAY || HAS_VPIF_CAPTURE) {
>> +             ret = da850_register_vpif();
>> +             if (ret)
>> +                     pr_warn("da850_evm_init: VPIF setup failed: %d\n", ret);
>> +     }
>> +
>> +     if (HAS_VPIF_CAPTURE) {
>> +             ret = davinci_cfg_reg_list(da850_vpif_capture_pins);
>> +             if (ret)
>> +                     pr_warn(
>> +                     "da850_evm_init: VPIF capture mux setup failed: %d\n",
>> +                     ret);
>> +
>> +             ret = da850_register_vpif_capture(&da850_vpif_capture_config);
>> +             if (ret)
>> +                     pr_warn(
>> +                     "da850_evm_init: VPIF capture setup failed: %d\n", ret);
>> +     }
>> +
>> +     if (HAS_VPIF_DISPLAY) {
>> +             ret = davinci_cfg_reg_list(da850_vpif_display_pins);
>> +             if (ret)
>> +                     pr_warn(
>> +                     "da850_evm_init: VPIF display mux setup failed: %d\n",
>> +                     ret);
>> +
>> +             ret = da850_register_vpif_display(&da850_vpif_display_config);
>> +             if (ret)
>> +                     pr_warn(
>> +                     "da850_evm_init: VPIF display setup failed: %d\n", ret);
>> +     }
>> +
>
> Registering the platform device only when driver is configured is not
> required. Platform device registration should just reflect what is
> present in the hardware. Removing this should also get rid of the ugly
> line breaks above.
>
Ok.

Thanks,
--Prabhakar

> Thanks,
> Sekhar
> _______________________________________________
> Davinci-linux-open-source mailing list
> Davinci-linux-open-source@linux.davincidsp.com
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work
  2012-09-07 17:34     ` Prabhakar Lad
@ 2012-09-10  9:27       ` Sekhar Nori
  2012-09-10 12:06         ` Prabhakar Lad
  0 siblings, 1 reply; 8+ messages in thread
From: Sekhar Nori @ 2012-09-10  9:27 UTC (permalink / raw)
  To: Prabhakar Lad; +Cc: Prabhakar Lad, dlos, linux-kernel, linux-arm-kernel

Hi Prabhakar,

On 9/7/2012 11:04 PM, Prabhakar Lad wrote:
> On Fri, Sep 7, 2012 at 10:48 PM, Sekhar Nori <nsekhar@ti.com> wrote:

>>> +static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
>>> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
>>
>> You agreed to get rid of these multiple ifdefs but you have not fixed that.
>>
> I have merged the top one, at later stage when we go  ahead and add sensor
> support then we would have require to have define two
> da850_vpif_capture_sdev_info
> so to avoid it I have kept this one.

Lets get to that when we actually add sensor support. It might make
sense then. Right now, there is no reason to have them.

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work
  2012-09-10  9:27       ` Sekhar Nori
@ 2012-09-10 12:06         ` Prabhakar Lad
  0 siblings, 0 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-09-10 12:06 UTC (permalink / raw)
  To: Sekhar Nori; +Cc: Prabhakar Lad, dlos, linux-kernel, linux-arm-kernel

Hi Sekhar,

On Monday 10 September 2012 02:57 PM, Sekhar Nori wrote:
> Hi Prabhakar,
> 
> On 9/7/2012 11:04 PM, Prabhakar Lad wrote:
>> On Fri, Sep 7, 2012 at 10:48 PM, Sekhar Nori <nsekhar@ti.com> wrote:
> 
>>>> +static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
>>>> +#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
>>>
>>> You agreed to get rid of these multiple ifdefs but you have not fixed that.
>>>
>> I have merged the top one, at later stage when we go  ahead and add sensor
>> support then we would have require to have define two
>> da850_vpif_capture_sdev_info
>> so to avoid it I have kept this one.
> 
> Lets get to that when we actually add sensor support. It might make
> sense then. Right now, there is no reason to have them.
> 
Ok I'll fix it for v3.

Regards,
--Prabhakar

> Thanks,
> Sekhar
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-09-10 12:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-20 14:08 [PATCH v2 0/2] ARM: davinci: da850/omap-l138: add support for VPIF driver Prabhakar Lad
2012-08-20 14:08 ` [PATCH v2 1/2] ARM: da850/omap-l138: Add SoC related definitions for VPIF Prabhakar Lad
2012-09-07 17:01   ` Sekhar Nori
2012-08-20 14:08 ` [PATCH v2 2/2] ARM: da850/omap-l138: Add EVM specific code for VPIF to work Prabhakar Lad
2012-09-07 17:18   ` Sekhar Nori
2012-09-07 17:34     ` Prabhakar Lad
2012-09-10  9:27       ` Sekhar Nori
2012-09-10 12:06         ` Prabhakar Lad

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).