[media] tvp5150: Fix breakage for serial usage
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 25 Jan 2016 16:39:34 +0000 (14:39 -0200)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 25 Jan 2016 17:15:26 +0000 (15:15 -0200)
changeset 460b6c0831cb ("tvp5150: Add s_stream subdev operation
support") broke for em28xx-based devices with uses tvp5150. On those
devices, touching the TVP5150_MISC_CTL register causes em28xx to stop
streaming.

I suspect that it uses the 27 MHz clock provided by tvp5150 to feed
em28xx. So, change the logic to do nothing on s_stream if the tvp5150 is
not set up to work with V4L2_MBUS_PARALLEL.

Tested with Hauppauge WinTV USB 2 model 42012 Rev. C186
(USB ID: 2040:4200).

Cc: Javier Martinez Canillas <javier@osg.samsung.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/i2c/tvp5150.c

index 437f1a7ecb96e0280cc6b39745e530fe63af35fb..779c6f453cc99a5019c568bdfa1c349b27287aec 100644 (file)
@@ -975,19 +975,18 @@ static int tvp5150_g_mbus_config(struct v4l2_subdev *sd,
 static int tvp5150_s_stream(struct v4l2_subdev *sd, int enable)
 {
        struct tvp5150 *decoder = to_tvp5150(sd);
-       /* Output format: 8-bit ITU-R BT.656 with embedded syncs */
-       int val = 0x09;
 
        /* Output format: 8-bit 4:2:2 YUV with discrete sync */
-       if (decoder->mbus_type == V4L2_MBUS_PARALLEL)
-               val = 0x0d;
+       if (decoder->mbus_type != V4L2_MBUS_PARALLEL)
+               return 0;
 
        /* Initializes TVP5150 to its default values */
        /* # set PCLK (27MHz) */
        tvp5150_write(sd, TVP5150_CONF_SHARED_PIN, 0x00);
 
+       /* Output format: 8-bit ITU-R BT.656 with embedded syncs */
        if (enable)
-               tvp5150_write(sd, TVP5150_MISC_CTL, val);
+               tvp5150_write(sd, TVP5150_MISC_CTL, 0x09);
        else
                tvp5150_write(sd, TVP5150_MISC_CTL, 0x00);