From b819ded322f10868b373cf50fd793608fadaa773 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Fri, 23 Dec 2022 20:08:29 +0800 Subject: [PATCH] media: rockchip: isp: wrap width and height config by user Change-Id: I5090f57f4231da2af258991b264e8f91a46b5adb Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/capture.c | 10 ++++++---- drivers/media/platform/rockchip/isp/capture.h | 1 + drivers/media/platform/rockchip/isp/capture_v32.c | 2 +- include/uapi/linux/rkisp2-config.h | 9 +++++++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/capture.c b/drivers/media/platform/rockchip/isp/capture.c index 89827a0cad68..19c1b0000412 100644 --- a/drivers/media/platform/rockchip/isp/capture.c +++ b/drivers/media/platform/rockchip/isp/capture.c @@ -1092,18 +1092,19 @@ static int rkisp_set_mirror_flip(struct rkisp_stream *stream, return 0; } -static int rkisp_get_wrap_line(struct rkisp_stream *stream, int *line) +static int rkisp_get_wrap_line(struct rkisp_stream *stream, struct rkisp_wrap_info *arg) { struct rkisp_device *dev = stream->ispdev; if (dev->isp_ver != ISP_V32 && stream->id != RKISP_STREAM_MP) return -EINVAL; - *line = dev->cap_dev.wrap_line; + arg->width = dev->cap_dev.wrap_width; + arg->height = dev->cap_dev.wrap_line; return 0; } -static int rkisp_set_wrap_line(struct rkisp_stream *stream, int *line) +static int rkisp_set_wrap_line(struct rkisp_stream *stream, struct rkisp_wrap_info *arg) { struct rkisp_device *dev = stream->ispdev; @@ -1114,7 +1115,8 @@ static int rkisp_set_wrap_line(struct rkisp_stream *stream, int *line) "wrap only support for single sensor and mainpath\n"); return -EINVAL; } - return stream->ops->set_wrap(stream, *line); + dev->cap_dev.wrap_width = arg->width; + return stream->ops->set_wrap(stream, arg->height); } static int rkisp_set_fps(struct rkisp_stream *stream, int *fps) diff --git a/drivers/media/platform/rockchip/isp/capture.h b/drivers/media/platform/rockchip/isp/capture.h index 775872234a9e..7f7408e363ec 100644 --- a/drivers/media/platform/rockchip/isp/capture.h +++ b/drivers/media/platform/rockchip/isp/capture.h @@ -310,6 +310,7 @@ struct rkisp_capture_device { struct tasklet_struct rd_tasklet; atomic_t refcnt; u32 wait_line; + u32 wrap_width; u32 wrap_line; bool is_done_early; bool is_mirror; diff --git a/drivers/media/platform/rockchip/isp/capture_v32.c b/drivers/media/platform/rockchip/isp/capture_v32.c index 5548580a8881..1026ed00702e 100644 --- a/drivers/media/platform/rockchip/isp/capture_v32.c +++ b/drivers/media/platform/rockchip/isp/capture_v32.c @@ -1486,7 +1486,7 @@ static int rkisp_create_dummy_buf(struct rkisp_stream *stream) if (!dev->cap_dev.wrap_line || stream->id != RKISP_STREAM_MP) return 0; - buf->size = dev->isp_sdev.in_crop.width * dev->cap_dev.wrap_line * 2; + buf->size = dev->cap_dev.wrap_width * dev->cap_dev.wrap_line * 2; if (stream->out_isp_fmt.output_format == ISP32_MI_OUTPUT_YUV420) buf->size = buf->size - buf->size / 4; buf->is_need_dbuf = true; diff --git a/include/uapi/linux/rkisp2-config.h b/include/uapi/linux/rkisp2-config.h index 66e8d224218f..b97846c879ad 100644 --- a/include/uapi/linux/rkisp2-config.h +++ b/include/uapi/linux/rkisp2-config.h @@ -80,10 +80,10 @@ _IOW('V', BASE_VIDIOC_PRIVATE + 106, struct rkisp_mirror_flip) #define RKISP_CMD_GET_WRAP_LINE \ - _IOR('V', BASE_VIDIOC_PRIVATE + 107, int) + _IOR('V', BASE_VIDIOC_PRIVATE + 107, struct rkisp_wrap_info) /* set wrap line before VIDIOC_S_FMT */ #define RKISP_CMD_SET_WRAP_LINE \ - _IOW('V', BASE_VIDIOC_PRIVATE + 108, int) + _IOW('V', BASE_VIDIOC_PRIVATE + 108, struct rkisp_wrap_info) #define RKISP_CMD_SET_FPS \ _IOW('V', BASE_VIDIOC_PRIVATE + 109, int) @@ -386,6 +386,11 @@ struct rkisp_mirror_flip { unsigned char flip; } __attribute__ ((packed)); +struct rkisp_wrap_info { + int width; + int height; +}; + #define RKISP_TB_STREAM_BUF_MAX 5 struct rkisp_tb_stream_buf { unsigned int dma_addr;