Skip to content

Commit

Permalink
media: rkisp1: isp: Pass rkisp1_isp pointer to internal ISP functions
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Dafna Hirschfeld <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
pinchartl authored and mchehab committed Jul 17, 2022
1 parent fd130bc commit bba100d
Showing 1 changed file with 34 additions and 26 deletions.
60 changes: 34 additions & 26 deletions drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);

Expand Down Expand Up @@ -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,
Expand All @@ -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) {
Expand All @@ -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;
Expand All @@ -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;

/*
Expand Down Expand Up @@ -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 |
Expand All @@ -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);
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand Down

0 comments on commit bba100d

Please sign in to comment.