media: imx: imx7_mipi_csis: Store CSI-2 data type in format structure
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>
This commit is contained in:
parent
492d418c08
commit
3acb88893a
@ -170,13 +170,7 @@
|
||||
#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 */
|
||||
@ -223,6 +217,25 @@
|
||||
|
||||
#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 */
|
||||
|
Loading…
Reference in New Issue
Block a user