media: smiapp: Refactor reading NVM page
authorSakari Ailus <sakari.ailus@linux.intel.com>
Mon, 23 Sep 2019 13:15:11 +0000 (10:15 -0300)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 24 Oct 2019 21:51:52 +0000 (18:51 -0300)
Split out reading a single NVM page into a separate function.

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

index 13f7a6315f39c54f884eab16e1bce69a7795080d..5a136068f4d60895e76590e13ac2e991773e1bb1 100644 (file)
@@ -970,56 +970,65 @@ static int smiapp_update_mode(struct smiapp_sensor *sensor)
  * SMIA++ NVM handling
  *
  */
-static int smiapp_read_nvm(struct smiapp_sensor *sensor,
-                          unsigned char *nvm)
+
+static int smiapp_read_nvm_page(struct smiapp_sensor *sensor, u32 p, u8 *nvm)
 {
-       u32 i, s, p, np, v;
-       int rval = 0, rval2;
+       unsigned int i;
+       int rval;
 
-       np = sensor->nvm_size / SMIAPP_NVM_PAGE_SIZE;
-       for (p = 0; p < np; p++) {
-               rval = smiapp_write(
+       rval = smiapp_write(sensor,
+                           SMIAPP_REG_U8_DATA_TRANSFER_IF_1_PAGE_SELECT, p);
+       if (rval)
+               return rval;
+
+       rval = smiapp_write(sensor, SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL,
+                           SMIAPP_DATA_TRANSFER_IF_1_CTRL_EN);
+       if (rval)
+               return rval;
+
+       for (i = 1000; i > 0; i--) {
+               u32 s;
+
+               rval = smiapp_read(
                        sensor,
-                       SMIAPP_REG_U8_DATA_TRANSFER_IF_1_PAGE_SELECT, p);
-               if (rval)
-                       goto out;
+                       SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS, &s);
 
-               rval = smiapp_write(sensor,
-                                   SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL,
-                                   SMIAPP_DATA_TRANSFER_IF_1_CTRL_EN);
                if (rval)
-                       goto out;
+                       return rval;
 
-               for (i = 1000; i > 0; i--) {
-                       rval = smiapp_read(
-                               sensor,
-                               SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS, &s);
+               if (s & SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY)
+                       break;
+       }
+       if (!i)
+               return -ETIMEDOUT;
 
-                       if (rval)
-                               goto out;
+       for (i = 0; i < SMIAPP_NVM_PAGE_SIZE; i++) {
+               u32 v;
 
-                       if (s & SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY)
-                               break;
+               rval = smiapp_read(sensor,
+                                  SMIAPP_REG_U8_DATA_TRANSFER_IF_1_DATA_0 + i,
+                                  &v);
+               if (rval)
+                       return rval;
 
-               }
-               if (!i) {
-                       rval = -ETIMEDOUT;
-                       goto out;
-               }
+               *nvm++ = v;
+       }
 
-               for (i = 0; i < SMIAPP_NVM_PAGE_SIZE; i++) {
-                       rval = smiapp_read(
-                               sensor,
-                               SMIAPP_REG_U8_DATA_TRANSFER_IF_1_DATA_0 + i,
-                               &v);
-                       if (rval)
-                               goto out;
+       return 0;
+}
 
-                       *nvm++ = v;
-               }
+static int smiapp_read_nvm(struct smiapp_sensor *sensor,
+                          unsigned char *nvm)
+{
+       u32 p, np;
+       int rval = 0, rval2;
+
+       np = sensor->nvm_size / SMIAPP_NVM_PAGE_SIZE;
+       for (p = 0; p < np && !rval; p++) {
+               rval = smiapp_read_nvm_page(sensor, p, nvm);
+               nvm += SMIAPP_NVM_PAGE_SIZE;
        }
 
-out:
        rval2 = smiapp_write(sensor, SMIAPP_REG_U8_DATA_TRANSFER_IF_1_CTRL, 0);
        if (rval < 0)
                return rval;