media: imx: imx7_mipi_csis: Store CSI-2 data type in format structure
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 13 Apr 2021 02:30:01 +0000 (04:30 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sun, 23 May 2021 17:21:32 +0000 (19:21 +0200)
Replace the register value stored in the csis_pix_format structure with
the CSI-2 data type. The register value is simply computed from the data
type using a shift. This prepares for i.MX8MP support that needs the
same data type in a different hardware register.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Rui Miguel Silva <rmfrfs@gmail.com>
Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/imx/imx7-mipi-csis.c

index e01838931e6faa01f634362644ea2c56b5c1c218..1036e39ce0abaf50ef2d70ede81ddc2cdfeb34ba 100644 (file)
 #define MIPI_CSIS_ISPCFG_PIXEL_MODE_DUAL       (1 << 12)
 #define MIPI_CSIS_ISPCFG_PIXEL_MODE_QUAD       (2 << 12)       /* i.MX8M[MNP] only */
 #define MIPI_CSIS_ISPCFG_ALIGN_32BIT           BIT(11)
-#define MIPI_CSIS_ISPCFG_FMT_YCBCR422_8BIT     (0x1e << 2)
-#define MIPI_CSIS_ISPCFG_FMT_RAW8              (0x2a << 2)
-#define MIPI_CSIS_ISPCFG_FMT_RAW10             (0x2b << 2)
-#define MIPI_CSIS_ISPCFG_FMT_RAW12             (0x2c << 2)
-#define MIPI_CSIS_ISPCFG_FMT_RAW14             (0x2d << 2)
-/* User defined formats, x = 1...4 */
-#define MIPI_CSIS_ISPCFG_FMT_USER(x)           ((0x30 + (x) - 1) << 2)
+#define MIPI_CSIS_ISPCFG_FMT(fmt)              ((fmt) << 2)
 #define MIPI_CSIS_ISPCFG_FMT_MASK              (0x3f << 2)
 
 /* ISP Image Resolution register */
 
 #define DEFAULT_SCLK_CSIS_FREQ                 166000000UL
 
+/* MIPI CSI-2 Data Types */
+#define MIPI_CSI2_DATA_TYPE_YUV420_8           0x18
+#define MIPI_CSI2_DATA_TYPE_YUV420_10          0x19
+#define MIPI_CSI2_DATA_TYPE_LE_YUV420_8                0x1a
+#define MIPI_CSI2_DATA_TYPE_CS_YUV420_8                0x1c
+#define MIPI_CSI2_DATA_TYPE_CS_YUV420_10       0x1d
+#define MIPI_CSI2_DATA_TYPE_YUV422_8           0x1e
+#define MIPI_CSI2_DATA_TYPE_YUV422_10          0x1f
+#define MIPI_CSI2_DATA_TYPE_RGB565             0x22
+#define MIPI_CSI2_DATA_TYPE_RGB666             0x23
+#define MIPI_CSI2_DATA_TYPE_RGB888             0x24
+#define MIPI_CSI2_DATA_TYPE_RAW6               0x28
+#define MIPI_CSI2_DATA_TYPE_RAW7               0x29
+#define MIPI_CSI2_DATA_TYPE_RAW8               0x2a
+#define MIPI_CSI2_DATA_TYPE_RAW10              0x2b
+#define MIPI_CSI2_DATA_TYPE_RAW12              0x2c
+#define MIPI_CSI2_DATA_TYPE_RAW14              0x2d
+#define MIPI_CSI2_DATA_TYPE_USER(x)            (0x30 + (x))
+
 enum {
        ST_POWERED      = 1,
        ST_STREAMING    = 2,
@@ -324,7 +337,7 @@ struct csi_state {
 
 struct csis_pix_format {
        u32 code;
-       u32 fmt_reg;
+       u32 data_type;
        u8 width;
 };
 
@@ -332,85 +345,85 @@ static const struct csis_pix_format mipi_csis_formats[] = {
        /* YUV formats. */
        {
                .code = MEDIA_BUS_FMT_UYVY8_1X16,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_YCBCR422_8BIT,
+               .data_type = MIPI_CSI2_DATA_TYPE_YUV422_8,
                .width = 16,
        },
        /* RAW (Bayer and greyscale) formats. */
        {
                .code = MEDIA_BUS_FMT_SBGGR8_1X8,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW8,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW8,
                .width = 8,
        }, {
                .code = MEDIA_BUS_FMT_SGBRG8_1X8,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW8,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW8,
                .width = 8,
        }, {
                .code = MEDIA_BUS_FMT_SGRBG8_1X8,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW8,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW8,
                .width = 8,
        }, {
                .code = MEDIA_BUS_FMT_SRGGB8_1X8,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW8,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW8,
                .width = 8,
        }, {
                .code = MEDIA_BUS_FMT_Y8_1X8,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW8,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW8,
                .width = 8,
        }, {
                .code = MEDIA_BUS_FMT_SBGGR10_1X10,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW10,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW10,
                .width = 10,
        }, {
                .code = MEDIA_BUS_FMT_SGBRG10_1X10,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW10,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW10,
                .width = 10,
        }, {
                .code = MEDIA_BUS_FMT_SGRBG10_1X10,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW10,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW10,
                .width = 10,
        }, {
                .code = MEDIA_BUS_FMT_SRGGB10_1X10,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW10,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW10,
                .width = 10,
        }, {
                .code = MEDIA_BUS_FMT_Y10_1X10,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW10,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW10,
                .width = 10,
        }, {
                .code = MEDIA_BUS_FMT_SBGGR12_1X12,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW12,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW12,
                .width = 12,
        }, {
                .code = MEDIA_BUS_FMT_SGBRG12_1X12,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW12,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW12,
                .width = 12,
        }, {
                .code = MEDIA_BUS_FMT_SGRBG12_1X12,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW12,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW12,
                .width = 12,
        }, {
                .code = MEDIA_BUS_FMT_SRGGB12_1X12,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW12,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW12,
                .width = 12,
        }, {
                .code = MEDIA_BUS_FMT_Y12_1X12,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW12,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW12,
                .width = 12,
        }, {
                .code = MEDIA_BUS_FMT_SBGGR14_1X14,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW14,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW14,
                .width = 14,
        }, {
                .code = MEDIA_BUS_FMT_SGBRG14_1X14,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW14,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW14,
                .width = 14,
        }, {
                .code = MEDIA_BUS_FMT_SGRBG14_1X14,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW14,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW14,
                .width = 14,
        }, {
                .code = MEDIA_BUS_FMT_SRGGB14_1X14,
-               .fmt_reg = MIPI_CSIS_ISPCFG_FMT_RAW14,
+               .data_type = MIPI_CSI2_DATA_TYPE_RAW14,
                .width = 14,
        }
 };
@@ -502,7 +515,7 @@ static void __mipi_csis_set_format(struct csi_state *state)
        /* Color format */
        val = mipi_csis_read(state, MIPI_CSIS_ISP_CONFIG_CH(0));
        val &= ~(MIPI_CSIS_ISPCFG_ALIGN_32BIT | MIPI_CSIS_ISPCFG_FMT_MASK);
-       val |= state->csis_fmt->fmt_reg;
+       val |= MIPI_CSIS_ISPCFG_FMT(state->csis_fmt->data_type);
        mipi_csis_write(state, MIPI_CSIS_ISP_CONFIG_CH(0), val);
 
        /* Pixel resolution */