From e66c0f380bbddf0ac80f4dcb0e8d1705807fda43 Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Tue, 8 Jul 2025 09:09:42 +0800 Subject: [PATCH] media: rockchip: vicap support config complete frame of toisp Change-Id: I1bea6eb816acbd382f11650e7e736b6a0a65132c Signed-off-by: Zefa Chen --- drivers/media/platform/rockchip/cif/capture.c | 28 +++++++++++++------ drivers/media/platform/rockchip/cif/dev.c | 4 +++ drivers/media/platform/rockchip/cif/dev.h | 1 + 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 8732d609079b..ac6be26586bd 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -4763,9 +4763,9 @@ static int rkcif_csi_channel_set_v1(struct rkcif_stream *stream, return 0; } + val = rkcif_read_register(dev, CIF_REG_GLB_CTRL); if (stream->sw_dbg_en) { - rkcif_write_register_and(dev, CIF_REG_GLB_CTRL, - ~(u32)BIT(16)); + val &= ~BIT(16); v4l2_subdev_call(dev->active_sensor->sd, core, ioctl, RKCIF_CMD_SET_PPI_DATA_DEBUG, @@ -4776,18 +4776,23 @@ static int rkcif_csi_channel_set_v1(struct rkcif_stream *stream, RKCIF_CMD_SET_PPI_DATA_DEBUG, &stream->sw_dbg_en); } - if (dev->chip_id == CHIP_RK3588_CIF || dev->chip_id == CHIP_RV1106_CIF || dev->chip_id == CHIP_RK3562_CIF) { - val = GLB_RESET_IDI_EN_RK3588; + val |= GLB_RESET_IDI_EN_RK3588; } else if (dev->chip_id == CHIP_RK3576_CIF) { - val = GLB_RESET_IDI_EN_RK3576; + val |= GLB_RESET_IDI_EN_RK3576; val |= rkcif_get_split_dphy_mask_rk3576(dev); } else if (dev->chip_id == CHIP_RV1103B_CIF) { - val = rkcif_get_split_dphy_mask_rv1103b(dev); + val |= rkcif_get_split_dphy_mask_rv1103b(dev); } - rkcif_write_register_or(dev, CIF_REG_GLB_CTRL, val); + if (dev->chip_id == CHIP_RV1103B_CIF) { + if (rkcif_frm_toisp_protect) + val &= ~BIT(28); + else + val |= BIT(28); + } + rkcif_write_register(dev, CIF_REG_GLB_CTRL, val); if (dev->terminal_sensor.hdmi_input_en) { if (dev->chip_id == CHIP_RK3562_CIF || @@ -5075,8 +5080,13 @@ static int rkcif_csi_channel_set_rv1126b(struct rkcif_stream *stream, CSI_DISABLE_CAPTURE); return 0; } - val = rkcif_get_split_mask_rv1126b(dev); - rkcif_write_register_or(dev, CIF_REG_GLB_CTRL, val); + val = rkcif_read_register(dev, CIF_REG_GLB_CTRL); + val |= rkcif_get_split_mask_rv1126b(dev); + if (rkcif_frm_toisp_protect) + val &= ~BIT(28); + else + val |= BIT(28); + rkcif_write_register(dev, CIF_REG_GLB_CTRL, val); rkcif_write_register_and(dev, CIF_REG_MIPI_LVDS_INTSTAT, ~(CSI_START_INTSTAT(channel->id) | CSI_DMA_END_INTSTAT(channel->id) | diff --git a/drivers/media/platform/rockchip/cif/dev.c b/drivers/media/platform/rockchip/cif/dev.c index 69c3b214460a..9a127897d9e6 100644 --- a/drivers/media/platform/rockchip/cif/dev.c +++ b/drivers/media/platform/rockchip/cif/dev.c @@ -36,6 +36,10 @@ int rkcif_debug; module_param_named(debug, rkcif_debug, int, 0644); MODULE_PARM_DESC(debug, "Debug level (0-1)"); +bool rkcif_frm_toisp_protect = true; +module_param_named(toisp_protect, rkcif_frm_toisp_protect, bool, 0644); +MODULE_PARM_DESC(toisp_protect, "frame protect of toisp"); + static char rkcif_version[RKCIF_VERNO_LEN]; module_param_string(version, rkcif_version, RKCIF_VERNO_LEN, 0444); MODULE_PARM_DESC(version, "version number"); diff --git a/drivers/media/platform/rockchip/cif/dev.h b/drivers/media/platform/rockchip/cif/dev.h index ad4b059e51dd..b8bb669f04ff 100644 --- a/drivers/media/platform/rockchip/cif/dev.h +++ b/drivers/media/platform/rockchip/cif/dev.h @@ -232,6 +232,7 @@ struct rkcif_tools_buffer { }; extern int rkcif_debug; +extern bool rkcif_frm_toisp_protect; /* * struct rkcif_sensor_info - Sensor infomations