From cab48d65f1833fbee4ed1ee419cb7d70342f39d2 Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Mon, 6 Jan 2025 11:14:12 +0800 Subject: [PATCH] media: rockchip: vicap modify logic of sof skip sof and frame_index when loss frame, only work in multi online Signed-off-by: Zefa Chen Change-Id: Ib9739dec0674deac0c0ad182f6836f9edf858212 --- drivers/media/platform/rockchip/cif/capture.c | 6 ++++-- drivers/media/platform/rockchip/cif/subdev-itf.c | 7 +++++++ drivers/media/platform/rockchip/cif/subdev-itf.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index d6ec7c23e31b..294f5227fc02 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -12472,7 +12472,8 @@ static bool rkcif_check_frame_active(struct rkcif_device *cif_dev) { if (cif_dev->sditf[0] && cif_dev->sditf[0]->mode.rdbk_mode < RKISP_VICAP_RDBK_AIQ && - cif_dev->sditf[0]->is_toisp_off) + cif_dev->sditf[0]->is_toisp_off && + cif_dev->sditf[0]->is_multi_online) return false; return true; @@ -13280,7 +13281,8 @@ static void rkcif_deal_sof(struct rkcif_device *cif_dev) tmp_dev->stream[0].frame_idx); } if (tmp_dev->sditf[0] && - tmp_dev->sditf[0]->mode.rdbk_mode < RKISP_VICAP_RDBK_AIQ) { + tmp_dev->sditf[0]->mode.rdbk_mode < RKISP_VICAP_RDBK_AIQ && + tmp_dev->sditf[0]->is_multi_online) { if (!tmp_dev->sditf[0]->is_toisp_off) tmp_dev->stream[0].frame_idx++; } else { diff --git a/drivers/media/platform/rockchip/cif/subdev-itf.c b/drivers/media/platform/rockchip/cif/subdev-itf.c index df8d7ca79cfc..e0df772e9a96 100644 --- a/drivers/media/platform/rockchip/cif/subdev-itf.c +++ b/drivers/media/platform/rockchip/cif/subdev-itf.c @@ -607,6 +607,12 @@ static long sditf_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) sditf_disable_immediately(priv); } return 0; + case RKISP_VICAP_CMD_MULTI_ONLINE: + if (*(int *)arg) + priv->is_multi_online = true; + else + priv->is_multi_online = false; + return 0; default: break; } @@ -1740,6 +1746,7 @@ static int rkcif_subdev_media_init(struct sditf_priv *priv) mutex_init(&priv->mutex); priv->hdr_wrap_line = 0; priv->is_buf_init = false; + priv->is_multi_online = false; return 0; } diff --git a/drivers/media/platform/rockchip/cif/subdev-itf.h b/drivers/media/platform/rockchip/cif/subdev-itf.h index 59852f6b8a18..e0f56e0fbb4b 100644 --- a/drivers/media/platform/rockchip/cif/subdev-itf.h +++ b/drivers/media/platform/rockchip/cif/subdev-itf.h @@ -127,6 +127,7 @@ struct sditf_priv { u32 hdr_wrap_line; bool is_toisp_off; bool is_buf_init; + bool is_multi_online; }; extern struct platform_driver rkcif_subdev_driver;