Re: [PATCH 7/10 - v2] DM355 platform changes for vpfe capture driver

2009-06-15 Thread Hans Verkuil
On Tuesday 16 June 2009 00:24:34 Karicheri, Muralidharan wrote:
 Hans,

 Please see my response below.

snip

 A general remark: currently you link your inputs directly to a subdev.
  This approach has two disadvantages:
 
 1) It doesn't work if there are no subdevs at all (e.g. because
  everything goes through an fpga).

 [MK] Not sure what you mean here. If there is an FPGA, there should be
 something to make a selection between FPGA vs the rest of the decoders.
 FPGA will have an input and there should be some way it reports the
 detected standard etc. So why can't it be implemented by a sub device
 (may be less configuration since most of the logic is in FPGA).

Hopefully my previous reply explains what I meant. I wasn't clear here 
either.

 2) It fixes the reported order of the inputs to the order of the
  subdevs.

 [MK]Is that an issue? I don't see why.

It's a minor issue. But applications typically enumerate inputs to present a 
list to the user which inputs there are. And if there are a lot then it can 
be useful to have them in a specific order. Either to group the inputs 
based on some criterium or to reflect the labeling on the box. It's a 
nice-to-have, I admit.

 I think it is better to have a separate array of input descriptions that
 refer to a subdev when an input is associated with that subdev.

 [MK] Are suggesting an link from input array entry into sub device entry
 input index?

Yes.

 How do you translate the input from application to a sub 
 device or FPGA input? What if there are two composite inputs on two
 different sub devices?

A Composite 1 input would point to subdev 1 and the Composite 2 input 
would point to subdev 2. Or do you mean something else? (I'm not sure I 
entirely understand your question)


 flexible that way, and I actually think that the vpfe driver will be
 simplified as well.

 [MK], Not sure at this point.

The advantage is that the ENUMINPUT and S/G_INPUT functions can do a simple 
lookup in the input array and immediately find the subdev index. Rather 
than iterating over all subdevs and counting the number of inputs in order 
to find which input belongs to which subdev.

This is probably a stronger argument than my others are :-)

Regards,

Hans


 Murali
 m-karich...@ti.com
 --
 To unsubscribe from this list: send the line unsubscribe linux-media in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG Telecom
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 7/10 - v2] DM355 platform changes for vpfe capture driver

2009-06-14 Thread Hans Verkuil
On Thursday 11 June 2009 19:00:46 m-kariche...@ti.com wrote:
 From: Muralidharan Karicheri a0868...@gt516km11.gt.design.ti.com
 
 DM355 platform and board setup
 
 This has platform and board setup changes to support vpfe capture
 driver for DM355 EVMs.
 
 Added registration of vpss platform driver based on last review
 
 Reviewed By Hans Verkuil.
 Reviewed By Laurent Pinchart.
 
 Signed-off-by: Muralidharan Karicheri m-kariche...@ti.com
 ---
 Applies to Davinci GIT Tree
 
  arch/arm/mach-davinci/board-dm355-evm.c|   72 +++-
  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, 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 5ac2f56..cf87e21 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 linux/videodev2.h
 +#include media/tvp514x.h
  #include linux/spi/spi.h
  #include linux/spi/eeprom.h
  
 @@ -134,12 +136,23 @@ static void dm355evm_mmcsd_gpios(unsigned gpio)
   dm355evm_mmc_gpios = gpio;
  }
  
 +#define TVP5146_I2C_ADDR 0x5D
 +static struct tvp514x_platform_data tvp5146_pdata = {
 + .clk_polarity = 0,
 + .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), }, */

Huh? What's this? I only know the tlv320aic23b and that's an audio driver.

 - /* { I2C_BOARD_INFO(tvp5146, 0x5d), }, */
  };
  
  static void __init evm_init_i2c(void)
 @@ -178,6 +191,57 @@ static struct platform_device dm355evm_dm9000 = {
   .num_resources  = ARRAY_SIZE(dm355evm_dm9000_rsrc),
  };
  
 +#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,

Please, don't use all-caps. Just use Composite and S-Video. 

 + .type = V4L2_INPUT_TYPE_CAMERA,
 + .std = TVP514X_STD_ALL,
 + },
 + {
 + .index = 1,
 + .name = SVIDEO,
 + .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 v4l2_routing tvp5146_routes[] = {

As mentioned elsewhere: v4l2_routing will disappear, so please don't use it.

 + {
 + .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,
 + }
 +};

A general remark: currently you link your inputs directly to a subdev. This
approach has two disadvantages:

1) It doesn't work if there are no subdevs at all (e.g. because everything
goes through an fpga).

2) It fixes the reported order of the inputs to the order of the subdevs.

