[PATCH v2 3/5] media: rockchip: rkcif: add a callback for the MIPI ID_CTRL1 register
Amin Gattout
amin.gattout at gmail.com
Mon Sep 21 08:29:59 PDT 2026
The contents of the MIPI ID_CTRL1 register differ between variants. The
RK3568 and RK3588 hold the capture size there, while the RK3576 uses it
for the virtual channel and data type filter.
Let each variant provide a callback that builds the register value, in
preparation for the RK3576 support. Variants that do not provide one
keep writing the capture size, so their behavior is unchanged.
Signed-off-by: Amin Gattout <amin.gattout at gmail.com>
---
drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c | 5 ++++-
drivers/media/platform/rockchip/rkcif/rkcif-common.h | 2 ++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
index e0acb9049ca1..432f47a1fc23 100644
--- a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
+++ b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
@@ -749,7 +749,10 @@ static int rkcif_mipi_start_streaming(struct rkcif_stream *stream)
if (match_data->mipi_ctrl0)
ctrl0 = match_data->mipi_ctrl0(stream, active_out_fmt);
- ctrl1 = RKCIF_XY_COORD(width, height);
+ if (match_data->mipi_ctrl1)
+ ctrl1 = match_data->mipi_ctrl1(stream, active_out_fmt);
+ else
+ ctrl1 = RKCIF_XY_COORD(width, height);
int_mask |= RKCIF_MIPI_INT_FRAME0_END(stream->id);
int_mask |= RKCIF_MIPI_INT_FRAME1_END(stream->id);
diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-common.h b/drivers/media/platform/rockchip/rkcif/rkcif-common.h
index 4d9211ba9bda..f83c8099b78e 100644
--- a/drivers/media/platform/rockchip/rkcif/rkcif-common.h
+++ b/drivers/media/platform/rockchip/rkcif/rkcif-common.h
@@ -207,6 +207,8 @@ struct rkcif_mipi_match_data {
unsigned int regs_id[RKCIF_ID_MAX][RKCIF_MIPI_ID_REGISTER_MAX];
u32 (*mipi_ctrl0)(struct rkcif_stream *stream,
const struct rkcif_output_fmt *active_out_fmt);
+ u32 (*mipi_ctrl1)(struct rkcif_stream *stream,
+ const struct rkcif_output_fmt *active_out_fmt);
struct {
unsigned int offset;
} blocks[RKCIF_MIPI_MAX - RKCIF_MIPI_BASE];
--
2.43.0
More information about the linux-arm-kernel
mailing list