From c03c62661fe8a0c005baef2fe3ae447ba550e5bc Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Tue, 23 Nov 2021 10:07:05 +0800 Subject: [PATCH] media: rockchip: isp: fix scale resolution limit Change-Id: I2af84a93f335ae19d42075907f599f73af092619 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/capture.c | 27 ++++++++++++++----- drivers/media/platform/rockchip/isp/capture.h | 9 +++---- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/capture.c b/drivers/media/platform/rockchip/isp/capture.c index cec089b55a1a..2e2eae8b7c2f 100644 --- a/drivers/media/platform/rockchip/isp/capture.c +++ b/drivers/media/platform/rockchip/isp/capture.c @@ -890,8 +890,8 @@ static void restrict_rsz_resolution(struct rkisp_device *dev, struct v4l2_rect *input_win; input_win = rkisp_get_isp_sd_win(&dev->isp_sdev); - max_rsz->width = max_t(int, input_win->width, config->max_rsz_width); - max_rsz->height = max_t(int, input_win->height, config->max_rsz_height); + max_rsz->width = min_t(int, input_win->width, config->max_rsz_width); + max_rsz->height = min_t(int, input_win->height, config->max_rsz_height); } static int rkisp_set_fmt(struct rkisp_stream *stream, @@ -1631,20 +1631,35 @@ unreg: int rkisp_register_stream_vdevs(struct rkisp_device *dev) { struct rkisp_capture_device *cap_dev = &dev->cap_dev; + struct stream_config *mp_cfg = &rkisp_mp_stream_config; int ret = 0; memset(cap_dev, 0, sizeof(*cap_dev)); cap_dev->ispdev = dev; atomic_set(&cap_dev->refcnt, 0); - if (dev->isp_ver <= ISP_V13) + if (dev->isp_ver <= ISP_V13) { + if (dev->isp_ver == ISP_V12) { + mp_cfg->max_rsz_width = CIF_ISP_INPUT_W_MAX_V12; + mp_cfg->max_rsz_height = CIF_ISP_INPUT_H_MAX_V12; + } else if (dev->isp_ver == ISP_V13) { + mp_cfg->max_rsz_width = CIF_ISP_INPUT_W_MAX_V13; + mp_cfg->max_rsz_height = CIF_ISP_INPUT_H_MAX_V13; + } ret = rkisp_register_stream_v1x(dev); - else if (dev->isp_ver == ISP_V20) + } else if (dev->isp_ver == ISP_V20) { ret = rkisp_register_stream_v20(dev); - else if (dev->isp_ver == ISP_V21) + } else if (dev->isp_ver == ISP_V21) { + mp_cfg->max_rsz_width = CIF_ISP_INPUT_W_MAX_V21; + mp_cfg->max_rsz_height = CIF_ISP_INPUT_H_MAX_V21; ret = rkisp_register_stream_v21(dev); - else if (dev->isp_ver == ISP_V30) + } else if (dev->isp_ver == ISP_V30) { + mp_cfg->max_rsz_width = dev->hw_dev->is_unite ? + CIF_ISP_INPUT_W_MAX_V30_UNITE : CIF_ISP_INPUT_W_MAX_V30; + mp_cfg->max_rsz_height = dev->hw_dev->is_unite ? + CIF_ISP_INPUT_H_MAX_V30_UNITE : CIF_ISP_INPUT_H_MAX_V30; ret = rkisp_register_stream_v30(dev); + } return ret; } diff --git a/drivers/media/platform/rockchip/isp/capture.h b/drivers/media/platform/rockchip/isp/capture.h index 2712543e500d..1c2aa59f2f90 100644 --- a/drivers/media/platform/rockchip/isp/capture.h +++ b/drivers/media/platform/rockchip/isp/capture.h @@ -134,11 +134,10 @@ struct rkisp_stream_dmarx { struct stream_config { const struct capture_fmt *fmts; int fmt_size; - /* constrains */ - const int max_rsz_width; - const int max_rsz_height; - const int min_rsz_width; - const int min_rsz_height; + int max_rsz_width; + int max_rsz_height; + int min_rsz_width; + int min_rsz_height; const int frame_end_id; /* registers */ struct {