diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index cb5b6f2e0617..cf981d6c5d5b 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -188,8 +188,9 @@ static int __isp_pipeline_s_isp_clk(struct rkisp_pipeline *p) return 0; } - if (dev->isp_inp & (INP_RAWRD0 | INP_RAWRD1 | INP_RAWRD2)) { - if (dev->isp_ver < ISP_V30) { + if (dev->isp_inp & (INP_RAWRD0 | INP_RAWRD1 | INP_RAWRD2) || + (dev->is_pre_on && hw_dev->dev_num > 1)) { + if (dev->isp_ver < ISP_V30 || dev->is_pre_on) { /* isp with mipi no support dvfs, calculate max data rate */ for (i = 0; i < hw_dev->dev_num; i++) { fps = hw_dev->isp_size[i].fps; diff --git a/drivers/media/platform/rockchip/isp/hw.c b/drivers/media/platform/rockchip/isp/hw.c index 6013f3a6da50..e6e4d9a716fe 100644 --- a/drivers/media/platform/rockchip/isp/hw.c +++ b/drivers/media/platform/rockchip/isp/hw.c @@ -1088,7 +1088,7 @@ static int __maybe_unused rkisp_runtime_resume(struct device *dev) enable_sys_clk(hw_dev); for (i = 0; i < hw_dev->dev_num; i++) { isp = hw_dev->isp[i]; - if (!isp) + if (!isp || !isp->sw_base_addr) continue; buf = isp->sw_base_addr; memset(buf, 0, RKISP_ISP_SW_MAX_SIZE * mult); diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 884b81b0437e..34569c510484 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -3813,7 +3813,17 @@ void rkisp_chk_tb_over(struct rkisp_device *isp_dev) } else { struct rkisp_isp_params_vdev *params_vdev = &isp_dev->params_vdev; void *param = NULL; - u32 size = 0, offset = 0; + u32 size = 0, offset = 0, timeout = 50; + + /* wait for all isp dev to register */ + if (head->camera_num > 1) { + while (timeout--) { + if (hw->dev_num >= head->camera_num && + hw->isp[hw->dev_num - 1]->is_probe_end) + break; + usleep_range(200, 210); + } + } switch (isp_dev->isp_ver) { case ISP_V32: