|
@@ -578,3 +578,93 @@ static int setup_vpif_input_path(int channel, const char *sub_dev_name)
|
|
return err;
|
|
return err;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * setup_vpif_input_channel_mode()
|
|
|
|
+ * @mux_mode: mux mode. 0 - 1 channel or (1) - 2 channel
|
|
|
|
+ *
|
|
|
|
+ * This will setup input mode to one channel (TVP7002) or 2 channel (TVP5147)
|
|
|
|
+ */
|
|
|
|
+static int setup_vpif_input_channel_mode(int mux_mode)
|
|
|
|
+{
|
|
|
|
+ unsigned long flags;
|
|
|
|
+ int err = 0;
|
|
|
|
+ int val;
|
|
|
|
+ u32 value;
|
|
|
|
+
|
|
|
|
+ if (!cpld_client)
|
|
|
|
+ return -ENXIO;
|
|
|
|
+
|
|
|
|
+ val = i2c_smbus_read_byte(cpld_client);
|
|
|
|
+ if (val < 0)
|
|
|
|
+ return val;
|
|
|
|
+
|
|
|
|
+ spin_lock_irqsave(&vpif_reg_lock, flags);
|
|
|
|
+ value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VIDCLKCTL));
|
|
|
|
+ if (mux_mode) {
|
|
|
|
+ val &= VPIF_INPUT_TWO_CHANNEL;
|
|
|
|
+ value |= VIDCH1CLK;
|
|
|
|
+ } else {
|
|
|
|
+ val |= VPIF_INPUT_ONE_CHANNEL;
|
|
|
|
+ value &= ~VIDCH1CLK;
|
|
|
|
+ }
|
|
|
|
+ __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VIDCLKCTL));
|
|
|
|
+ spin_unlock_irqrestore(&vpif_reg_lock, flags);
|
|
|
|
+
|
|
|
|
+ err = i2c_smbus_write_byte(cpld_client, val);
|
|
|
|
+ if (err)
|
|
|
|
+ return err;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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 struct vpif_subdev_info vpif_capture_sdev_info[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = TVP5147_CH0,
|
|
|
|
+ .board_info = {
|
|
|
|
+ I2C_BOARD_INFO("tvp5146", 0x5d),
|
|
|
|
+ .platform_data = &tvp5146_pdata,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = TVP5147_CH1,
|
|
|
|
+ .board_info = {
|
|
|
|
+ I2C_BOARD_INFO("tvp5146", 0x5c),
|
|
|
|
+ .platform_data = &tvp5146_pdata,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct vpif_input dm6467_ch0_inputs[] = {
|
|
|
|
+ {
|
|
|
|
+ .input = {
|
|
|
|
+ .index = 0,
|
|
|
|
+ .name = "Composite",
|
|
|
|
+ .type = V4L2_INPUT_TYPE_CAMERA,
|
|
|
|
+ .capabilities = V4L2_IN_CAP_STD,
|
|
|
|
+ .std = TVP514X_STD_ALL,
|
|
|
|
+ },
|
|
|
|
+ .subdev_name = TVP5147_CH0,
|
|
|
|
+ .input_route = INPUT_CVBS_VI2B,
|
|
|
|
+ .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct vpif_input dm6467_ch1_inputs[] = {
|
|
|
|
+ {
|
|
|
|
+ .input = {
|
|
|
|
+ .index = 0,
|
|
|
|
+ .name = "S-Video",
|
|
|
|
+ .type = V4L2_INPUT_TYPE_CAMERA,
|
|
|
|
+ .capabilities = V4L2_IN_CAP_STD,
|
|
|
|
+ .std = TVP514X_STD_ALL,
|
|
|
|
+ },
|
|
|
|
+ .subdev_name = TVP5147_CH1,
|