[media] stk1160: Add support for S-Video input
authorEzequiel Garcia <elezegarcia@gmail.com>
Tue, 9 Oct 2012 21:01:03 +0000 (18:01 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 10 Oct 2012 00:54:26 +0000 (21:54 -0300)
In order to fully replace easycap driver with stk1160,
it's also necessary to add S-Video support.
A similar patch backported for v3.2 kernel has been
tested by three different users.

Signed-off-by: Ezequiel Garcia <elezegarcia@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/usb/stk1160/stk1160-core.c
drivers/media/usb/stk1160/stk1160-v4l.c
drivers/media/usb/stk1160/stk1160.h

index b62740846061d583bfed4d5c56365c7fb89586c9..34a26e0cfe77565f81924b325fb06a9d78750009 100644 (file)
@@ -100,12 +100,21 @@ int stk1160_write_reg(struct stk1160 *dev, u16 reg, u16 value)
 
 void stk1160_select_input(struct stk1160 *dev)
 {
+       int route;
        static const u8 gctrl[] = {
-               0x98, 0x90, 0x88, 0x80
+               0x98, 0x90, 0x88, 0x80, 0x98
        };
 
-       if (dev->ctl_input < ARRAY_SIZE(gctrl))
+       if (dev->ctl_input == STK1160_SVIDEO_INPUT)
+               route = SAA7115_SVIDEO3;
+       else
+               route = SAA7115_COMPOSITE0;
+
+       if (dev->ctl_input < ARRAY_SIZE(gctrl)) {
+               v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
+                               route, 0, 0);
                stk1160_write_reg(dev, STK1160_GCTRL, gctrl[dev->ctl_input]);
+       }
 }
 
 /* TODO: We should break this into pieces */
@@ -351,8 +360,6 @@ static int stk1160_probe(struct usb_interface *interface,
 
        /* i2c reset saa711x */
        v4l2_device_call_all(&dev->v4l2_dev, 0, core, reset, 0);
-       v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
-                               0, 0, 0);
        v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
 
        /* reset stk1160 to default values */
index fe6e857969cadb0c2807a788f1c59973e9219229..6694f9e2ca576c59fd0028992036b8cea101af04 100644 (file)
@@ -419,7 +419,12 @@ static int vidioc_enum_input(struct file *file, void *priv,
        if (i->index > STK1160_MAX_INPUT)
                return -EINVAL;
 
-       sprintf(i->name, "Composite%d", i->index);
+       /* S-Video special handling */
+       if (i->index == STK1160_SVIDEO_INPUT)
+               sprintf(i->name, "S-Video");
+       else
+               sprintf(i->name, "Composite%d", i->index);
+
        i->type = V4L2_INPUT_TYPE_CAMERA;
        i->std = dev->vdev.tvnorms;
        return 0;
index 3feba0033f98df4439795121c2004a1c5048b256..68c8707d36abed789d196ccd3e8a5d528b0b78ac 100644 (file)
@@ -46,7 +46,8 @@
 
 #define STK1160_MIN_PKT_SIZE 3072
 
-#define STK1160_MAX_INPUT 3
+#define STK1160_MAX_INPUT 4
+#define STK1160_SVIDEO_INPUT 4
 
 #define STK1160_I2C_TIMEOUT 100