media: smiapp: Obtain frame descriptor from CCS limits
authorSakari Ailus <sakari.ailus@linux.intel.com>
Mon, 10 Feb 2020 11:53:14 +0000 (12:53 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 2 Dec 2020 14:33:36 +0000 (15:33 +0100)
Obtain the frame descriptor from the CCS limits, instead of reading them
directly from the frame descriptor registers.

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 2c1a1350796546e97b302d7b456960bddaf5f93b..daeff6186727b233da3312a08529b70d71ad2fc3 100644 (file)
@@ -228,34 +228,29 @@ out_err:
 static int smiapp_read_frame_fmt(struct smiapp_sensor *sensor)
 {
        struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd);
-       u32 fmt_model_type, fmt_model_subtype, ncol_desc, nrow_desc;
+       u8 fmt_model_type, fmt_model_subtype, ncol_desc, nrow_desc;
        unsigned int i;
        int pixel_count = 0;
        int line_count = 0;
-       int rval;
-
-       rval = smiapp_read(sensor, SMIAPP_REG_U8_FRAME_FORMAT_MODEL_TYPE,
-                          &fmt_model_type);
-       if (rval)
-               return rval;
 
-       rval = smiapp_read(sensor, SMIAPP_REG_U8_FRAME_FORMAT_MODEL_SUBTYPE,
-                          &fmt_model_subtype);
-       if (rval)
-               return rval;
+       fmt_model_type = CCS_LIM(sensor, FRAME_FORMAT_MODEL_TYPE);
+       fmt_model_subtype = CCS_LIM(sensor, FRAME_FORMAT_MODEL_SUBTYPE);
 
        ncol_desc = (fmt_model_subtype
-                    & SMIAPP_FRAME_FORMAT_MODEL_SUBTYPE_NCOLS_MASK)
-               >> SMIAPP_FRAME_FORMAT_MODEL_SUBTYPE_NCOLS_SHIFT;
+                    & CCS_FRAME_FORMAT_MODEL_SUBTYPE_COLUMNS_MASK)
+               >> CCS_FRAME_FORMAT_MODEL_SUBTYPE_COLUMNS_SHIFT;
        nrow_desc = fmt_model_subtype
-               & SMIAPP_FRAME_FORMAT_MODEL_SUBTYPE_NROWS_MASK;
+               & CCS_FRAME_FORMAT_MODEL_SUBTYPE_ROWS_MASK;
 
        dev_dbg(&client->dev, "format_model_type %s\n",
-               fmt_model_type == SMIAPP_FRAME_FORMAT_MODEL_TYPE_2BYTE
+               fmt_model_type == CCS_FRAME_FORMAT_MODEL_TYPE_2_BYTE
                ? "2 byte" :
-               fmt_model_type == SMIAPP_FRAME_FORMAT_MODEL_TYPE_4BYTE
+               fmt_model_type == CCS_FRAME_FORMAT_MODEL_TYPE_4_BYTE
                ? "4 byte" : "is simply bad");
 
+       dev_dbg(&client->dev, "%u column and %u row descriptors\n",
+               ncol_desc, nrow_desc);
+
        for (i = 0; i < ncol_desc + nrow_desc; i++) {
                u32 desc;
                u32 pixelcode;
@@ -264,29 +259,24 @@ static int smiapp_read_frame_fmt(struct smiapp_sensor *sensor)
                char *what;
                u32 reg;
 
-               if (fmt_model_type == SMIAPP_FRAME_FORMAT_MODEL_TYPE_2BYTE) {
-                       reg = SMIAPP_REG_U16_FRAME_FORMAT_DESCRIPTOR_2(i);
-                       rval = smiapp_read(sensor, reg, &desc);
-                       if (rval)
-                               return rval;
+               if (fmt_model_type == CCS_FRAME_FORMAT_MODEL_TYPE_2_BYTE) {
+                       desc = CCS_LIM_AT(sensor, FRAME_FORMAT_DESCRIPTOR, i);
 
                        pixelcode =
                                (desc
-                                & SMIAPP_FRAME_FORMAT_DESC_2_PIXELCODE_MASK)
-                               >> SMIAPP_FRAME_FORMAT_DESC_2_PIXELCODE_SHIFT;
-                       pixels = desc & SMIAPP_FRAME_FORMAT_DESC_2_PIXELS_MASK;
+                                & CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_MASK)
+                               >> CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_SHIFT;
+                       pixels = desc & CCS_FRAME_FORMAT_DESCRIPTOR_PIXELS_MASK;
                } else if (fmt_model_type
-                          == SMIAPP_FRAME_FORMAT_MODEL_TYPE_4BYTE) {
-                       reg = SMIAPP_REG_U32_FRAME_FORMAT_DESCRIPTOR_4(i);
-                       rval = smiapp_read(sensor, reg, &desc);
-                       if (rval)
-                               return rval;
+                          == CCS_FRAME_FORMAT_MODEL_TYPE_4_BYTE) {
+                       desc = CCS_LIM_AT(sensor, FRAME_FORMAT_DESCRIPTOR_4, i);
 
                        pixelcode =
                                (desc
-                                & SMIAPP_FRAME_FORMAT_DESC_4_PIXELCODE_MASK)
-                               >> SMIAPP_FRAME_FORMAT_DESC_4_PIXELCODE_SHIFT;
-                       pixels = desc & SMIAPP_FRAME_FORMAT_DESC_4_PIXELS_MASK;
+                                & CCS_FRAME_FORMAT_DESCRIPTOR_4_PCODE_MASK)
+                               >> CCS_FRAME_FORMAT_DESCRIPTOR_4_PCODE_SHIFT;
+                       pixels = desc &
+                               CCS_FRAME_FORMAT_DESCRIPTOR_4_PIXELS_MASK;
                } else {
                        dev_dbg(&client->dev,
                                "invalid frame format model type %d\n",
@@ -300,19 +290,19 @@ static int smiapp_read_frame_fmt(struct smiapp_sensor *sensor)
                        which = "rows";
 
                switch (pixelcode) {
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_EMBEDDED:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_EMBEDDED:
                        what = "embedded";
                        break;
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_DUMMY:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_DUMMY_PIXEL:
                        what = "dummy";
                        break;
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_BLACK:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_BLACK_PIXEL:
                        what = "black";
                        break;
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_DARK:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_DARK_PIXEL:
                        what = "dark";
                        break;
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_VISIBLE:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_VISIBLE_PIXEL:
                        what = "visible";
                        break;
                default:
@@ -326,7 +316,7 @@ static int smiapp_read_frame_fmt(struct smiapp_sensor *sensor)
 
                if (i < ncol_desc) {
                        if (pixelcode ==
-                           SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_VISIBLE)
+                           CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_VISIBLE_PIXEL)
                                sensor->visible_pixel_start = pixel_count;
                        pixel_count += pixels;
                        continue;
@@ -334,13 +324,13 @@ static int smiapp_read_frame_fmt(struct smiapp_sensor *sensor)
 
                /* Handle row descriptors */
                switch (pixelcode) {
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_EMBEDDED:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_EMBEDDED:
                        if (sensor->embedded_end)
                                break;
                        sensor->embedded_start = line_count;
                        sensor->embedded_end = line_count + pixels;
                        break;
-               case SMIAPP_FRAME_FORMAT_DESC_PIXELCODE_VISIBLE:
+               case CCS_FRAME_FORMAT_DESCRIPTOR_PCODE_VISIBLE_PIXEL:
                        sensor->image_start = line_count;
                        break;
                }