media: smiapp: Use CCS limits in reading binning capabilities
authorSakari Ailus <sakari.ailus@linux.intel.com>
Tue, 11 Feb 2020 09:37:47 +0000 (10:37 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 2 Dec 2020 14:34:24 +0000 (15:34 +0100)
Use CCS limits for obtaining binning capabilities and subtypes.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/smiapp/smiapp-core.c

index c332b6ecf0bdda9d65775b1b405f001b2e88298e..d786f91c1eaee821a891ed11de3882649d806d93 100644 (file)
@@ -3105,26 +3105,17 @@ static int smiapp_probe(struct i2c_client *client)
        }
 
        if (CCS_LIM(sensor, BINNING_CAPABILITY)) {
-               u32 val;
-
-               rval = smiapp_read(sensor,
-                                  SMIAPP_REG_U8_BINNING_SUBTYPES, &val);
-               if (rval < 0) {
-                       rval = -ENODEV;
-                       goto out_free_ccs_limits;
-               }
-               sensor->nbinning_subtypes = min_t(u8, val,
-                                                 SMIAPP_BINNING_SUBTYPES);
+               sensor->nbinning_subtypes =
+                       min_t(u8, CCS_LIM(sensor, BINNING_SUB_TYPES),
+                             CCS_LIM_BINNING_SUB_TYPE_MAX_N);
 
                for (i = 0; i < sensor->nbinning_subtypes; i++) {
-                       rval = smiapp_read(
-                               sensor, SMIAPP_REG_U8_BINNING_TYPE_n(i), &val);
-                       if (rval < 0) {
-                               rval = -ENODEV;
-                               goto out_free_ccs_limits;
-                       }
-                       sensor->binning_subtypes[i] =
-                               *(struct smiapp_binning_subtype *)&val;
+                       sensor->binning_subtypes[i].horizontal =
+                               CCS_LIM_AT(sensor, BINNING_SUB_TYPE, i) >>
+                               CCS_BINNING_SUB_TYPE_COLUMN_SHIFT;
+                       sensor->binning_subtypes[i].vertical =
+                               CCS_LIM_AT(sensor, BINNING_SUB_TYPE, i) &
+                               CCS_BINNING_SUB_TYPE_ROW_MASK;
 
                        dev_dbg(&client->dev, "binning %xx%x\n",
                                sensor->binning_subtypes[i].horizontal,