* [PATCH 1/5] media: imx8-isi: Reorder mxc_imx95_data to follow mxc_imx93_data
2026-08-26 4:55 [PATCH 0/5] media: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
@ 2026-08-26 4:55 ` Guoniu Zhou
2026-08-26 16:02 ` Frank Li
2026-08-26 4:55 ` [PATCH 2/5] media: imx8-isi: Use per-platform format_mask for output format field Guoniu Zhou
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Guoniu Zhou @ 2026-08-26 4:55 UTC (permalink / raw)
To: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain
Cc: linux-media, imx, linux-arm-kernel, linux-kernel, devicetree,
Guoniu Zhou
Move mxc_imx95_data definition after mxc_imx93_data to match the
order defined in the of_match array.
Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
---
.../media/platform/nxp/imx8-isi/imx8-isi-core.c | 24 +++++++++++-----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
index 0ae5f35e017c..f2a8eb82fbfd 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
@@ -314,18 +314,6 @@ static const struct mxc_isi_plat_data mxc_imx8mp_data = {
.has_36bit_dma = true,
};
-static const struct mxc_isi_plat_data mxc_imx95_data = {
- .model = MXC_ISI_IMX95,
- .num_ports = 4,
- .num_channels = 8,
- .num_vc = 8,
- .reg_offset = 0x10000,
- .ier_reg = &mxc_imx8_isi_ier_v2,
- .set_thd = &mxc_imx8_isi_thd_v1,
- .buf_active_reverse = true,
- .has_36bit_dma = true,
-};
-
static const struct mxc_isi_plat_data mxc_imx8qm_data = {
.model = MXC_ISI_IMX8QM,
.num_ports = 5,
@@ -384,6 +372,18 @@ static const struct mxc_isi_plat_data mxc_imx93_data = {
.has_36bit_dma = false,
};
+static const struct mxc_isi_plat_data mxc_imx95_data = {
+ .model = MXC_ISI_IMX95,
+ .num_ports = 4,
+ .num_channels = 8,
+ .num_vc = 8,
+ .reg_offset = 0x10000,
+ .ier_reg = &mxc_imx8_isi_ier_v2,
+ .set_thd = &mxc_imx8_isi_thd_v1,
+ .buf_active_reverse = true,
+ .has_36bit_dma = true,
+};
+
/* -----------------------------------------------------------------------------
* Power management
*/
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 1/5] media: imx8-isi: Reorder mxc_imx95_data to follow mxc_imx93_data
2026-08-26 4:55 ` [PATCH 1/5] media: imx8-isi: Reorder mxc_imx95_data to follow mxc_imx93_data Guoniu Zhou
@ 2026-08-26 16:02 ` Frank Li
0 siblings, 0 replies; 11+ messages in thread
From: Frank Li @ 2026-08-26 16:02 UTC (permalink / raw)
To: Guoniu Zhou
Cc: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain, linux-media, imx,
linux-arm-kernel, linux-kernel, devicetree
On Wed, Aug 26, 2026 at 12:55:42PM +0800, Guoniu Zhou wrote:
> Move mxc_imx95_data definition after mxc_imx93_data to match the
> order defined in the of_match array.
>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
> .../media/platform/nxp/imx8-isi/imx8-isi-core.c | 24 +++++++++++-----------
> 1 file changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> index 0ae5f35e017c..f2a8eb82fbfd 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> @@ -314,18 +314,6 @@ static const struct mxc_isi_plat_data mxc_imx8mp_data = {
> .has_36bit_dma = true,
> };
>
> -static const struct mxc_isi_plat_data mxc_imx95_data = {
> - .model = MXC_ISI_IMX95,
> - .num_ports = 4,
> - .num_channels = 8,
> - .num_vc = 8,
> - .reg_offset = 0x10000,
> - .ier_reg = &mxc_imx8_isi_ier_v2,
> - .set_thd = &mxc_imx8_isi_thd_v1,
> - .buf_active_reverse = true,
> - .has_36bit_dma = true,
> -};
> -
> static const struct mxc_isi_plat_data mxc_imx8qm_data = {
> .model = MXC_ISI_IMX8QM,
> .num_ports = 5,
> @@ -384,6 +372,18 @@ static const struct mxc_isi_plat_data mxc_imx93_data = {
> .has_36bit_dma = false,
> };
>
> +static const struct mxc_isi_plat_data mxc_imx95_data = {
> + .model = MXC_ISI_IMX95,
> + .num_ports = 4,
> + .num_channels = 8,
> + .num_vc = 8,
> + .reg_offset = 0x10000,
> + .ier_reg = &mxc_imx8_isi_ier_v2,
> + .set_thd = &mxc_imx8_isi_thd_v1,
> + .buf_active_reverse = true,
> + .has_36bit_dma = true,
> +};
> +
> /* -----------------------------------------------------------------------------
> * Power management
> */
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/5] media: imx8-isi: Use per-platform format_mask for output format field
2026-08-26 4:55 [PATCH 0/5] media: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
2026-08-26 4:55 ` [PATCH 1/5] media: imx8-isi: Reorder mxc_imx95_data to follow mxc_imx93_data Guoniu Zhou
@ 2026-08-26 4:55 ` Guoniu Zhou
2026-08-26 16:03 ` Frank Li
2026-08-26 4:55 ` [PATCH 3/5] media: dt-bindings: nxp,imx8-isi: Add i.MX952 ISI compatible string Guoniu Zhou
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Guoniu Zhou @ 2026-08-26 4:55 UTC (permalink / raw)
To: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain
Cc: linux-media, imx, linux-arm-kernel, linux-kernel, devicetree,
Guoniu Zhou
The ISI output format field width differs across SoC generations:
i.MX8 series (MN/MP/QM/QXP) use a 6-bit field (bits 29:24), while
from i.MX8ULP onwards (including i.MX91/93/95/952) the field is
extended to 7 bits (bits 30:24) to support RAW32 and RAW14 formats.
Replace the static CHNL_IMG_CTRL_FORMAT_MASK with a per-platform
format_mask in mxc_isi_plat_data to correctly match the hardware
format field width for each SoC.
Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
---
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c | 8 ++++++++
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 1 +
drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c | 3 ++-
drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h | 1 -
4 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
index f2a8eb82fbfd..c1c16dbc1539 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
@@ -297,6 +297,7 @@ static const struct mxc_isi_plat_data mxc_imx8mn_data = {
.reg_offset = 0,
.ier_reg = &mxc_imx8_isi_ier_v1,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(29, 24),
.buf_active_reverse = false,
.gasket_ops = &mxc_imx8_gasket_ops,
.has_36bit_dma = false,
@@ -309,6 +310,7 @@ static const struct mxc_isi_plat_data mxc_imx8mp_data = {
.reg_offset = 0x2000,
.ier_reg = &mxc_imx8_isi_ier_v2,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(29, 24),
.buf_active_reverse = true,
.gasket_ops = &mxc_imx8_gasket_ops,
.has_36bit_dma = true,
@@ -322,6 +324,7 @@ static const struct mxc_isi_plat_data mxc_imx8qm_data = {
.reg_offset = 0x10000,
.ier_reg = &mxc_imx8_isi_ier_qm,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(29, 24),
.buf_active_reverse = true,
.has_36bit_dma = false,
};
@@ -334,6 +337,7 @@ static const struct mxc_isi_plat_data mxc_imx8qxp_data = {
.reg_offset = 0x10000,
.ier_reg = &mxc_imx8_isi_ier_v2,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(29, 24),
.buf_active_reverse = true,
.has_36bit_dma = false,
};
@@ -345,6 +349,7 @@ static const struct mxc_isi_plat_data mxc_imx8ulp_data = {
.reg_offset = 0x0,
.ier_reg = &mxc_imx8_isi_ier_v2,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(30, 24),
.buf_active_reverse = true,
.has_36bit_dma = false,
};
@@ -356,6 +361,7 @@ static const struct mxc_isi_plat_data mxc_imx91_data = {
.reg_offset = 0,
.ier_reg = &mxc_imx8_isi_ier_v2,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(30, 24),
.buf_active_reverse = true,
.has_36bit_dma = false,
};
@@ -367,6 +373,7 @@ static const struct mxc_isi_plat_data mxc_imx93_data = {
.reg_offset = 0,
.ier_reg = &mxc_imx8_isi_ier_v2,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(30, 24),
.buf_active_reverse = true,
.gasket_ops = &mxc_imx93_gasket_ops,
.has_36bit_dma = false,
@@ -380,6 +387,7 @@ static const struct mxc_isi_plat_data mxc_imx95_data = {
.reg_offset = 0x10000,
.ier_reg = &mxc_imx8_isi_ier_v2,
.set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(30, 24),
.buf_active_reverse = true,
.has_36bit_dma = true,
};
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
index 58b47335afc7..05c21c448b93 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
@@ -175,6 +175,7 @@ struct mxc_isi_plat_data {
const struct mxc_isi_ier_reg *ier_reg;
const struct mxc_isi_set_thd *set_thd;
const struct mxc_gasket_ops *gasket_ops;
+ u32 format_mask;
bool buf_active_reverse;
bool has_36bit_dma;
};
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
index 6aa760ce3605..2405f7d33d0a 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
@@ -410,13 +410,14 @@ void mxc_isi_channel_set_output_format(struct mxc_isi_pipe *pipe,
const struct mxc_isi_format_info *info,
struct v4l2_pix_format_mplane *format)
{
+ const struct mxc_isi_plat_data *pdata = pipe->isi->pdata;
u32 val;
/* set outbuf format */
dev_dbg(pipe->isi->dev, "output format %p4cc", &format->pixelformat);
val = mxc_isi_read(pipe, CHNL_IMG_CTRL);
- val &= ~CHNL_IMG_CTRL_FORMAT_MASK;
+ val &= ~pdata->format_mask;
val |= CHNL_IMG_CTRL_FORMAT(info->isi_out_format);
mxc_isi_write(pipe, CHNL_IMG_CTRL, val);
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
index e795f4daf3ff..7c4e736f4651 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
@@ -39,7 +39,6 @@
/* Channel Image Control Register */
#define CHNL_IMG_CTRL 0x0004
#define CHNL_IMG_CTRL_FORMAT(n) ((n) << 24)
-#define CHNL_IMG_CTRL_FORMAT_MASK GENMASK(29, 24)
#define CHNL_IMG_CTRL_FORMAT_RGBA8888 0x00
#define CHNL_IMG_CTRL_FORMAT_ABGR8888 0x01
#define CHNL_IMG_CTRL_FORMAT_ARGB8888 0x02
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 2/5] media: imx8-isi: Use per-platform format_mask for output format field
2026-08-26 4:55 ` [PATCH 2/5] media: imx8-isi: Use per-platform format_mask for output format field Guoniu Zhou
@ 2026-08-26 16:03 ` Frank Li
0 siblings, 0 replies; 11+ messages in thread
From: Frank Li @ 2026-08-26 16:03 UTC (permalink / raw)
To: Guoniu Zhou
Cc: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain, linux-media, imx,
linux-arm-kernel, linux-kernel, devicetree
On Wed, Aug 26, 2026 at 12:55:43PM +0800, Guoniu Zhou wrote:
> The ISI output format field width differs across SoC generations:
> i.MX8 series (MN/MP/QM/QXP) use a 6-bit field (bits 29:24), while
> from i.MX8ULP onwards (including i.MX91/93/95/952) the field is
> extended to 7 bits (bits 30:24) to support RAW32 and RAW14 formats.
>
> Replace the static CHNL_IMG_CTRL_FORMAT_MASK with a per-platform
> format_mask in mxc_isi_plat_data to correctly match the hardware
> format field width for each SoC.
>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
> drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c | 8 ++++++++
> drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 1 +
> drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c | 3 ++-
> drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h | 1 -
> 4 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> index f2a8eb82fbfd..c1c16dbc1539 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> @@ -297,6 +297,7 @@ static const struct mxc_isi_plat_data mxc_imx8mn_data = {
> .reg_offset = 0,
> .ier_reg = &mxc_imx8_isi_ier_v1,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(29, 24),
> .buf_active_reverse = false,
> .gasket_ops = &mxc_imx8_gasket_ops,
> .has_36bit_dma = false,
> @@ -309,6 +310,7 @@ static const struct mxc_isi_plat_data mxc_imx8mp_data = {
> .reg_offset = 0x2000,
> .ier_reg = &mxc_imx8_isi_ier_v2,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(29, 24),
> .buf_active_reverse = true,
> .gasket_ops = &mxc_imx8_gasket_ops,
> .has_36bit_dma = true,
> @@ -322,6 +324,7 @@ static const struct mxc_isi_plat_data mxc_imx8qm_data = {
> .reg_offset = 0x10000,
> .ier_reg = &mxc_imx8_isi_ier_qm,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(29, 24),
> .buf_active_reverse = true,
> .has_36bit_dma = false,
> };
> @@ -334,6 +337,7 @@ static const struct mxc_isi_plat_data mxc_imx8qxp_data = {
> .reg_offset = 0x10000,
> .ier_reg = &mxc_imx8_isi_ier_v2,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(29, 24),
> .buf_active_reverse = true,
> .has_36bit_dma = false,
> };
> @@ -345,6 +349,7 @@ static const struct mxc_isi_plat_data mxc_imx8ulp_data = {
> .reg_offset = 0x0,
> .ier_reg = &mxc_imx8_isi_ier_v2,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(30, 24),
> .buf_active_reverse = true,
> .has_36bit_dma = false,
> };
> @@ -356,6 +361,7 @@ static const struct mxc_isi_plat_data mxc_imx91_data = {
> .reg_offset = 0,
> .ier_reg = &mxc_imx8_isi_ier_v2,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(30, 24),
> .buf_active_reverse = true,
> .has_36bit_dma = false,
> };
> @@ -367,6 +373,7 @@ static const struct mxc_isi_plat_data mxc_imx93_data = {
> .reg_offset = 0,
> .ier_reg = &mxc_imx8_isi_ier_v2,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(30, 24),
> .buf_active_reverse = true,
> .gasket_ops = &mxc_imx93_gasket_ops,
> .has_36bit_dma = false,
> @@ -380,6 +387,7 @@ static const struct mxc_isi_plat_data mxc_imx95_data = {
> .reg_offset = 0x10000,
> .ier_reg = &mxc_imx8_isi_ier_v2,
> .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(30, 24),
> .buf_active_reverse = true,
> .has_36bit_dma = true,
> };
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> index 58b47335afc7..05c21c448b93 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> @@ -175,6 +175,7 @@ struct mxc_isi_plat_data {
> const struct mxc_isi_ier_reg *ier_reg;
> const struct mxc_isi_set_thd *set_thd;
> const struct mxc_gasket_ops *gasket_ops;
> + u32 format_mask;
> bool buf_active_reverse;
> bool has_36bit_dma;
> };
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
> index 6aa760ce3605..2405f7d33d0a 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
> @@ -410,13 +410,14 @@ void mxc_isi_channel_set_output_format(struct mxc_isi_pipe *pipe,
> const struct mxc_isi_format_info *info,
> struct v4l2_pix_format_mplane *format)
> {
> + const struct mxc_isi_plat_data *pdata = pipe->isi->pdata;
> u32 val;
>
> /* set outbuf format */
> dev_dbg(pipe->isi->dev, "output format %p4cc", &format->pixelformat);
>
> val = mxc_isi_read(pipe, CHNL_IMG_CTRL);
> - val &= ~CHNL_IMG_CTRL_FORMAT_MASK;
> + val &= ~pdata->format_mask;
> val |= CHNL_IMG_CTRL_FORMAT(info->isi_out_format);
> mxc_isi_write(pipe, CHNL_IMG_CTRL, val);
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
> index e795f4daf3ff..7c4e736f4651 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
> @@ -39,7 +39,6 @@
> /* Channel Image Control Register */
> #define CHNL_IMG_CTRL 0x0004
> #define CHNL_IMG_CTRL_FORMAT(n) ((n) << 24)
> -#define CHNL_IMG_CTRL_FORMAT_MASK GENMASK(29, 24)
> #define CHNL_IMG_CTRL_FORMAT_RGBA8888 0x00
> #define CHNL_IMG_CTRL_FORMAT_ABGR8888 0x01
> #define CHNL_IMG_CTRL_FORMAT_ARGB8888 0x02
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/5] media: dt-bindings: nxp,imx8-isi: Add i.MX952 ISI compatible string
2026-08-26 4:55 [PATCH 0/5] media: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
2026-08-26 4:55 ` [PATCH 1/5] media: imx8-isi: Reorder mxc_imx95_data to follow mxc_imx93_data Guoniu Zhou
2026-08-26 4:55 ` [PATCH 2/5] media: imx8-isi: Use per-platform format_mask for output format field Guoniu Zhou
@ 2026-08-26 4:55 ` Guoniu Zhou
2026-08-26 16:18 ` Conor Dooley
2026-08-26 4:55 ` [PATCH 4/5] media: nxp: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
2026-08-26 4:55 ` [PATCH 5/5] media: imx8-isi: Enable ISI RAW10/12/14 output LSB alignment Guoniu Zhou
4 siblings, 1 reply; 11+ messages in thread
From: Guoniu Zhou @ 2026-08-26 4:55 UTC (permalink / raw)
To: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain
Cc: linux-media, imx, linux-arm-kernel, linux-kernel, devicetree,
Guoniu Zhou
The i.MX952 ISI is a minor silicon revision of the i.MX95 ISI,
primarily addressing RAW data alignment. The core functionality
remains identical, so the i.MX952 ISI shares the same DT binding
constraints as the i.MX95 ISI.
Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
---
Documentation/devicetree/bindings/media/nxp,imx8-isi.yaml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/media/nxp,imx8-isi.yaml b/Documentation/devicetree/bindings/media/nxp,imx8-isi.yaml
index 279c9cd3034a..313e27d2b039 100644
--- a/Documentation/devicetree/bindings/media/nxp,imx8-isi.yaml
+++ b/Documentation/devicetree/bindings/media/nxp,imx8-isi.yaml
@@ -25,6 +25,7 @@ properties:
- fsl,imx91-isi
- fsl,imx93-isi
- fsl,imx95-isi
+ - fsl,imx952-isi
reg:
maxItems: 1
@@ -128,7 +129,9 @@ allOf:
properties:
compatible:
contains:
- const: fsl,imx95-isi
+ enum:
+ - fsl,imx95-isi
+ - fsl,imx952-isi
then:
properties:
interrupts:
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 3/5] media: dt-bindings: nxp,imx8-isi: Add i.MX952 ISI compatible string
2026-08-26 4:55 ` [PATCH 3/5] media: dt-bindings: nxp,imx8-isi: Add i.MX952 ISI compatible string Guoniu Zhou
@ 2026-08-26 16:18 ` Conor Dooley
0 siblings, 0 replies; 11+ messages in thread
From: Conor Dooley @ 2026-08-26 16:18 UTC (permalink / raw)
To: Guoniu Zhou
Cc: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain, linux-media, imx,
linux-arm-kernel, linux-kernel, devicetree
[-- Attachment #1: Type: text/plain, Size: 412 bytes --]
On Wed, Aug 26, 2026 at 12:55:44PM +0800, Guoniu Zhou wrote:
> The i.MX952 ISI is a minor silicon revision of the i.MX95 ISI,
> primarily addressing RAW data alignment. The core functionality
> remains identical, so the i.MX952 ISI shares the same DT binding
> constraints as the i.MX95 ISI.
>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
pw-bot: changes-requested
(See driver re fallback)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 4/5] media: nxp: imx8-isi: Add i.MX952 ISI support
2026-08-26 4:55 [PATCH 0/5] media: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
` (2 preceding siblings ...)
2026-08-26 4:55 ` [PATCH 3/5] media: dt-bindings: nxp,imx8-isi: Add i.MX952 ISI compatible string Guoniu Zhou
@ 2026-08-26 4:55 ` Guoniu Zhou
2026-08-26 16:09 ` Frank Li
2026-08-26 4:55 ` [PATCH 5/5] media: imx8-isi: Enable ISI RAW10/12/14 output LSB alignment Guoniu Zhou
4 siblings, 1 reply; 11+ messages in thread
From: Guoniu Zhou @ 2026-08-26 4:55 UTC (permalink / raw)
To: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain
Cc: linux-media, imx, linux-arm-kernel, linux-kernel, devicetree,
Guoniu Zhou
The i.MX952 ISI is reused from the i.MX95 ISI with a minor silicon
revision. It can process up to 8 image sources simultaneously and
obtain image data from up to 4 pixel link sources.
Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
---
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c | 14 ++++++++++++++
drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 1 +
drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h | 2 +-
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
index c1c16dbc1539..5b19b581b38e 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
@@ -392,6 +392,19 @@ static const struct mxc_isi_plat_data mxc_imx95_data = {
.has_36bit_dma = true,
};
+static const struct mxc_isi_plat_data mxc_imx952_data = {
+ .model = MXC_ISI_IMX952,
+ .num_ports = 4,
+ .num_channels = 8,
+ .num_vc = 8,
+ .reg_offset = 0x10000,
+ .ier_reg = &mxc_imx8_isi_ier_v2,
+ .set_thd = &mxc_imx8_isi_thd_v1,
+ .format_mask = GENMASK(30, 24),
+ .buf_active_reverse = true,
+ .has_36bit_dma = true,
+};
+
/* -----------------------------------------------------------------------------
* Power management
*/
@@ -582,6 +595,7 @@ static const struct of_device_id mxc_isi_of_match[] = {
{ .compatible = "fsl,imx91-isi", .data = &mxc_imx91_data },
{ .compatible = "fsl,imx93-isi", .data = &mxc_imx93_data },
{ .compatible = "fsl,imx95-isi", .data = &mxc_imx95_data },
+ { .compatible = "fsl,imx952-isi", .data = &mxc_imx952_data },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, mxc_isi_of_match);
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
index 05c21c448b93..a4b638508522 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
@@ -164,6 +164,7 @@ enum model {
MXC_ISI_IMX91,
MXC_ISI_IMX93,
MXC_ISI_IMX95,
+ MXC_ISI_IMX952,
};
struct mxc_isi_plat_data {
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
index 7c4e736f4651..35dec3a650ac 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
@@ -22,7 +22,7 @@
#define CHNL_CTRL_SW_RST BIT(24)
/*
* CHNL_CTRL_BLANK_PXL: i.MX8{QM,QXP} only
- * CHNL_CTRL_VC_ID_1, CHNL_CTRL_VC_ID_1_MASK: i.MX95 only
+ * CHNL_CTRL_VC_ID_1, CHNL_CTRL_VC_ID_1_MASK: i.MX{95,952} only
*/
#define CHNL_CTRL_BLANK_PXL(n) FIELD_PREP(GENMASK(23, 16), (n))
#define CHNL_CTRL_VC_ID_1(n) FIELD_PREP(BIT(16), (n))
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH 4/5] media: nxp: imx8-isi: Add i.MX952 ISI support
2026-08-26 4:55 ` [PATCH 4/5] media: nxp: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
@ 2026-08-26 16:09 ` Frank Li
2026-08-26 16:18 ` Conor Dooley
0 siblings, 1 reply; 11+ messages in thread
From: Frank Li @ 2026-08-26 16:09 UTC (permalink / raw)
To: Guoniu Zhou
Cc: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain, linux-media, imx,
linux-arm-kernel, linux-kernel, devicetree
On Wed, Aug 26, 2026 at 12:55:45PM +0800, Guoniu Zhou wrote:
> The i.MX952 ISI is reused from the i.MX95 ISI with a minor silicon
> revision. It can process up to 8 image sources simultaneously and
> obtain image data from up to 4 pixel link sources.
>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
> ---
> drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c | 14 ++++++++++++++
> drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 1 +
> drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h | 2 +-
> 3 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> index c1c16dbc1539..5b19b581b38e 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> @@ -392,6 +392,19 @@ static const struct mxc_isi_plat_data mxc_imx95_data = {
> .has_36bit_dma = true,
> };
>
> +static const struct mxc_isi_plat_data mxc_imx952_data = {
> + .model = MXC_ISI_IMX952,
> + .num_ports = 4,
> + .num_channels = 8,
> + .num_vc = 8,
> + .reg_offset = 0x10000,
> + .ier_reg = &mxc_imx8_isi_ier_v2,
> + .set_thd = &mxc_imx8_isi_thd_v1,
> + .format_mask = GENMASK(30, 24),
> + .buf_active_reverse = true,
> + .has_36bit_dma = true,
> +};
> +
> /* -----------------------------------------------------------------------------
> * Power management
> */
> @@ -582,6 +595,7 @@ static const struct of_device_id mxc_isi_of_match[] = {
> { .compatible = "fsl,imx91-isi", .data = &mxc_imx91_data },
> { .compatible = "fsl,imx93-isi", .data = &mxc_imx93_data },
> { .compatible = "fsl,imx95-isi", .data = &mxc_imx95_data },
> + { .compatible = "fsl,imx952-isi", .data = &mxc_imx952_data },
It is the almost same as imx95 except model, I am not sure if model is
used in code.
why not fallback to fsl,imx95-isi.
compatible = "fsl,imx952-isi", "fsl,imx952-isi";
Frank
> { /* sentinel */ },
> };
> MODULE_DEVICE_TABLE(of, mxc_isi_of_match);
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> index 05c21c448b93..a4b638508522 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> @@ -164,6 +164,7 @@ enum model {
> MXC_ISI_IMX91,
> MXC_ISI_IMX93,
> MXC_ISI_IMX95,
> + MXC_ISI_IMX952,
> };
>
> struct mxc_isi_plat_data {
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
> index 7c4e736f4651..35dec3a650ac 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
> @@ -22,7 +22,7 @@
> #define CHNL_CTRL_SW_RST BIT(24)
> /*
> * CHNL_CTRL_BLANK_PXL: i.MX8{QM,QXP} only
> - * CHNL_CTRL_VC_ID_1, CHNL_CTRL_VC_ID_1_MASK: i.MX95 only
> + * CHNL_CTRL_VC_ID_1, CHNL_CTRL_VC_ID_1_MASK: i.MX{95,952} only
> */
> #define CHNL_CTRL_BLANK_PXL(n) FIELD_PREP(GENMASK(23, 16), (n))
> #define CHNL_CTRL_VC_ID_1(n) FIELD_PREP(BIT(16), (n))
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH 4/5] media: nxp: imx8-isi: Add i.MX952 ISI support
2026-08-26 16:09 ` Frank Li
@ 2026-08-26 16:18 ` Conor Dooley
0 siblings, 0 replies; 11+ messages in thread
From: Conor Dooley @ 2026-08-26 16:18 UTC (permalink / raw)
To: Frank Li
Cc: Guoniu Zhou, Laurent Pinchart, Frank Li, Mauro Carvalho Chehab,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain, linux-media, imx,
linux-arm-kernel, linux-kernel, devicetree
[-- Attachment #1: Type: text/plain, Size: 2224 bytes --]
On Wed, Aug 26, 2026 at 11:09:04AM -0500, Frank Li wrote:
> On Wed, Aug 26, 2026 at 12:55:45PM +0800, Guoniu Zhou wrote:
> > The i.MX952 ISI is reused from the i.MX95 ISI with a minor silicon
> > revision. It can process up to 8 image sources simultaneously and
> > obtain image data from up to 4 pixel link sources.
> >
> > Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
> > ---
> > drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c | 14 ++++++++++++++
> > drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h | 1 +
> > drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h | 2 +-
> > 3 files changed, 16 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> > index c1c16dbc1539..5b19b581b38e 100644
> > --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> > +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> > @@ -392,6 +392,19 @@ static const struct mxc_isi_plat_data mxc_imx95_data = {
> > .has_36bit_dma = true,
> > };
> >
> > +static const struct mxc_isi_plat_data mxc_imx952_data = {
> > + .model = MXC_ISI_IMX952,
> > + .num_ports = 4,
> > + .num_channels = 8,
> > + .num_vc = 8,
> > + .reg_offset = 0x10000,
> > + .ier_reg = &mxc_imx8_isi_ier_v2,
> > + .set_thd = &mxc_imx8_isi_thd_v1,
> > + .format_mask = GENMASK(30, 24),
> > + .buf_active_reverse = true,
> > + .has_36bit_dma = true,
> > +};
> > +
> > /* -----------------------------------------------------------------------------
> > * Power management
> > */
> > @@ -582,6 +595,7 @@ static const struct of_device_id mxc_isi_of_match[] = {
> > { .compatible = "fsl,imx91-isi", .data = &mxc_imx91_data },
> > { .compatible = "fsl,imx93-isi", .data = &mxc_imx93_data },
> > { .compatible = "fsl,imx95-isi", .data = &mxc_imx95_data },
> > + { .compatible = "fsl,imx952-isi", .data = &mxc_imx952_data },
>
> It is the almost same as imx95 except model, I am not sure if model is
> used in code.
>
> why not fallback to fsl,imx95-isi.
>
> compatible = "fsl,imx952-isi", "fsl,imx952-isi";
Typo here, but I agree - fallback to imx95-isi would be nice.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 5/5] media: imx8-isi: Enable ISI RAW10/12/14 output LSB alignment
2026-08-26 4:55 [PATCH 0/5] media: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
` (3 preceding siblings ...)
2026-08-26 4:55 ` [PATCH 4/5] media: nxp: imx8-isi: Add i.MX952 ISI support Guoniu Zhou
@ 2026-08-26 4:55 ` Guoniu Zhou
4 siblings, 0 replies; 11+ messages in thread
From: Guoniu Zhou @ 2026-08-26 4:55 UTC (permalink / raw)
To: Laurent Pinchart, Frank Li, Mauro Carvalho Chehab, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Loic Poulain
Cc: linux-media, imx, linux-arm-kernel, linux-kernel, devicetree,
Guoniu Zhou
V4L2 requires RAW formats to be LSB-aligned (right-aligned). Before
i.MX952, the ISI shifts RAW10/12/14 output left to MSB, so the driver
works around this by using RAW16 format instead.
The i.MX952 ISI introduces a RAW output LSB alignment bit. Enable it
along with the input MSB alignment on platforms that support this
feature, so that RAW10/12/14 output formats can be used directly
without the RAW16 workaround.
Signed-off-by: Guoniu Zhou <guoniu.zhou@oss.nxp.com>
---
.../media/platform/nxp/imx8-isi/imx8-isi-core.c | 1 +
.../media/platform/nxp/imx8-isi/imx8-isi-core.h | 1 +
drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c | 39 ++++++++++++++++++++-
.../media/platform/nxp/imx8-isi/imx8-isi-regs.h | 3 ++
.../media/platform/nxp/imx8-isi/imx8-isi-video.c | 40 +++++++++++-----------
5 files changed, 63 insertions(+), 21 deletions(-)
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
index 5b19b581b38e..439c7bdecfa8 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
@@ -403,6 +403,7 @@ static const struct mxc_isi_plat_data mxc_imx952_data = {
.format_mask = GENMASK(30, 24),
.buf_active_reverse = true,
.has_36bit_dma = true,
+ .raw_out_lsb = true,
};
/* -----------------------------------------------------------------------------
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
index a4b638508522..39dbb35bc4cc 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
@@ -179,6 +179,7 @@ struct mxc_isi_plat_data {
u32 format_mask;
bool buf_active_reverse;
bool has_36bit_dma;
+ bool raw_out_lsb;
};
struct mxc_isi_dma_buffer {
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
index 2405f7d33d0a..4838b445f279 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c
@@ -308,6 +308,7 @@ static void mxc_isi_channel_set_control(struct mxc_isi_pipe *pipe,
unsigned int vc,
bool bypass)
{
+ const struct mxc_isi_plat_data *pdata = pipe->isi->pdata;
u32 val;
mutex_lock(&pipe->lock);
@@ -357,6 +358,20 @@ static void mxc_isi_channel_set_control(struct mxc_isi_pipe *pipe,
val |= CHNL_CTRL_VC_ID_1(vc >> 2);
}
+ if (pdata->raw_out_lsb) {
+ /*
+ * Enable RAW10/12/14 output LSB alignment to match the
+ * V4L2 requirement that RAW formats are LSB-aligned.
+ */
+ val |= CHNL_CTRL_RAW_OUT_LSB_ALIGN;
+
+ /*
+ * Align the data selection from pixel link to MSB to
+ * avoid data shift since the data from PL is MSB.
+ */
+ val |= CHNL_CTRL_RAW_IN_MSB_ALIGN;
+ }
+
mxc_isi_write(pipe, CHNL_CTRL, val);
mutex_unlock(&pipe->lock);
@@ -406,11 +421,19 @@ void mxc_isi_channel_set_input_format(struct mxc_isi_pipe *pipe,
CHNL_IN_BUF_PITCH_LINE_PITCH(bpl));
}
+static bool isi_out_raw(u32 format)
+{
+ return format == CHNL_IMG_CTRL_FORMAT_RAW10 ||
+ format == CHNL_IMG_CTRL_FORMAT_RAW12 ||
+ format == CHNL_IMG_CTRL_FORMAT_RAW14;
+}
+
void mxc_isi_channel_set_output_format(struct mxc_isi_pipe *pipe,
const struct mxc_isi_format_info *info,
struct v4l2_pix_format_mplane *format)
{
const struct mxc_isi_plat_data *pdata = pipe->isi->pdata;
+ u32 fmt;
u32 val;
/* set outbuf format */
@@ -418,7 +441,21 @@ void mxc_isi_channel_set_output_format(struct mxc_isi_pipe *pipe,
val = mxc_isi_read(pipe, CHNL_IMG_CTRL);
val &= ~pdata->format_mask;
- val |= CHNL_IMG_CTRL_FORMAT(info->isi_out_format);
+
+ /*
+ * Before i.MX952, the ISI shifts the 10/12/14-bit formats left
+ * by 6, 4 and 2 bits when using CHNL_IMG_CTRL_FORMAT_RAW10/12/14
+ * respectively, to align the bits to the left and pad with zeros in
+ * the LSBs. The corresponding V4L2 formats are however right-aligned,
+ * we have to use CHNL_IMG_CTRL_FORMAT_RAW16 to avoid the left shift.
+ * After i.MX952, ISI add RAW10/12/14 LSB output alignment, so skip
+ * the above workaround.
+ */
+ fmt = !pdata->raw_out_lsb && isi_out_raw(info->isi_out_format) ?
+ CHNL_IMG_CTRL_FORMAT_RAW16 :
+ info->isi_out_format;
+
+ val |= CHNL_IMG_CTRL_FORMAT(fmt);
mxc_isi_write(pipe, CHNL_IMG_CTRL, val);
/* line pitch */
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
index 35dec3a650ac..c9c22a3668f9 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h
@@ -20,6 +20,8 @@
#define CHNL_CTRL_CHAIN_BUF_NO_CHAIN 0
#define CHNL_CTRL_CHAIN_BUF_2_CHAIN 1
#define CHNL_CTRL_SW_RST BIT(24)
+#define CHNL_CTRL_RAW_OUT_LSB_ALIGN BIT(23) /* i.MX952 only */
+#define CHNL_CTRL_RAW_IN_MSB_ALIGN BIT(22) /* i.MX{91,93,95,952} only */
/*
* CHNL_CTRL_BLANK_PXL: i.MX8{QM,QXP} only
* CHNL_CTRL_VC_ID_1, CHNL_CTRL_VC_ID_1_MASK: i.MX{95,952} only
@@ -88,6 +90,7 @@
#define CHNL_IMG_CTRL_FORMAT_YUV420_3P10P 0x3a
#define CHNL_IMG_CTRL_FORMAT_YUV420_2P12 0x3d
#define CHNL_IMG_CTRL_FORMAT_YUV420_3P12 0x3e
+#define CHNL_IMG_CTRL_FORMAT_RAW14 0x41 /* i.MX{8ULP,91,93,95,952} only */
#define CHNL_IMG_CTRL_GBL_ALPHA_VAL(n) ((n) << 16)
#define CHNL_IMG_CTRL_GBL_ALPHA_VAL_MASK GENMASK(23, 16)
#define CHNL_IMG_CTRL_GBL_ALPHA_EN BIT(15)
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
index f45c2aae59ce..9a6a8302774c 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
@@ -221,11 +221,11 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
/*
* RAW formats
*
- * The ISI shifts the 10-bit and 12-bit formats left by 6 and 4 bits
- * when using CHNL_IMG_CTRL_FORMAT_RAW10 or MXC_ISI_OUT_FMT_RAW12
- * respectively, to align the bits to the left and pad with zeros in
- * the LSBs. The corresponding V4L2 formats are however right-aligned,
- * we have to use CHNL_IMG_CTRL_FORMAT_RAW16 to avoid the left shift.
+ * The format entries use the native RAW10/12/14 ISI format codes.
+ * On platforms without hardware LSB alignment, the driver
+ * substitutes RAW16 at runtime in
+ * mxc_isi_channel_set_output_format() to avoid the left shift
+ * that the ISI applies to RAW10/12/14 output.
*/
{
.mbus_code = MEDIA_BUS_FMT_Y8_1X8,
@@ -240,7 +240,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_Y10_1X10,
.fourcc = V4L2_PIX_FMT_Y10,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW10,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -249,7 +249,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_Y12_1X12,
.fourcc = V4L2_PIX_FMT_Y12,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW12,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -258,7 +258,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_Y14_1X14,
.fourcc = V4L2_PIX_FMT_Y14,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW14,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -312,7 +312,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,
.fourcc = V4L2_PIX_FMT_SBGGR10,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW10,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -321,7 +321,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SGBRG10_1X10,
.fourcc = V4L2_PIX_FMT_SGBRG10,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW10,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -330,7 +330,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SGRBG10_1X10,
.fourcc = V4L2_PIX_FMT_SGRBG10,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW10,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -339,7 +339,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,
.fourcc = V4L2_PIX_FMT_SRGGB10,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW10,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -348,7 +348,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SBGGR12_1X12,
.fourcc = V4L2_PIX_FMT_SBGGR12,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW12,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -357,7 +357,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SGBRG12_1X12,
.fourcc = V4L2_PIX_FMT_SGBRG12,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW12,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -366,7 +366,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SGRBG12_1X12,
.fourcc = V4L2_PIX_FMT_SGRBG12,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW12,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -375,7 +375,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SRGGB12_1X12,
.fourcc = V4L2_PIX_FMT_SRGGB12,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW12,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -384,7 +384,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SBGGR14_1X14,
.fourcc = V4L2_PIX_FMT_SBGGR14,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW14,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -393,7 +393,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SGBRG14_1X14,
.fourcc = V4L2_PIX_FMT_SGBRG14,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW14,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -402,7 +402,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SGRBG14_1X14,
.fourcc = V4L2_PIX_FMT_SGRBG14,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW14,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
@@ -411,7 +411,7 @@ static const struct mxc_isi_format_info mxc_isi_formats[] = {
.mbus_code = MEDIA_BUS_FMT_SRGGB14_1X14,
.fourcc = V4L2_PIX_FMT_SRGGB14,
.type = MXC_ISI_VIDEO_CAP,
- .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW16,
+ .isi_out_format = CHNL_IMG_CTRL_FORMAT_RAW14,
.mem_planes = 1,
.color_planes = 1,
.depth = { 16 },
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread