Message ID | 20220614191127.3420492-31-paul.elder@ideasonboard.com |
---|---|
State | New |
Headers | show |
Series | media: rkisp1: Cleanups and add support for i.MX8MP | expand |
On 15.06.2022 04:11, Paul Elder wrote: >From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > >Replace the rkisp1_device pointer argument to the internal functions of >the ISP implementation with a rkisp1_isp object. This makes the code >flow more logical, as the functions operate on the ISP object. > >Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by Dafna Hirschfeld <dafna@fastmail.com> >--- > .../platform/rockchip/rkisp1/rkisp1-isp.c | 60 +++++++++++-------- > 1 file changed, 34 insertions(+), 26 deletions(-) > >diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c >index f8ab1d9cc8cd..e27137b5c33e 100644 >--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c >+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c >@@ -109,12 +109,13 @@ rkisp1_isp_get_pad_crop(struct rkisp1_isp *isp, > * This should only be called when configuring CIF > * or at the frame end interrupt > */ >-static void rkisp1_config_ism(struct rkisp1_device *rkisp1) >+static void rkisp1_config_ism(struct rkisp1_isp *isp) > { > struct v4l2_rect *src_crop = >- rkisp1_isp_get_pad_crop(&rkisp1->isp, NULL, >+ rkisp1_isp_get_pad_crop(isp, NULL, > RKISP1_ISP_PAD_SOURCE_VIDEO, > V4L2_SUBDEV_FORMAT_ACTIVE); >+ struct rkisp1_device *rkisp1 = isp->rkisp1; > u32 val; > > rkisp1_write(rkisp1, RKISP1_CIF_ISP_IS_RECENTER, 0); >@@ -136,20 +137,21 @@ static void rkisp1_config_ism(struct rkisp1_device *rkisp1) > /* > * configure ISP blocks with input format, size...... > */ >-static int rkisp1_config_isp(struct rkisp1_device *rkisp1, >+static int rkisp1_config_isp(struct rkisp1_isp *isp, > enum v4l2_mbus_type mbus_type, u32 mbus_flags) > { >+ struct rkisp1_device *rkisp1 = isp->rkisp1; > u32 isp_ctrl = 0, irq_mask = 0, acq_mult = 0, signal = 0; > const struct rkisp1_mbus_info *src_fmt, *sink_fmt; > struct v4l2_mbus_framefmt *sink_frm; > struct v4l2_rect *sink_crop; > >- sink_fmt = rkisp1->isp.sink_fmt; >- src_fmt = rkisp1->isp.src_fmt; >- sink_frm = rkisp1_isp_get_pad_fmt(&rkisp1->isp, NULL, >+ sink_fmt = isp->sink_fmt; >+ src_fmt = isp->src_fmt; >+ sink_frm = rkisp1_isp_get_pad_fmt(isp, NULL, > RKISP1_ISP_PAD_SINK_VIDEO, > V4L2_SUBDEV_FORMAT_ACTIVE); >- sink_crop = rkisp1_isp_get_pad_crop(&rkisp1->isp, NULL, >+ sink_crop = rkisp1_isp_get_pad_crop(isp, NULL, > RKISP1_ISP_PAD_SINK_VIDEO, > V4L2_SUBDEV_FORMAT_ACTIVE); > >@@ -226,7 +228,7 @@ static int rkisp1_config_isp(struct rkisp1_device *rkisp1, > } else { > struct v4l2_mbus_framefmt *src_frm; > >- src_frm = rkisp1_isp_get_pad_fmt(&rkisp1->isp, NULL, >+ src_frm = rkisp1_isp_get_pad_fmt(isp, NULL, > RKISP1_ISP_PAD_SINK_VIDEO, > V4L2_SUBDEV_FORMAT_ACTIVE); > rkisp1_params_configure(&rkisp1->params, sink_fmt->bayer_pat, >@@ -236,9 +238,10 @@ static int rkisp1_config_isp(struct rkisp1_device *rkisp1, > return 0; > } > >-static int rkisp1_config_dvp(struct rkisp1_device *rkisp1) >+static int rkisp1_config_dvp(struct rkisp1_isp *isp) > { >- const struct rkisp1_mbus_info *sink_fmt = rkisp1->isp.sink_fmt; >+ struct rkisp1_device *rkisp1 = isp->rkisp1; >+ const struct rkisp1_mbus_info *sink_fmt = isp->sink_fmt; > u32 val, input_sel; > > switch (sink_fmt->bus_width) { >@@ -263,15 +266,16 @@ static int rkisp1_config_dvp(struct rkisp1_device *rkisp1) > } > > /* Configure MUX */ >-static int rkisp1_config_path(struct rkisp1_device *rkisp1, >+static int rkisp1_config_path(struct rkisp1_isp *isp, > enum v4l2_mbus_type mbus_type) > { >+ struct rkisp1_device *rkisp1 = isp->rkisp1; > u32 dpcl = rkisp1_read(rkisp1, RKISP1_CIF_VI_DPCL); > int ret = 0; > > if (mbus_type == V4L2_MBUS_BT656 || > mbus_type == V4L2_MBUS_PARALLEL) { >- ret = rkisp1_config_dvp(rkisp1); >+ ret = rkisp1_config_dvp(isp); > dpcl |= RKISP1_CIF_VI_DPCL_IF_SEL_PARALLEL; > } else if (mbus_type == V4L2_MBUS_CSI2_DPHY) { > dpcl |= RKISP1_CIF_VI_DPCL_IF_SEL_MIPI; >@@ -283,24 +287,25 @@ static int rkisp1_config_path(struct rkisp1_device *rkisp1, > } > > /* Hardware configure Entry */ >-static int rkisp1_config_cif(struct rkisp1_device *rkisp1, >+static int rkisp1_config_cif(struct rkisp1_isp *isp, > enum v4l2_mbus_type mbus_type, u32 mbus_flags) > { > int ret; > >- ret = rkisp1_config_isp(rkisp1, mbus_type, mbus_flags); >+ ret = rkisp1_config_isp(isp, mbus_type, mbus_flags); > if (ret) > return ret; >- ret = rkisp1_config_path(rkisp1, mbus_type); >+ ret = rkisp1_config_path(isp, mbus_type); > if (ret) > return ret; >- rkisp1_config_ism(rkisp1); >+ rkisp1_config_ism(isp); > > return 0; > } > >-static void rkisp1_isp_stop(struct rkisp1_device *rkisp1) >+static void rkisp1_isp_stop(struct rkisp1_isp *isp) > { >+ struct rkisp1_device *rkisp1 = isp->rkisp1; > u32 val; > > /* >@@ -332,8 +337,10 @@ static void rkisp1_isp_stop(struct rkisp1_device *rkisp1) > rkisp1_write(rkisp1, RKISP1_CIF_VI_IRCL, 0x0); > } > >-static void rkisp1_config_clk(struct rkisp1_device *rkisp1) >+static void rkisp1_config_clk(struct rkisp1_isp *isp) > { >+ struct rkisp1_device *rkisp1 = isp->rkisp1; >+ > u32 val = RKISP1_CIF_VI_ICCL_ISP_CLK | RKISP1_CIF_VI_ICCL_CP_CLK | > RKISP1_CIF_VI_ICCL_MRSZ_CLK | RKISP1_CIF_VI_ICCL_SRSZ_CLK | > RKISP1_CIF_VI_ICCL_JPEG_CLK | RKISP1_CIF_VI_ICCL_MI_CLK | >@@ -352,11 +359,12 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1) > } > } > >-static void rkisp1_isp_start(struct rkisp1_device *rkisp1) >+static void rkisp1_isp_start(struct rkisp1_isp *isp) > { >+ struct rkisp1_device *rkisp1 = isp->rkisp1; > u32 val; > >- rkisp1_config_clk(rkisp1); >+ rkisp1_config_clk(isp); > > /* Activate ISP */ > val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_CTRL); >@@ -758,7 +766,7 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable) > v4l2_subdev_call(rkisp1->source, video, s_stream, false); > > rkisp1_csi_stop(&rkisp1->csi); >- rkisp1_isp_stop(rkisp1); >+ rkisp1_isp_stop(isp); > > return 0; > } >@@ -775,23 +783,23 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable) > if (asd->mbus_type != V4L2_MBUS_CSI2_DPHY) > return -EINVAL; > >- rkisp1->isp.frame_sequence = -1; >+ isp->frame_sequence = -1; > mutex_lock(&isp->ops_lock); >- ret = rkisp1_config_cif(rkisp1, asd->mbus_type, asd->mbus_flags); >+ ret = rkisp1_config_cif(isp, asd->mbus_type, asd->mbus_flags); > if (ret) > goto mutex_unlock; > >- rkisp1_isp_start(rkisp1); >+ rkisp1_isp_start(isp); > > ret = rkisp1_csi_start(&rkisp1->csi, asd); > if (ret) { >- rkisp1_isp_stop(rkisp1); >+ rkisp1_isp_stop(isp); > goto mutex_unlock; > } > > ret = v4l2_subdev_call(rkisp1->source, video, s_stream, true); > if (ret) { >- rkisp1_isp_stop(rkisp1); >+ rkisp1_isp_stop(isp); > rkisp1_csi_stop(&rkisp1->csi); > goto mutex_unlock; > } >-- >2.30.2 >
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c index f8ab1d9cc8cd..e27137b5c33e 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c @@ -109,12 +109,13 @@ rkisp1_isp_get_pad_crop(struct rkisp1_isp *isp, * This should only be called when configuring CIF * or at the frame end interrupt */ -static void rkisp1_config_ism(struct rkisp1_device *rkisp1) +static void rkisp1_config_ism(struct rkisp1_isp *isp) { struct v4l2_rect *src_crop = - rkisp1_isp_get_pad_crop(&rkisp1->isp, NULL, + rkisp1_isp_get_pad_crop(isp, NULL, RKISP1_ISP_PAD_SOURCE_VIDEO, V4L2_SUBDEV_FORMAT_ACTIVE); + struct rkisp1_device *rkisp1 = isp->rkisp1; u32 val; rkisp1_write(rkisp1, RKISP1_CIF_ISP_IS_RECENTER, 0); @@ -136,20 +137,21 @@ static void rkisp1_config_ism(struct rkisp1_device *rkisp1) /* * configure ISP blocks with input format, size...... */ -static int rkisp1_config_isp(struct rkisp1_device *rkisp1, +static int rkisp1_config_isp(struct rkisp1_isp *isp, enum v4l2_mbus_type mbus_type, u32 mbus_flags) { + struct rkisp1_device *rkisp1 = isp->rkisp1; u32 isp_ctrl = 0, irq_mask = 0, acq_mult = 0, signal = 0; const struct rkisp1_mbus_info *src_fmt, *sink_fmt; struct v4l2_mbus_framefmt *sink_frm; struct v4l2_rect *sink_crop; - sink_fmt = rkisp1->isp.sink_fmt; - src_fmt = rkisp1->isp.src_fmt; - sink_frm = rkisp1_isp_get_pad_fmt(&rkisp1->isp, NULL, + sink_fmt = isp->sink_fmt; + src_fmt = isp->src_fmt; + sink_frm = rkisp1_isp_get_pad_fmt(isp, NULL, RKISP1_ISP_PAD_SINK_VIDEO, V4L2_SUBDEV_FORMAT_ACTIVE); - sink_crop = rkisp1_isp_get_pad_crop(&rkisp1->isp, NULL, + sink_crop = rkisp1_isp_get_pad_crop(isp, NULL, RKISP1_ISP_PAD_SINK_VIDEO, V4L2_SUBDEV_FORMAT_ACTIVE); @@ -226,7 +228,7 @@ static int rkisp1_config_isp(struct rkisp1_device *rkisp1, } else { struct v4l2_mbus_framefmt *src_frm; - src_frm = rkisp1_isp_get_pad_fmt(&rkisp1->isp, NULL, + src_frm = rkisp1_isp_get_pad_fmt(isp, NULL, RKISP1_ISP_PAD_SINK_VIDEO, V4L2_SUBDEV_FORMAT_ACTIVE); rkisp1_params_configure(&rkisp1->params, sink_fmt->bayer_pat, @@ -236,9 +238,10 @@ static int rkisp1_config_isp(struct rkisp1_device *rkisp1, return 0; } -static int rkisp1_config_dvp(struct rkisp1_device *rkisp1) +static int rkisp1_config_dvp(struct rkisp1_isp *isp) { - const struct rkisp1_mbus_info *sink_fmt = rkisp1->isp.sink_fmt; + struct rkisp1_device *rkisp1 = isp->rkisp1; + const struct rkisp1_mbus_info *sink_fmt = isp->sink_fmt; u32 val, input_sel; switch (sink_fmt->bus_width) { @@ -263,15 +266,16 @@ static int rkisp1_config_dvp(struct rkisp1_device *rkisp1) } /* Configure MUX */ -static int rkisp1_config_path(struct rkisp1_device *rkisp1, +static int rkisp1_config_path(struct rkisp1_isp *isp, enum v4l2_mbus_type mbus_type) { + struct rkisp1_device *rkisp1 = isp->rkisp1; u32 dpcl = rkisp1_read(rkisp1, RKISP1_CIF_VI_DPCL); int ret = 0; if (mbus_type == V4L2_MBUS_BT656 || mbus_type == V4L2_MBUS_PARALLEL) { - ret = rkisp1_config_dvp(rkisp1); + ret = rkisp1_config_dvp(isp); dpcl |= RKISP1_CIF_VI_DPCL_IF_SEL_PARALLEL; } else if (mbus_type == V4L2_MBUS_CSI2_DPHY) { dpcl |= RKISP1_CIF_VI_DPCL_IF_SEL_MIPI; @@ -283,24 +287,25 @@ static int rkisp1_config_path(struct rkisp1_device *rkisp1, } /* Hardware configure Entry */ -static int rkisp1_config_cif(struct rkisp1_device *rkisp1, +static int rkisp1_config_cif(struct rkisp1_isp *isp, enum v4l2_mbus_type mbus_type, u32 mbus_flags) { int ret; - ret = rkisp1_config_isp(rkisp1, mbus_type, mbus_flags); + ret = rkisp1_config_isp(isp, mbus_type, mbus_flags); if (ret) return ret; - ret = rkisp1_config_path(rkisp1, mbus_type); + ret = rkisp1_config_path(isp, mbus_type); if (ret) return ret; - rkisp1_config_ism(rkisp1); + rkisp1_config_ism(isp); return 0; } -static void rkisp1_isp_stop(struct rkisp1_device *rkisp1) +static void rkisp1_isp_stop(struct rkisp1_isp *isp) { + struct rkisp1_device *rkisp1 = isp->rkisp1; u32 val; /* @@ -332,8 +337,10 @@ static void rkisp1_isp_stop(struct rkisp1_device *rkisp1) rkisp1_write(rkisp1, RKISP1_CIF_VI_IRCL, 0x0); } -static void rkisp1_config_clk(struct rkisp1_device *rkisp1) +static void rkisp1_config_clk(struct rkisp1_isp *isp) { + struct rkisp1_device *rkisp1 = isp->rkisp1; + u32 val = RKISP1_CIF_VI_ICCL_ISP_CLK | RKISP1_CIF_VI_ICCL_CP_CLK | RKISP1_CIF_VI_ICCL_MRSZ_CLK | RKISP1_CIF_VI_ICCL_SRSZ_CLK | RKISP1_CIF_VI_ICCL_JPEG_CLK | RKISP1_CIF_VI_ICCL_MI_CLK | @@ -352,11 +359,12 @@ static void rkisp1_config_clk(struct rkisp1_device *rkisp1) } } -static void rkisp1_isp_start(struct rkisp1_device *rkisp1) +static void rkisp1_isp_start(struct rkisp1_isp *isp) { + struct rkisp1_device *rkisp1 = isp->rkisp1; u32 val; - rkisp1_config_clk(rkisp1); + rkisp1_config_clk(isp); /* Activate ISP */ val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_CTRL); @@ -758,7 +766,7 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable) v4l2_subdev_call(rkisp1->source, video, s_stream, false); rkisp1_csi_stop(&rkisp1->csi); - rkisp1_isp_stop(rkisp1); + rkisp1_isp_stop(isp); return 0; } @@ -775,23 +783,23 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable) if (asd->mbus_type != V4L2_MBUS_CSI2_DPHY) return -EINVAL; - rkisp1->isp.frame_sequence = -1; + isp->frame_sequence = -1; mutex_lock(&isp->ops_lock); - ret = rkisp1_config_cif(rkisp1, asd->mbus_type, asd->mbus_flags); + ret = rkisp1_config_cif(isp, asd->mbus_type, asd->mbus_flags); if (ret) goto mutex_unlock; - rkisp1_isp_start(rkisp1); + rkisp1_isp_start(isp); ret = rkisp1_csi_start(&rkisp1->csi, asd); if (ret) { - rkisp1_isp_stop(rkisp1); + rkisp1_isp_stop(isp); goto mutex_unlock; } ret = v4l2_subdev_call(rkisp1->source, video, s_stream, true); if (ret) { - rkisp1_isp_stop(rkisp1); + rkisp1_isp_stop(isp); rkisp1_csi_stop(&rkisp1->csi); goto mutex_unlock; }