diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c index 3fc56166356f..e61d59a4000a 100644 --- a/drivers/media/platform/rockchip/isp1/capture.c +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -1593,10 +1593,6 @@ static int rkisp_init_vb2_queue(struct vb2_queue *q, struct rkisp1_stream *stream, enum v4l2_buf_type buf_type) { - struct rkisp1_vdev_node *node; - - node = queue_to_node(q); - q->type = buf_type; q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF; q->drv_priv = stream; diff --git a/drivers/media/platform/rockchip/isp1/dmarx.c b/drivers/media/platform/rockchip/isp1/dmarx.c index 07e27954e36e..7ac08d249c0b 100644 --- a/drivers/media/platform/rockchip/isp1/dmarx.c +++ b/drivers/media/platform/rockchip/isp1/dmarx.c @@ -383,10 +383,6 @@ static int rkisp_init_vb2_queue(struct vb2_queue *q, struct rkisp1_stream *stream, enum v4l2_buf_type buf_type) { - struct rkisp1_vdev_node *node; - - node = queue_to_node(q); - q->type = buf_type; q->io_modes = VB2_MMAP | VB2_DMABUF | VB2_USERPTR; q->drv_priv = stream; diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c index fa1aacce7190..5315aabf3957 100644 --- a/drivers/media/platform/rockchip/isp1/isp_params.c +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -2566,10 +2566,6 @@ static int rkisp1_params_init_vb2_queue(struct vb2_queue *q, struct rkisp1_isp_params_vdev *params_vdev) { - struct rkisp1_vdev_node *node; - - node = queue_to_node(q); - q->type = V4L2_BUF_TYPE_META_OUTPUT; q->io_modes = VB2_MMAP | VB2_USERPTR; q->drv_priv = params_vdev; diff --git a/drivers/media/platform/rockchip/isp1/isp_stats.c b/drivers/media/platform/rockchip/isp1/isp_stats.c index c061441875d9..b682f6a4f9d1 100644 --- a/drivers/media/platform/rockchip/isp1/isp_stats.c +++ b/drivers/media/platform/rockchip/isp1/isp_stats.c @@ -200,10 +200,6 @@ static struct vb2_ops rkisp1_stats_vb2_ops = { static int rkisp1_stats_init_vb2_queue(struct vb2_queue *q, struct rkisp1_isp_stats_vdev *stats_vdev) { - struct rkisp1_vdev_node *node; - - node = queue_to_node(q); - q->type = V4L2_BUF_TYPE_META_CAPTURE; q->io_modes = VB2_MMAP | VB2_USERPTR; q->drv_priv = stats_vdev; diff --git a/drivers/media/platform/rockchip/isp1/rkisp1.c b/drivers/media/platform/rockchip/isp1/rkisp1.c index ad1329d86109..07246bca865c 100644 --- a/drivers/media/platform/rockchip/isp1/rkisp1.c +++ b/drivers/media/platform/rockchip/isp1/rkisp1.c @@ -281,7 +281,7 @@ static int rkisp1_config_isp(struct rkisp1_device *dev) struct ispsd_in_fmt *in_fmt; struct ispsd_out_fmt *out_fmt; struct v4l2_mbus_framefmt *in_frm; - struct v4l2_rect *out_crop, *in_crop; + struct v4l2_rect *in_crop; struct rkisp1_sensor_info *sensor; void __iomem *base = dev->base_addr; u32 isp_ctrl = 0; @@ -294,7 +294,6 @@ static int rkisp1_config_isp(struct rkisp1_device *dev) in_frm = &dev->isp_sdev.in_frm; in_fmt = &dev->isp_sdev.in_fmt; out_fmt = &dev->isp_sdev.out_fmt; - out_crop = &dev->isp_sdev.out_crop; in_crop = &dev->isp_sdev.in_crop; if (in_fmt->fmt_type == FMT_BAYER) { @@ -335,7 +334,6 @@ static int rkisp1_config_isp(struct rkisp1_device *dev) isp_ctrl = CIF_ISP_CTRL_ISP_MODE_ITU656; else isp_ctrl = CIF_ISP_CTRL_ISP_MODE_ITU601; - } irq_mask |= CIF_ISP_DATA_LOSS; @@ -1132,17 +1130,21 @@ static int rkisp1_isp_sd_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) { - struct v4l2_mbus_framefmt *mf = &fmt->format; struct rkisp1_isp_subdev *isp_sd = sd_to_isp_sd(sd); + struct v4l2_mbus_framefmt *mf; - if ((fmt->pad != RKISP1_ISP_PAD_SINK) && - (fmt->pad != RKISP1_ISP_PAD_SOURCE_PATH)) - return -EINVAL; + if (!fmt) + goto err; + if (fmt->pad != RKISP1_ISP_PAD_SINK && + fmt->pad != RKISP1_ISP_PAD_SOURCE_PATH) + goto err; + + mf = &fmt->format; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { + if (!cfg) + goto err; mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad); - fmt->format = *mf; - return 0; } if (fmt->pad == RKISP1_ISP_PAD_SINK) { @@ -1158,6 +1160,8 @@ static int rkisp1_isp_sd_get_fmt(struct v4l2_subdev *sd, mf->field = V4L2_FIELD_NONE; return 0; +err: + return -EINVAL; } static void rkisp1_isp_sd_try_fmt(struct v4l2_subdev *sd, @@ -1224,20 +1228,22 @@ static int rkisp1_isp_sd_set_fmt(struct v4l2_subdev *sd, { struct rkisp1_device *isp_dev = sd_to_isp_dev(sd); struct rkisp1_isp_subdev *isp_sd = &isp_dev->isp_sdev; - struct v4l2_mbus_framefmt *mf = &fmt->format; + struct v4l2_mbus_framefmt *mf; - if ((fmt->pad != RKISP1_ISP_PAD_SINK) && - (fmt->pad != RKISP1_ISP_PAD_SOURCE_PATH)) - return -EINVAL; + if (!fmt) + goto err; + if (fmt->pad != RKISP1_ISP_PAD_SINK && + fmt->pad != RKISP1_ISP_PAD_SOURCE_PATH) + goto err; + + mf = &fmt->format; rkisp1_isp_sd_try_fmt(sd, fmt->pad, mf); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { - struct v4l2_mbus_framefmt *try_mf; - + if (!cfg) + goto err; mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad); - *try_mf = *mf; - return 0; } if (fmt->pad == RKISP1_ISP_PAD_SINK) { @@ -1260,6 +1266,8 @@ static int rkisp1_isp_sd_set_fmt(struct v4l2_subdev *sd, } return 0; +err: + return -EINVAL; } static void rkisp1_isp_sd_try_crop(struct v4l2_subdev *sd, @@ -1302,41 +1310,46 @@ static int rkisp1_isp_sd_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_selection *sel) { struct rkisp1_isp_subdev *isp_sd = sd_to_isp_sd(sd); + struct v4l2_rect *crop; + + if (!sel) + goto err; if (sel->pad != RKISP1_ISP_PAD_SOURCE_PATH && sel->pad != RKISP1_ISP_PAD_SINK) - return -EINVAL; + goto err; + crop = &sel->r; if (sel->which == V4L2_SUBDEV_FORMAT_TRY) { - struct v4l2_rect *try_sel; - - try_sel = v4l2_subdev_get_try_crop(sd, cfg, sel->pad); - sel->r = *try_sel; - return 0; + if (!cfg) + goto err; + crop = v4l2_subdev_get_try_crop(sd, cfg, sel->pad); } switch (sel->target) { case V4L2_SEL_TGT_CROP_BOUNDS: if (sel->pad == RKISP1_ISP_PAD_SINK) { - sel->r.height = isp_sd->in_frm.height; - sel->r.width = isp_sd->in_frm.width; - sel->r.left = 0; - sel->r.top = 0; + crop->height = isp_sd->in_frm.height; + crop->width = isp_sd->in_frm.width; + crop->left = 0; + crop->top = 0; } else { - sel->r = isp_sd->in_crop; + *crop = isp_sd->in_crop; } break; case V4L2_SEL_TGT_CROP: if (sel->pad == RKISP1_ISP_PAD_SINK) - sel->r = isp_sd->in_crop; + *crop = isp_sd->in_crop; else - sel->r = isp_sd->out_crop; + *crop = isp_sd->out_crop; break; default: - return -EINVAL; + goto err; } return 0; +err: + return -EINVAL; } static int rkisp1_isp_sd_set_selection(struct v4l2_subdev *sd, @@ -1345,32 +1358,37 @@ static int rkisp1_isp_sd_set_selection(struct v4l2_subdev *sd, { struct rkisp1_isp_subdev *isp_sd = sd_to_isp_sd(sd); struct rkisp1_device *dev = sd_to_isp_dev(sd); + struct v4l2_rect *crop; + + if (!sel) + goto err; if (sel->pad != RKISP1_ISP_PAD_SOURCE_PATH && sel->pad != RKISP1_ISP_PAD_SINK) - return -EINVAL; + goto err; if (sel->target != V4L2_SEL_TGT_CROP) - return -EINVAL; + goto err; v4l2_dbg(1, rkisp1_debug, &dev->v4l2_dev, "%s: pad: %d sel(%d,%d)/%dx%d\n", __func__, sel->pad, sel->r.left, sel->r.top, sel->r.width, sel->r.height); rkisp1_isp_sd_try_crop(sd, cfg, sel); + crop = &sel->r; if (sel->which == V4L2_SUBDEV_FORMAT_TRY) { - struct v4l2_rect *try_sel; - - try_sel = v4l2_subdev_get_try_crop(sd, cfg, sel->pad); - *try_sel = sel->r; - return 0; + if (!cfg) + goto err; + crop = v4l2_subdev_get_try_crop(sd, cfg, sel->pad); } if (sel->pad == RKISP1_ISP_PAD_SINK) - isp_sd->in_crop = sel->r; + isp_sd->in_crop = *crop; else - isp_sd->out_crop = sel->r; + isp_sd->out_crop = *crop; return 0; +err: + goto err; } static void rkisp1_isp_read_add_fifo_data(struct rkisp1_device *dev) @@ -1472,7 +1490,13 @@ static int rkisp1_subdev_link_setup(struct media_entity *entity, u32 flags) { struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity); - struct rkisp1_device *dev = sd_to_isp_dev(sd); + struct rkisp1_device *dev; + + if (!sd) + return -ENODEV; + dev = sd_to_isp_dev(sd); + if (!dev) + return -ENODEV; if (!strcmp(remote->entity->name, DMA_VDEV_NAME)) { if (flags & MEDIA_LNK_FL_ENABLED)