Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / media / usb / cx231xx / cx231xx-video.c
index cd22147..9906261 100644 (file)
@@ -36,7 +36,6 @@
 #include <media/v4l2-common.h>
 #include <media/v4l2-ioctl.h>
 #include <media/v4l2-event.h>
-#include <media/v4l2-chip-ident.h>
 #include <media/msp3400.h>
 #include <media/tuner.h>
 
@@ -1228,179 +1227,93 @@ int cx231xx_s_frequency(struct file *file, void *priv,
        return rc;
 }
 
-int cx231xx_g_chip_ident(struct file *file, void *fh,
-                       struct v4l2_dbg_chip_ident *chip)
+#ifdef CONFIG_VIDEO_ADV_DEBUG
+
+int cx231xx_g_chip_info(struct file *file, void *fh,
+                       struct v4l2_dbg_chip_info *chip)
 {
-       chip->ident = V4L2_IDENT_NONE;
-       chip->revision = 0;
-       if (chip->match.type == V4L2_CHIP_MATCH_HOST) {
-               if (v4l2_chip_match_host(&chip->match))
-                       chip->ident = V4L2_IDENT_CX23100;
+       switch (chip->match.addr) {
+       case 0: /* Cx231xx - internal registers */
+               return 0;
+       case 1: /* AFE - read byte */
+               strlcpy(chip->name, "AFE (byte)", sizeof(chip->name));
+               return 0;
+       case 2: /* Video Block - read byte */
+               strlcpy(chip->name, "Video (byte)", sizeof(chip->name));
+               return 0;
+       case 3: /* I2S block - read byte */
+               strlcpy(chip->name, "I2S (byte)", sizeof(chip->name));
+               return 0;
+       case 4: /* AFE - read dword */
+               strlcpy(chip->name, "AFE (dword)", sizeof(chip->name));
+               return 0;
+       case 5: /* Video Block - read dword */
+               strlcpy(chip->name, "Video (dword)", sizeof(chip->name));
+               return 0;
+       case 6: /* I2S Block - read dword */
+               strlcpy(chip->name, "I2S (dword)", sizeof(chip->name));
                return 0;
        }
        return -EINVAL;
 }
 
-#ifdef CONFIG_VIDEO_ADV_DEBUG
-
-/*
-  -R, --list-registers=type=<host/i2cdrv/i2caddr>,
-                               chip=<chip>[,min=<addr>,max=<addr>]
-                    dump registers from <min> to <max> [VIDIOC_DBG_G_REGISTER]
-  -r, --set-register=type=<host/i2cdrv/i2caddr>,
-                               chip=<chip>,reg=<addr>,val=<val>
-                    set the register [VIDIOC_DBG_S_REGISTER]
-
-  if type == host, then <chip> is the hosts chip ID (default 0)
-  if type == i2cdrv (default), then <chip> is the I2C driver name or ID
-  if type == i2caddr, then <chip> is the 7-bit I2C address
-*/
-
 int cx231xx_g_register(struct file *file, void *priv,
                             struct v4l2_dbg_register *reg)
 {
        struct cx231xx_fh *fh = priv;
        struct cx231xx *dev = fh->dev;
-       int ret = 0;
+       int ret;
        u8 value[4] = { 0, 0, 0, 0 };
        u32 data = 0;
 
-       switch (reg->match.type) {
-       case V4L2_CHIP_MATCH_HOST:
-               switch (reg->match.addr) {
-               case 0: /* Cx231xx - internal registers */
-                       ret = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER,
-                                                 (u16)reg->reg, value, 4);
-                       reg->val = value[0] | value[1] << 8 |
-                                  value[2] << 16 | value[3] << 24;
-                       break;
-               case 1: /* AFE - read byte */
-                       ret = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
-                                                 (u16)reg->reg, 2, &data, 1);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-               case 14: /* AFE - read dword */
-                       ret = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
-                                                 (u16)reg->reg, 2, &data, 4);
-                       reg->val = le32_to_cpu(data);
-                       break;
-               case 2: /* Video Block - read byte */
-                       ret = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
-                                                 (u16)reg->reg, 2, &data, 1);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-               case 24: /* Video Block - read dword */
-                       ret = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
-                                                 (u16)reg->reg, 2, &data, 4);
-                       reg->val = le32_to_cpu(data);
-                       break;
-               case 3: /* I2S block - read byte */
-                       ret = cx231xx_read_i2c_data(dev,
-                                                   I2S_BLK_DEVICE_ADDRESS,
-                                                   (u16)reg->reg, 1,
-                                                   &data, 1);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-               case 34: /* I2S Block - read dword */
-                       ret =
-                           cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
-                                                 (u16)reg->reg, 1, &data, 4);
-                       reg->val = le32_to_cpu(data);
-                       break;
-               }
-               return ret < 0 ? ret : 0;
-
-       case V4L2_CHIP_MATCH_I2C_DRIVER:
-               call_all(dev, core, g_register, reg);
-               return 0;
-       case V4L2_CHIP_MATCH_I2C_ADDR:/*for register debug*/
-               switch (reg->match.addr) {
-               case 0: /* Cx231xx - internal registers */
-                       ret = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER,
-                                                 (u16)reg->reg, value, 4);
-                       reg->val = value[0] | value[1] << 8 |
-                                  value[2] << 16 | value[3] << 24;
-
-                       break;
-               case 0x600:/* AFE - read byte */
-                       ret = cx231xx_read_i2c_master(dev, AFE_DEVICE_ADDRESS,
-                                                (u16)reg->reg, 2,
-                                                &data, 1 , 0);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-
-               case 0x880:/* Video Block - read byte */
-                       if (reg->reg < 0x0b) {
-                               ret = cx231xx_read_i2c_master(dev,
-                                               VID_BLK_I2C_ADDRESS,
-                                                (u16)reg->reg, 2,
-                                                &data, 1 , 0);
-                               reg->val = le32_to_cpu(data & 0xff);
-                       } else {
-                               ret = cx231xx_read_i2c_master(dev,
-                                               VID_BLK_I2C_ADDRESS,
-                                                (u16)reg->reg, 2,
-                                                &data, 4 , 0);
-                               reg->val = le32_to_cpu(data);
-                       }
-                       break;
-               case 0x980:
-                       ret = cx231xx_read_i2c_master(dev,
-                                               I2S_BLK_DEVICE_ADDRESS,
-                                               (u16)reg->reg, 1,
-                                               &data, 1 , 0);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-               case 0x400:
-                       ret =
-                           cx231xx_read_i2c_master(dev, 0x40,
-                                                 (u16)reg->reg, 1,
-                                                &data, 1 , 0);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-               case 0xc01:
-                       ret =
-                               cx231xx_read_i2c_master(dev, 0xc0,
-                                               (u16)reg->reg, 2,
-                                                &data, 38, 1);
-                       reg->val = le32_to_cpu(data);
-                       break;
-               case 0x022:
-                       ret =
-                               cx231xx_read_i2c_master(dev, 0x02,
-                                               (u16)reg->reg, 1,
-                                                &data, 1, 2);
-                       reg->val = le32_to_cpu(data & 0xff);
-                       break;
-               case 0x322:
-                       ret = cx231xx_read_i2c_master(dev,
-                                               0x32,
-                                                (u16)reg->reg, 1,
-                                                &data, 4 , 2);
-                               reg->val = le32_to_cpu(data);
-                       break;
-               case 0x342:
-                       ret = cx231xx_read_i2c_master(dev,
-                                               0x34,
-                                                (u16)reg->reg, 1,
-                                                &data, 4 , 2);
-                               reg->val = le32_to_cpu(data);
-                       break;
-
-               default:
-                       cx231xx_info("no match device address!!\n");
-                       break;
-                       }
-               return ret < 0 ? ret : 0;
-               /*return -EINVAL;*/
+       switch (reg->match.addr) {
+       case 0: /* Cx231xx - internal registers */
+               ret = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER,
+                               (u16)reg->reg, value, 4);
+               reg->val = value[0] | value[1] << 8 |
+                       value[2] << 16 | value[3] << 24;
+               reg->size = 4;
+               break;
+       case 1: /* AFE - read byte */
+               ret = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
+                               (u16)reg->reg, 2, &data, 1);
+               reg->val = data;
+               reg->size = 1;
+               break;
+       case 2: /* Video Block - read byte */
+               ret = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
+                               (u16)reg->reg, 2, &data, 1);
+               reg->val = data;
+               reg->size = 1;
+               break;
+       case 3: /* I2S block - read byte */
+               ret = cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
+                               (u16)reg->reg, 1, &data, 1);
+               reg->val = data;
+               reg->size = 1;
+               break;
+       case 4: /* AFE - read dword */
+               ret = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS,
+                               (u16)reg->reg, 2, &data, 4);
+               reg->val = data;
+               reg->size = 4;
+               break;
+       case 5: /* Video Block - read dword */
+               ret = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS,
+                               (u16)reg->reg, 2, &data, 4);
+               reg->val = data;
+               reg->size = 4;
+               break;
+       case 6: /* I2S Block - read dword */
+               ret = cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
+                               (u16)reg->reg, 1, &data, 4);
+               reg->val = data;
+               reg->size = 4;
+               break;
        default:
-               if (!v4l2_chip_match_host(&reg->match))
-                       return -EINVAL;
+               return -EINVAL;
        }
-
-       call_all(dev, core, g_register, reg);
-
-       return ret;
+       return ret < 0 ? ret : 0;
 }
 
 int cx231xx_s_register(struct file *file, void *priv,
@@ -1408,165 +1321,46 @@ int cx231xx_s_register(struct file *file, void *priv,
 {
        struct cx231xx_fh *fh = priv;
        struct cx231xx *dev = fh->dev;
-       int ret = 0;
-       __le64 buf;
-       u32 value;
+       int ret;
        u8 data[4] = { 0, 0, 0, 0 };
 
-       buf = cpu_to_le64(reg->val);
-
-       switch (reg->match.type) {
-       case V4L2_CHIP_MATCH_HOST:
-               {
-                       value = (u32) buf & 0xffffffff;
-
-                       switch (reg->match.addr) {
-                       case 0: /* cx231xx internal registers */
-                               data[0] = (u8) value;
-                               data[1] = (u8) (value >> 8);
-                               data[2] = (u8) (value >> 16);
-                               data[3] = (u8) (value >> 24);
-                               ret = cx231xx_write_ctrl_reg(dev,
-                                                          VRT_SET_REGISTER,
-                                                          (u16)reg->reg, data,
-                                                          4);
-                               break;
-                       case 1: /* AFE - read byte */
-                               ret = cx231xx_write_i2c_data(dev,
-                                                       AFE_DEVICE_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 1);
-                               break;
-                       case 14: /* AFE - read dword */
-                               ret = cx231xx_write_i2c_data(dev,
-                                                       AFE_DEVICE_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 4);
-                               break;
-                       case 2: /* Video Block - read byte */
-                               ret =
-                                   cx231xx_write_i2c_data(dev,
-                                                       VID_BLK_I2C_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 1);
-                               break;
-                       case 24: /* Video Block - read dword */
-                               ret =
-                                   cx231xx_write_i2c_data(dev,
-                                                       VID_BLK_I2C_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 4);
-                               break;
-                       case 3: /* I2S block - read byte */
-                               ret =
-                                   cx231xx_write_i2c_data(dev,
-                                                       I2S_BLK_DEVICE_ADDRESS,
-                                                       (u16)reg->reg, 1,
-                                                       value, 1);
-                               break;
-                       case 34: /* I2S block - read dword */
-                               ret =
-                                   cx231xx_write_i2c_data(dev,
-                                                       I2S_BLK_DEVICE_ADDRESS,
-                                                       (u16)reg->reg, 1,
-                                                       value, 4);
-                               break;
-                       }
-               }
-               return ret < 0 ? ret : 0;
-       case V4L2_CHIP_MATCH_I2C_ADDR:
-               {
-                       value = (u32) buf & 0xffffffff;
-
-                       switch (reg->match.addr) {
-                       case 0:/*cx231xx internal registers*/
-                                       data[0] = (u8) value;
-                                       data[1] = (u8) (value >> 8);
-                                       data[2] = (u8) (value >> 16);
-                                       data[3] = (u8) (value >> 24);
-                                       ret = cx231xx_write_ctrl_reg(dev,
-                                                          VRT_SET_REGISTER,
-                                                          (u16)reg->reg, data,
-                                                          4);
-                                       break;
-                       case 0x600:/* AFE - read byte */
-                                       ret = cx231xx_write_i2c_master(dev,
-                                                       AFE_DEVICE_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 1 , 0);
-                                       break;
-
-                       case 0x880:/* Video Block - read byte */
-                                       if (reg->reg < 0x0b)
-                                               cx231xx_write_i2c_master(dev,
-                                                       VID_BLK_I2C_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 1, 0);
-                                       else
-                                               cx231xx_write_i2c_master(dev,
-                                                       VID_BLK_I2C_ADDRESS,
-                                                       (u16)reg->reg, 2,
-                                                       value, 4, 0);
-                                       break;
-                       case 0x980:
-                                       ret =
-                                               cx231xx_write_i2c_master(dev,
-                                                       I2S_BLK_DEVICE_ADDRESS,
-                                                       (u16)reg->reg, 1,
-                                                       value, 1, 0);
-                                       break;
-                       case 0x400:
-                                       ret =
-                                               cx231xx_write_i2c_master(dev,
-                                                       0x40,
-                                                       (u16)reg->reg, 1,
-                                                       value, 1, 0);
-                                       break;
-                       case 0xc01:
-                                       ret =
-                                               cx231xx_write_i2c_master(dev,
-                                                        0xc0,
-                                                        (u16)reg->reg, 1,
-                                                        value, 1, 1);
-                                       break;
-
-                       case 0x022:
-                                       ret =
-                                               cx231xx_write_i2c_master(dev,
-                                                       0x02,
-                                                       (u16)reg->reg, 1,
-                                                       value, 1, 2);
-                                       break;
-                       case 0x322:
-                                       ret =
-                                               cx231xx_write_i2c_master(dev,
-                                                       0x32,
-                                                       (u16)reg->reg, 1,
-                                                       value, 4, 2);
-                                       break;
-
-                       case 0x342:
-                                       ret =
-                                               cx231xx_write_i2c_master(dev,
-                                                       0x34,
-                                                       (u16)reg->reg, 1,
-                                                       value, 4, 2);
-                                       break;
-                       default:
-                               cx231xx_info("no match device address, "
-                                       "the value is %x\n", reg->match.addr);
-                                       break;
-
-                                       }
-
-               }
-       default:
+       switch (reg->match.addr) {
+       case 0: /* cx231xx internal registers */
+               data[0] = (u8) reg->val;
+               data[1] = (u8) (reg->val >> 8);
+               data[2] = (u8) (reg->val >> 16);
+               data[3] = (u8) (reg->val >> 24);
+               ret = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER,
+                               (u16)reg->reg, data, 4);
+               break;
+       case 1: /* AFE - write byte */
+               ret = cx231xx_write_i2c_data(dev, AFE_DEVICE_ADDRESS,
+                               (u16)reg->reg, 2, reg->val, 1);
+               break;
+       case 2: /* Video Block - write byte */
+               ret = cx231xx_write_i2c_data(dev, VID_BLK_I2C_ADDRESS,
+                               (u16)reg->reg, 2, reg->val, 1);
+               break;
+       case 3: /* I2S block - write byte */
+               ret = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
+                               (u16)reg->reg, 1, reg->val, 1);
+               break;
+       case 4: /* AFE - write dword */
+               ret = cx231xx_write_i2c_data(dev, AFE_DEVICE_ADDRESS,
+                               (u16)reg->reg, 2, reg->val, 4);
+               break;
+       case 5: /* Video Block - write dword */
+               ret = cx231xx_write_i2c_data(dev, VID_BLK_I2C_ADDRESS,
+                               (u16)reg->reg, 2, reg->val, 4);
                break;
+       case 6: /* I2S block - write dword */
+               ret = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS,
+                               (u16)reg->reg, 1, reg->val, 4);
+               break;
+       default:
+               return -EINVAL;
        }
-
-       call_all(dev, core, s_register, reg);
-
-       return ret;
+       return ret < 0 ? ret : 0;
 }
 #endif
 
@@ -2208,8 +2002,8 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
        .vidioc_s_tuner                = cx231xx_s_tuner,
        .vidioc_g_frequency            = cx231xx_g_frequency,
        .vidioc_s_frequency            = cx231xx_s_frequency,
-       .vidioc_g_chip_ident           = cx231xx_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
+       .vidioc_g_chip_info            = cx231xx_g_chip_info,
        .vidioc_g_register             = cx231xx_g_register,
        .vidioc_s_register             = cx231xx_s_register,
 #endif
@@ -2240,8 +2034,8 @@ static const struct v4l2_ioctl_ops radio_ioctl_ops = {
        .vidioc_s_tuner     = radio_s_tuner,
        .vidioc_g_frequency = cx231xx_g_frequency,
        .vidioc_s_frequency = cx231xx_s_frequency,
-       .vidioc_g_chip_ident = cx231xx_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
+       .vidioc_g_chip_info = cx231xx_g_chip_info,
        .vidioc_g_register  = cx231xx_g_register,
        .vidioc_s_register  = cx231xx_s_register,
 #endif