From 007db6109c0fca5adb4e8feb7bcd7fff83858efd Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Fri, 27 Dec 2024 15:20:47 +0800 Subject: [PATCH] media: rockchip: isp: multi-sensor online info to vicap Change-Id: Ie5797f8ed2962df2901aaae07f0cdc63bc1e3885 Signed-off-by: Cai YiWei Signed-off-by: Zefa Chen --- drivers/media/platform/rockchip/isp/dev.c | 18 ++++++++++++++++-- .../media/platform/rockchip/isp/isp_external.h | 3 +++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index a620198bd693..2435749c9cb1 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -290,7 +290,7 @@ static int rkisp_pipeline_open(struct rkisp_pipeline *p, { struct rkisp_device *dev = container_of(p, struct rkisp_device, pipe); struct rkisp_hw_dev *hw = dev->hw_dev; - int ret; + int i, ret; if (WARN_ON(!p || !me)) return -EINVAL; @@ -308,8 +308,22 @@ static int rkisp_pipeline_open(struct rkisp_pipeline *p, rkisp_vicap_buf[dev->dev_id] = RKISP_VICAP_BUF_CNT_MAX; dev->vicap_buf_cnt = rkisp_vicap_buf[dev->dev_id]; dev->is_m_online = rkisp_m_online[dev->dev_id]; - if (hw->isp_ver != ISP_V33 || hw->is_single) + if (hw->isp_ver != ISP_V33 || hw->is_single) { dev->is_m_online = false; + rkisp_m_online[dev->dev_id] = false; + } + if (dev->is_m_online && hw->dev_link_num > 1) { + ret = 1; + for (i = 0; i < hw->dev_link_num; i++) { + if (!rkisp_m_online[i]) { + ret = 0; + break; + } + } + if (dev->active_sensor) + v4l2_subdev_call(dev->active_sensor->sd, core, + ioctl, RKISP_VICAP_CMD_MULTI_ONLINE, &ret); + } if (hw->isp_ver == ISP_V33) { if (dev->unite_div != ISP_UNITE_DIV1) rkisp_hdr_wrap_line[dev->dev_id] = 0; diff --git a/drivers/media/platform/rockchip/isp/isp_external.h b/drivers/media/platform/rockchip/isp/isp_external.h index 351ab6e8bc2a..73c5bd815987 100644 --- a/drivers/media/platform/rockchip/isp/isp_external.h +++ b/drivers/media/platform/rockchip/isp/isp_external.h @@ -30,6 +30,9 @@ #define RKISP_VICAP_CMD_SOF \ _IOW('V', BASE_VIDIOC_PRIVATE + 7, struct rkisp_vicap_sof) +#define RKISP_VICAP_CMD_MULTI_ONLINE \ + _IOW('V', BASE_VIDIOC_PRIVATE + 8, int) + #define RKISP_VICAP_BUF_CNT 3 #define RKISP_VICAP_BUF_CNT_MAX 8 #define RKISP_RX_BUF_POOL_MAX (RKISP_VICAP_BUF_CNT_MAX * 3)