rk: revert to v3.10
[firefly-linux-kernel-4.4.55.git] / drivers / media / usb / dvb-usb / dw2102.c
index 4170a45d17e0ae9b0770cb690780c0790bb82394..6e237b6dd0a8d8acb5bba115152e5b060775e680 100644 (file)
@@ -30,9 +30,6 @@
 #include "stb6100_proc.h"
 #include "m88rs2000.h"
 
-/* Max transfer size done by I2C transfer functions */
-#define MAX_XFER_SIZE  64
-
 #ifndef USB_PID_DW2102
 #define USB_PID_DW2102 0x2102
 #endif
@@ -301,7 +298,6 @@ static int dw2102_serit_i2c_transfer(struct i2c_adapter *adap,
 static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], int num)
 {
        struct dvb_usb_device *d = i2c_get_adapdata(adap);
-       int ret;
 
        if (!d)
                return -ENODEV;
@@ -312,15 +308,7 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
        case 2: {
                /* read */
                /* first write first register number */
-               u8 ibuf[MAX_XFER_SIZE], obuf[3];
-
-               if (2 + msg[1].len > sizeof(ibuf)) {
-                       warn("i2c rd: len=%d is too big!\n",
-                            msg[1].len);
-                       ret = -EOPNOTSUPP;
-                       goto unlock;
-               }
-
+               u8 ibuf[msg[1].len + 2], obuf[3];
                obuf[0] = msg[0].addr << 1;
                obuf[1] = msg[0].len;
                obuf[2] = msg[0].buf[0];
@@ -337,15 +325,7 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
                switch (msg[0].addr) {
                case 0x68: {
                        /* write to register */
-                       u8 obuf[MAX_XFER_SIZE];
-
-                       if (2 + msg[0].len > sizeof(obuf)) {
-                               warn("i2c wr: len=%d is too big!\n",
-                                    msg[1].len);
-                               ret = -EOPNOTSUPP;
-                               goto unlock;
-                       }
-
+                       u8 obuf[msg[0].len + 2];
                        obuf[0] = msg[0].addr << 1;
                        obuf[1] = msg[0].len;
                        memcpy(obuf + 2, msg[0].buf, msg[0].len);
@@ -355,15 +335,7 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
                }
                case 0x61: {
                        /* write to tuner */
-                       u8 obuf[MAX_XFER_SIZE];
-
-                       if (2 + msg[0].len > sizeof(obuf)) {
-                               warn("i2c wr: len=%d is too big!\n",
-                                    msg[1].len);
-                               ret = -EOPNOTSUPP;
-                               goto unlock;
-                       }
-
+                       u8 obuf[msg[0].len + 2];
                        obuf[0] = msg[0].addr << 1;
                        obuf[1] = msg[0].len;
                        memcpy(obuf + 2, msg[0].buf, msg[0].len);
@@ -390,17 +362,15 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms
 
                break;
        }
-       ret = num;
 
-unlock:
        mutex_unlock(&d->i2c_mutex);
-       return ret;
+       return num;
 }
 
 static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], int num)
 {
        struct dvb_usb_device *d = i2c_get_adapdata(adap);
-       int len, i, j, ret;
+       int len, i, j;
 
        if (!d)
                return -ENODEV;
@@ -431,15 +401,7 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i
                default: {
                        if (msg[j].flags == I2C_M_RD) {
                                /* read registers */
-                               u8  ibuf[MAX_XFER_SIZE];
-
-                               if (2 + msg[j].len > sizeof(ibuf)) {
-                                       warn("i2c rd: len=%d is too big!\n",
-                                            msg[j].len);
-                                       ret = -EOPNOTSUPP;
-                                       goto unlock;
-                               }
-
+                               u8  ibuf[msg[j].len + 2];
                                dw210x_op_rw(d->udev, 0xc3,
                                                (msg[j].addr << 1) + 1, 0,
                                                ibuf, msg[j].len + 2,
@@ -468,15 +430,7 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i
                                } while (len > 0);
                        } else {
                                /* write registers */
-                               u8 obuf[MAX_XFER_SIZE];
-
-                               if (2 + msg[j].len > sizeof(obuf)) {
-                                       warn("i2c wr: len=%d is too big!\n",
-                                            msg[j].len);
-                                       ret = -EOPNOTSUPP;
-                                       goto unlock;
-                               }
-
+                               u8 obuf[msg[j].len + 2];
                                obuf[0] = msg[j].addr << 1;
                                obuf[1] = msg[j].len;
                                memcpy(obuf + 2, msg[j].buf, msg[j].len);
@@ -489,18 +443,15 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i
                }
 
        }
-       ret = num;
 
-unlock:
        mutex_unlock(&d->i2c_mutex);
-       return ret;
+       return num;
 }
 
 static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                                                                int num)
 {
        struct dvb_usb_device *d = i2c_get_adapdata(adap);
-       int ret;
        int i;
 
        if (!d)
@@ -512,14 +463,7 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
        case 2: {
                /* read */
                /* first write first register number */
-               u8 ibuf[MAX_XFER_SIZE], obuf[3];
-
-               if (2 + msg[1].len > sizeof(ibuf)) {
-                       warn("i2c rd: len=%d is too big!\n",
-                            msg[1].len);
-                       ret = -EOPNOTSUPP;
-                       goto unlock;
-               }
+               u8 ibuf[msg[1].len + 2], obuf[3];
                obuf[0] = msg[0].addr << 1;
                obuf[1] = msg[0].len;
                obuf[2] = msg[0].buf[0];
@@ -537,14 +481,7 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                case 0x60:
                case 0x0c: {
                        /* write to register */
-                       u8 obuf[MAX_XFER_SIZE];
-
-                       if (2 + msg[0].len > sizeof(obuf)) {
-                               warn("i2c wr: len=%d is too big!\n",
-                                    msg[0].len);
-                               ret = -EOPNOTSUPP;
-                               goto unlock;
-                       }
+                       u8 obuf[msg[0].len + 2];
                        obuf[0] = msg[0].addr << 1;
                        obuf[1] = msg[0].len;
                        memcpy(obuf + 2, msg[0].buf, msg[0].len);
@@ -569,11 +506,9 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                                msg[i].flags == 0 ? ">>>" : "<<<");
                debug_dump(msg[i].buf, msg[i].len, deb_xfer);
        }
-       ret = num;
 
-unlock:
        mutex_unlock(&d->i2c_mutex);
-       return ret;
+       return num;
 }
 
 static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
@@ -581,7 +516,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
 {
        struct dvb_usb_device *d = i2c_get_adapdata(adap);
        struct usb_device *udev;
-       int len, i, j, ret;
+       int len, i, j;
 
        if (!d)
                return -ENODEV;
@@ -628,15 +563,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                default: {
                        if (msg[j].flags == I2C_M_RD) {
                                /* read registers */
-                               u8 ibuf[MAX_XFER_SIZE];
-
-                               if (msg[j].len > sizeof(ibuf)) {
-                                       warn("i2c rd: len=%d is too big!\n",
-                                            msg[j].len);
-                                       ret = -EOPNOTSUPP;
-                                       goto unlock;
-                               }
-
+                               u8 ibuf[msg[j].len];
                                dw210x_op_rw(d->udev, 0x91, 0, 0,
                                                ibuf, msg[j].len,
                                                DW210X_READ_MSG);
@@ -663,15 +590,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                                } while (len > 0);
                        } else if (j < (num - 1)) {
                                /* write register addr before read */
-                               u8 obuf[MAX_XFER_SIZE];
-
-                               if (2 + msg[j].len > sizeof(obuf)) {
-                                       warn("i2c wr: len=%d is too big!\n",
-                                            msg[j].len);
-                                       ret = -EOPNOTSUPP;
-                                       goto unlock;
-                               }
-
+                               u8 obuf[msg[j].len + 2];
                                obuf[0] = msg[j + 1].len;
                                obuf[1] = (msg[j].addr << 1);
                                memcpy(obuf + 2, msg[j].buf, msg[j].len);
@@ -683,14 +602,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                                break;
                        } else {
                                /* write registers */
-                               u8 obuf[MAX_XFER_SIZE];
-
-                               if (2 + msg[j].len > sizeof(obuf)) {
-                                       warn("i2c wr: len=%d is too big!\n",
-                                            msg[j].len);
-                                       ret = -EOPNOTSUPP;
-                                       goto unlock;
-                               }
+                               u8 obuf[msg[j].len + 2];
                                obuf[0] = msg[j].len + 1;
                                obuf[1] = (msg[j].addr << 1);
                                memcpy(obuf + 2, msg[j].buf, msg[j].len);
@@ -703,11 +615,9 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
                }
                }
        }
-       ret = num;
 
-unlock:
        mutex_unlock(&d->i2c_mutex);
-       return ret;
+       return num;
 }
 
 static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],