From 663db123edf8ac37f1a86a3eb6ec25bfee04eada Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Mon, 28 Jul 2025 15:34:28 +0800 Subject: [PATCH] media: rockchip: isp: fix unite div calculation Change-Id: Iea94ff13b0cc1c3553996e22051266f4af2c1a76 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/rkisp.c | 25 ++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 27ca6de91a6b..180c43eb4da1 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -3003,22 +3003,34 @@ static int rkisp_unite_div(struct rkisp_device *dev, u32 w, u32 h) case ISP_V30: max_size = CIF_ISP_INPUT_W_MAX_V30 * CIF_ISP_INPUT_H_MAX_V30; max_w = CIF_ISP_INPUT_W_MAX_V30; - max_h = max_size / w; + if (w > max_w) + max_h = max_size * 2 / w; + else + max_h = max_size / w; break; case ISP_V32: max_size = CIF_ISP_INPUT_W_MAX_V32 * CIF_ISP_INPUT_H_MAX_V32; max_w = CIF_ISP_INPUT_W_MAX_V32; - max_h = max_size / w; + if (w > max_w) + max_h = max_size * 2 / w; + else + max_h = max_size / w; break; case ISP_V32_L: max_size = CIF_ISP_INPUT_W_MAX_V32_L * CIF_ISP_INPUT_H_MAX_V32_L; max_w = CIF_ISP_INPUT_W_MAX_V32_L; - max_h = max_size / w; + if (w > max_w) + max_h = max_size * 2 / w; + else + max_h = max_size / w; break; case ISP_V33: max_size = CIF_ISP_INPUT_W_MAX_V33 * CIF_ISP_INPUT_H_MAX_V33; max_w = CIF_ISP_INPUT_W_MAX_V33; - max_h = max_size / w; + if (w > max_w) + max_h = max_size * 2 / w; + else + max_h = max_size / w; break; case ISP_V35: max_size = CIF_ISP_INPUT_W_MAX_V35 * CIF_ISP_INPUT_H_MAX_V35; @@ -3028,7 +3040,10 @@ static int rkisp_unite_div(struct rkisp_device *dev, u32 w, u32 h) case ISP_V39: max_size = CIF_ISP_INPUT_W_MAX_V39_UNITE / 2 * CIF_ISP_INPUT_H_MAX_V39_UNITE; max_w = CIF_ISP_INPUT_W_MAX_V39; - max_h = max_size / w; + if (w > max_w) + max_h = max_size * 2 / w; + else + max_h = max_size / w; break; default: return -EINVAL;