[media] vpif_capture: move routing info from subdev to input
authorHans Verkuil <hans.verkuil@cisco.com>
Thu, 20 Sep 2012 12:06:25 +0000 (09:06 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 6 Oct 2012 01:02:34 +0000 (22:02 -0300)
Routing information is a property of the input, not of the subdev.
One subdev may provide multiple inputs, each with its own routing
information.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
Acked-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Tested-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
arch/arm/mach-davinci/board-da850-evm.c
arch/arm/mach-davinci/board-dm646x-evm.c
drivers/media/platform/davinci/vpif_capture.c
include/media/davinci/vpif_types.h

index d92e0ab8c2799f2c73e39e4c7df4adfb78afb55c..87bd249ffb9c6fb6fb1c7a97b234cc47da4163b0 100644 (file)
@@ -1182,8 +1182,11 @@ static const struct vpif_input da850_ch0_inputs[] = {
                        .index = 0,
                        .name  = "Composite",
                        .type  = V4L2_INPUT_TYPE_CAMERA,
+                       .capabilities = V4L2_IN_CAP_STD,
                        .std   = TVP514X_STD_ALL,
                },
+               .input_route = INPUT_CVBS_VI2B,
+               .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
                .subdev_name = TVP5147_CH0,
        },
 };
@@ -1194,8 +1197,11 @@ static const struct vpif_input da850_ch1_inputs[] = {
                        .index = 0,
                        .name  = "S-Video",
                        .type  = V4L2_INPUT_TYPE_CAMERA,
+                       .capabilities = V4L2_IN_CAP_STD,
                        .std   = TVP514X_STD_ALL,
                },
+               .input_route = INPUT_SVIDEO_VI2C_VI1C,
+               .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
                .subdev_name = TVP5147_CH1,
        },
 };
@@ -1207,8 +1213,6 @@ static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
                        I2C_BOARD_INFO("tvp5146", 0x5d),
                        .platform_data = &tvp5146_pdata,
                },
-               .input = INPUT_CVBS_VI2B,
-               .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
                .vpif_if = {
                        .if_type = VPIF_IF_BT656,
                        .hd_pol  = 1,
@@ -1222,8 +1226,6 @@ static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
                        I2C_BOARD_INFO("tvp5146", 0x5c),
                        .platform_data = &tvp5146_pdata,
                },
-               .input = INPUT_SVIDEO_VI2C_VI1C,
-               .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
                .vpif_if = {
                        .if_type = VPIF_IF_BT656,
                        .hd_pol  = 1,
index a0be63b1dc0b88f705d2331a98f01a0a6b59cbd4..6f329caca6e84e271c8979c7fb3729d3bd8ebb43 100644 (file)
@@ -601,8 +601,6 @@ static struct vpif_subdev_info vpif_capture_sdev_info[] = {
                        I2C_BOARD_INFO("tvp5146", 0x5d),
                        .platform_data = &tvp5146_pdata,
                },
-               .input = INPUT_CVBS_VI2B,
-               .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
                .vpif_if = {
                        .if_type = VPIF_IF_BT656,
                        .hd_pol = 1,
@@ -616,8 +614,6 @@ static struct vpif_subdev_info vpif_capture_sdev_info[] = {
                        I2C_BOARD_INFO("tvp5146", 0x5c),
                        .platform_data = &tvp5146_pdata,
                },
-               .input = INPUT_SVIDEO_VI2C_VI1C,
-               .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
                .vpif_if = {
                        .if_type = VPIF_IF_BT656,
                        .hd_pol = 1,
@@ -633,9 +629,12 @@ static const struct vpif_input dm6467_ch0_inputs[] = {
                        .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,
        },
 };
 
@@ -645,9 +644,12 @@ static const struct vpif_input dm6467_ch1_inputs[] = {
                        .index = 0,
                        .name = "S-Video",
                        .type = V4L2_INPUT_TYPE_CAMERA,
+                       .capabilities = V4L2_IN_CAP_STD,
                        .std = TVP514X_STD_ALL,
                },
                .subdev_name = TVP5147_CH1,
+               .input_route = INPUT_SVIDEO_VI2C_VI1C,
+               .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
        },
 };
 
index d90e23596541357d35ce81a22d44a9041d6fa862..d668a3aa5fe078ff507eb2eafc6fdf3980733fc6 100644 (file)
@@ -1464,6 +1464,9 @@ static int vpif_s_input(struct file *file, void *priv, unsigned int index)
 
        chan_cfg = &config->chan_config[ch->channel_id];
 
+       if (index >= chan_cfg->input_count)
+               return -EINVAL;
+
        if (common->started) {
                vpif_err("Streaming in progress\n");
                return -EBUSY;
@@ -1502,8 +1505,8 @@ static int vpif_s_input(struct file *file, void *priv, unsigned int index)
                }
        }
 
-       input = subdev_info->input;
-       output = subdev_info->output;
+       input = chan_cfg->inputs[index].input_route;
+       output = chan_cfg->inputs[index].output_route;
        ret = v4l2_subdev_call(vpif_obj.sd[sd_index], video, s_routing,
                        input, output, 0);
        if (ret < 0 && ret != -ENOIOCTLCMD) {
index 1fe46a51de7c1e1673897ae4e31ffcbfe3b4204f..a422ed085cd2d50a854fcd29ff146ba5a019dfc1 100644 (file)
@@ -37,8 +37,6 @@ struct vpif_interface {
 struct vpif_subdev_info {
        const char *name;
        struct i2c_board_info board_info;
-       u32 input;
-       u32 output;
        struct vpif_interface vpif_if;
 };
 
@@ -56,6 +54,8 @@ struct vpif_display_config {
 struct vpif_input {
        struct v4l2_input input;
        const char *subdev_name;
+       u32 input_route;
+       u32 output_route;
 };
 
 struct vpif_capture_chan_config {