I think it is better to have a separate array of input descriptions that
refer to a subdev when an input is associated with that subdev. It's more
flexible that way, and I actually think that the vpfe driver will be
simplified as well.

 +
 +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 +253,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 9baeed3..3263af8 100644
 --- a/arch/arm/mach-davinci/dm355.c
 +++ b/arch/arm/mach-davinci/dm355.c
 @@ -481,6 +481,14 @@ 

Re: [PATCH 7/10 - v2] DM355 platform changes for vpfe capture driver

2009-06-14 Thread David Brownell
On Sunday 14 June 2009, Hans Verkuil wrote:
    /* { I2C_BOARD_INFO(tlv320aic3x, 0x1b), }, */
 
 Huh? What's this? I only know the tlv320aic23b and that's an audio driver.

AIC33 is another audio codec chip:

  http://focus.ti.com/docs/prod/folders/print/tlv320aic33.html

One can't list audio codecs with other board-specific data until
the ASoC initialization gets re-worked to allow it.  That's why
it's commented out of the list-of-i2c-devices-on-the-board.



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


[PATCH 7/10 - v2] DM355 platform changes for vpfe capture driver

2009-06-11 Thread m-karicheri2
From: Muralidharan Karicheri a0868...@gt516km11.gt.design.ti.com

DM355 platform and board setup

This has platform and board setup changes to support vpfe capture
driver for DM355 EVMs.

Added registration of vpss platform driver based on last review

Reviewed By Hans Verkuil.
Reviewed By Laurent Pinchart.

Signed-off-by: Muralidharan Karicheri m-kariche...@ti.com
---
Applies to Davinci GIT Tree

 arch/arm/mach-davinci/board-dm355-evm.c|   72 +++-
 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, 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 5ac2f56..cf87e21 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 linux/videodev2.h
+#include media/tvp514x.h
 #include linux/spi/spi.h
 #include linux/spi/eeprom.h
 
@@ -134,12 +136,23 @@ static void dm355evm_mmcsd_gpios(unsigned gpio)
dm355evm_mmc_gpios = gpio;
 }
 
+#define TVP5146_I2C_ADDR   0x5D
+static struct tvp514x_platform_data tvp5146_pdata = {
+   .clk_polarity = 0,
+   .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 +191,57 @@ static struct platform_device dm355evm_dm9000 = {
.num_resources  = ARRAY_SIZE(dm355evm_dm9000_rsrc),
 };
 
+#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 = SVIDEO,
+   .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 v4l2_routing 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,
+   }
+};
+
+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 +253,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 9baeed3..3263af8 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
 };
 
@@ -623,6 +631,67 @@ static struct platform_device dm355_edma_device = {
.resource   = 

Re: [PATCH 7/10 - v2] DM355 platform changes for vpfe capture driver

2009-06-11 Thread David Brownell
On Thursday 11 June 2009, m-kariche...@ti.com wrote:
 +   I2C_BOARD_INFO(tvp5146, TVP5146_I2C_ADDR),

Minor nit:  just use 0x5d instead of defining TVP5146_I2C_ADDR.
Fix in a v3, iff you make one.

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


[PATCH 7/10 - v2] DM355 platform changes for vpfe capture driver

2009-06-09 Thread m-karicheri2
From: Muralidharan Karicheri a0868...@gt516km11.gt.design.ti.com

DM355 platform and board setup

This has platform and board setup changes to support vpfe capture
driver for DM355 EVMs.

Added registration of vpss platform driver based on last review

Reviewed By Hans Verkuil.
Reviewed By Laurent Pinchart.

Signed-off-by: Muralidharan Karicheri m-kariche...@ti.com
---
Applies to Davinci GIT Tree

 arch/arm/mach-davinci/board-dm355-evm.c|   72 +++-
 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, 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 5ac2f56..cf87e21 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 linux/videodev2.h
+#include media/tvp514x.h
 #include linux/spi/spi.h
 #include linux/spi/eeprom.h
 
@@ -134,12 +136,23 @@ static void dm355evm_mmcsd_gpios(unsigned gpio)
dm355evm_mmc_gpios = gpio;
 }
 
+#define TVP5146_I2C_ADDR   0x5D
+static struct tvp514x_platform_data tvp5146_pdata = {
+   .clk_polarity = 0,
+   .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 +191,57 @@ static struct platform_device dm355evm_dm9000 = {
.num_resources  = ARRAY_SIZE(dm355evm_dm9000_rsrc),
 };
 
+#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 = SVIDEO,
+   .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 v4l2_routing 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,
+   }
+};
+
+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 +253,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 9baeed3..3263af8 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
 };
 
@@ -623,6 +631,67 @@ static struct platform_device dm355_edma_device = {
.resource   =