[media] cx25840: fix cx25840_s_stream for cx2388x and cx231xx
authorHans Verkuil <hans.verkuil@cisco.com>
Mon, 30 Nov 2015 12:26:35 +0000 (10:26 -0200)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 18 Dec 2015 15:34:32 +0000 (13:34 -0200)
For those two devices the code wrote to addresses 0x115/6, but on
those devices those addresses have nothing to do with power controls.
So clearly this never worked. Rather than writing to bogus addresses,
just do nothing for the cx2388x and cx231xx.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/i2c/cx25840/cx25840-core.c

index d8b5343..a8b1a03 100644 (file)
@@ -1716,26 +1716,27 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
 
        v4l_dbg(1, cx25840_debug, client, "%s video output\n",
                        enable ? "enable" : "disable");
+
+       /*
+        * It's not clear what should be done for these devices.
+        * The original code used the same addresses as for the cx25840, but
+        * those addresses do something else entirely on the cx2388x and
+        * cx231xx. Since it never did anything in the first place, just do
+        * nothing.
+        */
+       if (is_cx2388x(state) || is_cx231xx(state))
+               return 0;
+
        if (enable) {
-               if (is_cx2388x(state) || is_cx231xx(state)) {
-                       v = cx25840_read(client, 0x421) | 0x0b;
-                       cx25840_write(client, 0x421, v);
-               } else {
-                       v = cx25840_read(client, 0x115) | 0x0c;
-                       cx25840_write(client, 0x115, v);
-                       v = cx25840_read(client, 0x116) | 0x04;
-                       cx25840_write(client, 0x116, v);
-               }
+               v = cx25840_read(client, 0x115) | 0x0c;
+               cx25840_write(client, 0x115, v);
+               v = cx25840_read(client, 0x116) | 0x04;
+               cx25840_write(client, 0x116, v);
        } else {
-               if (is_cx2388x(state) || is_cx231xx(state)) {
-                       v = cx25840_read(client, 0x421) & ~(0x0b);
-                       cx25840_write(client, 0x421, v);
-               } else {
-                       v = cx25840_read(client, 0x115) & ~(0x0c);
-                       cx25840_write(client, 0x115, v);
-                       v = cx25840_read(client, 0x116) & ~(0x04);
-                       cx25840_write(client, 0x116, v);
-               }
+               v = cx25840_read(client, 0x115) & ~(0x0c);
+               cx25840_write(client, 0x115, v);
+               v = cx25840_read(client, 0x116) & ~(0x04);
+               cx25840_write(client, 0x116, v);
        }
        return 0;
 }