diff options
Diffstat (limited to 'drivers/media/platform')
21 files changed, 88 insertions, 81 deletions
diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c b/drivers/media/platform/exynos-gsc/gsc-core.c index bfec9e65aef..19cbb12a12a 100644 --- a/drivers/media/platform/exynos-gsc/gsc-core.c +++ b/drivers/media/platform/exynos-gsc/gsc-core.c @@ -965,8 +965,10 @@ static struct platform_device_id gsc_driver_ids[] = {  MODULE_DEVICE_TABLE(platform, gsc_driver_ids);  static const struct of_device_id exynos_gsc_match[] = { -	{ .compatible = "samsung,exynos5250-gsc", -	.data = &gsc_v_100_drvdata, }, +	{ +		.compatible = "samsung,exynos5-gsc", +		.data = &gsc_v_100_drvdata, +	},  	{},  };  MODULE_DEVICE_TABLE(of, exynos_gsc_match); diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c index 3c7f00577bd..c065d040ed9 100644 --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c @@ -657,8 +657,7 @@ static int gsc_m2m_release(struct file *file)  	pr_debug("pid: %d, state: 0x%lx, refcnt= %d",  		task_pid_nr(current), gsc->state, gsc->m2m.refcnt); -	if (mutex_lock_interruptible(&gsc->lock)) -		return -ERESTARTSYS; +	mutex_lock(&gsc->lock);  	v4l2_m2m_ctx_release(ctx->m2m_ctx);  	gsc_ctrls_delete(ctx); @@ -732,6 +731,7 @@ int gsc_register_m2m_device(struct gsc_dev *gsc)  	gsc->vdev.ioctl_ops	= &gsc_m2m_ioctl_ops;  	gsc->vdev.release	= video_device_release_empty;  	gsc->vdev.lock		= &gsc->lock; +	gsc->vdev.vfl_dir	= VFL_DIR_M2M;  	snprintf(gsc->vdev.name, sizeof(gsc->vdev.name), "%s.%d:m2m",  					GSC_MODULE_NAME, gsc->id); diff --git a/drivers/media/platform/exynos-gsc/gsc-regs.h b/drivers/media/platform/exynos-gsc/gsc-regs.h index 533e9947a92..4678f9a6a4f 100644 --- a/drivers/media/platform/exynos-gsc/gsc-regs.h +++ b/drivers/media/platform/exynos-gsc/gsc-regs.h @@ -40,10 +40,10 @@  #define GSC_IN_ROT_YFLIP		(2 << 16)  #define GSC_IN_ROT_XFLIP		(1 << 16)  #define GSC_IN_RGB_TYPE_MASK		(3 << 14) -#define GSC_IN_RGB_HD_WIDE		(3 << 14) -#define GSC_IN_RGB_HD_NARROW		(2 << 14) -#define GSC_IN_RGB_SD_WIDE		(1 << 14) -#define GSC_IN_RGB_SD_NARROW		(0 << 14) +#define GSC_IN_RGB_HD_NARROW		(3 << 14) +#define GSC_IN_RGB_HD_WIDE		(2 << 14) +#define GSC_IN_RGB_SD_NARROW		(1 << 14) +#define GSC_IN_RGB_SD_WIDE		(0 << 14)  #define GSC_IN_YUV422_1P_ORDER_MASK	(1 << 13)  #define GSC_IN_YUV422_1P_ORDER_LSB_Y	(0 << 13)  #define GSC_IN_YUV422_1P_OEDER_LSB_C	(1 << 13) @@ -85,10 +85,10 @@  #define GSC_OUT_GLOBAL_ALPHA_MASK	(0xff << 24)  #define GSC_OUT_GLOBAL_ALPHA(x)		((x) << 24)  #define GSC_OUT_RGB_TYPE_MASK		(3 << 10) -#define GSC_OUT_RGB_HD_NARROW		(3 << 10) -#define GSC_OUT_RGB_HD_WIDE		(2 << 10) -#define GSC_OUT_RGB_SD_NARROW		(1 << 10) -#define GSC_OUT_RGB_SD_WIDE		(0 << 10) +#define GSC_OUT_RGB_HD_WIDE		(3 << 10) +#define GSC_OUT_RGB_HD_NARROW		(2 << 10) +#define GSC_OUT_RGB_SD_WIDE		(1 << 10) +#define GSC_OUT_RGB_SD_NARROW		(0 << 10)  #define GSC_OUT_YUV422_1P_ORDER_MASK	(1 << 9)  #define GSC_OUT_YUV422_1P_ORDER_LSB_Y	(0 << 9)  #define GSC_OUT_YUV422_1P_OEDER_LSB_C	(1 << 9) diff --git a/drivers/media/platform/omap3isp/ispccdc.c b/drivers/media/platform/omap3isp/ispccdc.c index 60181ab9606..aa9df9d71a7 100644 --- a/drivers/media/platform/omap3isp/ispccdc.c +++ b/drivers/media/platform/omap3isp/ispccdc.c @@ -1706,7 +1706,7 @@ static long ccdc_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)  }  static int ccdc_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh, -				const struct v4l2_event_subscription *sub) +				struct v4l2_event_subscription *sub)  {  	if (sub->type != V4L2_EVENT_FRAME_SYNC)  		return -EINVAL; @@ -1719,7 +1719,7 @@ static int ccdc_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,  }  static int ccdc_unsubscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh, -				  const struct v4l2_event_subscription *sub) +				  struct v4l2_event_subscription *sub)  {  	return v4l2_event_unsubscribe(fh, sub);  } diff --git a/drivers/media/platform/omap3isp/ispstat.c b/drivers/media/platform/omap3isp/ispstat.c index d7ac76b5c2a..b8640be692f 100644 --- a/drivers/media/platform/omap3isp/ispstat.c +++ b/drivers/media/platform/omap3isp/ispstat.c @@ -1025,7 +1025,7 @@ void omap3isp_stat_dma_isr(struct ispstat *stat)  int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,  				  struct v4l2_fh *fh, -				  const struct v4l2_event_subscription *sub) +				  struct v4l2_event_subscription *sub)  {  	struct ispstat *stat = v4l2_get_subdevdata(subdev); @@ -1037,7 +1037,7 @@ int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,  int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev,  				    struct v4l2_fh *fh, -				    const struct v4l2_event_subscription *sub) +				    struct v4l2_event_subscription *sub)  {  	return v4l2_event_unsubscribe(fh, sub);  } diff --git a/drivers/media/platform/omap3isp/ispstat.h b/drivers/media/platform/omap3isp/ispstat.h index a6fe653eb23..9b7c8654dc8 100644 --- a/drivers/media/platform/omap3isp/ispstat.h +++ b/drivers/media/platform/omap3isp/ispstat.h @@ -147,10 +147,10 @@ int omap3isp_stat_init(struct ispstat *stat, const char *name,  void omap3isp_stat_cleanup(struct ispstat *stat);  int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,  				  struct v4l2_fh *fh, -				  const struct v4l2_event_subscription *sub); +				  struct v4l2_event_subscription *sub);  int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev,  				    struct v4l2_fh *fh, -				    const struct v4l2_event_subscription *sub); +				    struct v4l2_event_subscription *sub);  int omap3isp_stat_s_stream(struct v4l2_subdev *subdev, int enable);  int omap3isp_stat_busy(struct ispstat *stat); diff --git a/drivers/media/platform/omap3isp/ispvideo.c b/drivers/media/platform/omap3isp/ispvideo.c index a0b737fecf1..75cd309035f 100644 --- a/drivers/media/platform/omap3isp/ispvideo.c +++ b/drivers/media/platform/omap3isp/ispvideo.c @@ -792,7 +792,7 @@ isp_video_get_crop(struct file *file, void *fh, struct v4l2_crop *crop)  }  static int -isp_video_set_crop(struct file *file, void *fh, struct v4l2_crop *crop) +isp_video_set_crop(struct file *file, void *fh, const struct v4l2_crop *crop)  {  	struct isp_video *video = video_drvdata(file);  	struct v4l2_subdev *subdev; diff --git a/drivers/media/platform/s5p-fimc/Kconfig b/drivers/media/platform/s5p-fimc/Kconfig index 8f090a8f270..c16b20d86ed 100644 --- a/drivers/media/platform/s5p-fimc/Kconfig +++ b/drivers/media/platform/s5p-fimc/Kconfig @@ -24,6 +24,7 @@ config VIDEO_S5P_FIMC  config VIDEO_S5P_MIPI_CSIS  	tristate "S5P/EXYNOS MIPI-CSI2 receiver (MIPI-CSIS) driver"  	depends on REGULATOR +	select S5P_SETUP_MIPIPHY  	help  	  This is a V4L2 driver for Samsung S5P and EXYNOS4 SoC MIPI-CSI2  	  receiver (MIPI-CSIS) devices. diff --git a/drivers/media/platform/s5p-fimc/fimc-capture.c b/drivers/media/platform/s5p-fimc/fimc-capture.c index 367efd164d0..891ee873c62 100644 --- a/drivers/media/platform/s5p-fimc/fimc-capture.c +++ b/drivers/media/platform/s5p-fimc/fimc-capture.c @@ -556,8 +556,7 @@ static int fimc_capture_close(struct file *file)  	dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state); -	if (mutex_lock_interruptible(&fimc->lock)) -		return -ERESTARTSYS; +	mutex_lock(&fimc->lock);  	if (--fimc->vid_cap.refcnt == 0) {  		clear_bit(ST_CAPT_BUSY, &fimc->state); @@ -1736,7 +1735,9 @@ static int fimc_register_capture_device(struct fimc_dev *fimc,  	q->mem_ops = &vb2_dma_contig_memops;  	q->buf_struct_size = sizeof(struct fimc_vid_buffer); -	vb2_queue_init(q); +	ret = vb2_queue_init(q); +	if (ret) +		goto err_ent;  	vid_cap->vd_pad.flags = MEDIA_PAD_FL_SINK;  	ret = media_entity_init(&vfd->entity, 1, &vid_cap->vd_pad, 0); @@ -1772,9 +1773,13 @@ static int fimc_capture_subdev_registered(struct v4l2_subdev *sd)  	if (ret)  		return ret; +	fimc->pipeline_ops = v4l2_get_subdev_hostdata(sd); +  	ret = fimc_register_capture_device(fimc, sd->v4l2_dev); -	if (ret) +	if (ret) {  		fimc_unregister_m2m_device(fimc); +		fimc->pipeline_ops = NULL; +	}  	return ret;  } @@ -1791,6 +1796,7 @@ static void fimc_capture_subdev_unregistered(struct v4l2_subdev *sd)  	if (video_is_registered(&fimc->vid_cap.vfd)) {  		video_unregister_device(&fimc->vid_cap.vfd);  		media_entity_cleanup(&fimc->vid_cap.vfd.entity); +		fimc->pipeline_ops = NULL;  	}  	kfree(fimc->vid_cap.ctx);  	fimc->vid_cap.ctx = NULL; diff --git a/drivers/media/platform/s5p-fimc/fimc-lite.c b/drivers/media/platform/s5p-fimc/fimc-lite.c index 70bcf39de87..1b309a72f09 100644 --- a/drivers/media/platform/s5p-fimc/fimc-lite.c +++ b/drivers/media/platform/s5p-fimc/fimc-lite.c @@ -491,8 +491,7 @@ static int fimc_lite_close(struct file *file)  	struct fimc_lite *fimc = video_drvdata(file);  	int ret; -	if (mutex_lock_interruptible(&fimc->lock)) -		return -ERESTARTSYS; +	mutex_lock(&fimc->lock);  	if (--fimc->ref_count == 0 && fimc->out_path == FIMC_IO_DMA) {  		clear_bit(ST_FLITE_IN_USE, &fimc->state); @@ -1253,7 +1252,9 @@ static int fimc_lite_subdev_registered(struct v4l2_subdev *sd)  	q->buf_struct_size = sizeof(struct flite_buffer);  	q->drv_priv = fimc; -	vb2_queue_init(q); +	ret = vb2_queue_init(q); +	if (ret < 0) +		return ret;  	fimc->vd_pad.flags = MEDIA_PAD_FL_SINK;  	ret = media_entity_init(&vfd->entity, 1, &fimc->vd_pad, 0); @@ -1261,10 +1262,12 @@ static int fimc_lite_subdev_registered(struct v4l2_subdev *sd)  		return ret;  	video_set_drvdata(vfd, fimc); +	fimc->pipeline_ops = v4l2_get_subdev_hostdata(sd);  	ret = video_register_device(vfd, VFL_TYPE_GRABBER, -1);  	if (ret < 0) {  		media_entity_cleanup(&vfd->entity); +		fimc->pipeline_ops = NULL;  		return ret;  	} @@ -1283,6 +1286,7 @@ static void fimc_lite_subdev_unregistered(struct v4l2_subdev *sd)  	if (video_is_registered(&fimc->vfd)) {  		video_unregister_device(&fimc->vfd);  		media_entity_cleanup(&fimc->vfd.entity); +		fimc->pipeline_ops = NULL;  	}  } diff --git a/drivers/media/platform/s5p-fimc/fimc-m2m.c b/drivers/media/platform/s5p-fimc/fimc-m2m.c index 4500e44f685..62afed3162e 100644 --- a/drivers/media/platform/s5p-fimc/fimc-m2m.c +++ b/drivers/media/platform/s5p-fimc/fimc-m2m.c @@ -718,8 +718,7 @@ static int fimc_m2m_release(struct file *file)  	dbg("pid: %d, state: 0x%lx, refcnt= %d",  		task_pid_nr(current), fimc->state, fimc->m2m.refcnt); -	if (mutex_lock_interruptible(&fimc->lock)) -		return -ERESTARTSYS; +	mutex_lock(&fimc->lock);  	v4l2_m2m_ctx_release(ctx->m2m_ctx);  	fimc_ctrls_delete(ctx); diff --git a/drivers/media/platform/s5p-fimc/fimc-mdevice.c b/drivers/media/platform/s5p-fimc/fimc-mdevice.c index 80ada5882f6..0531ab70a94 100644 --- a/drivers/media/platform/s5p-fimc/fimc-mdevice.c +++ b/drivers/media/platform/s5p-fimc/fimc-mdevice.c @@ -343,53 +343,50 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)  static int fimc_register_callback(struct device *dev, void *p)  {  	struct fimc_dev *fimc = dev_get_drvdata(dev); -	struct v4l2_subdev *sd = &fimc->vid_cap.subdev; +	struct v4l2_subdev *sd;  	struct fimc_md *fmd = p; -	int ret = 0; - -	if (!fimc || !fimc->pdev) -		return 0; +	int ret; -	if (fimc->pdev->id < 0 || fimc->pdev->id >= FIMC_MAX_DEVS) +	if (fimc == NULL || fimc->id >= FIMC_MAX_DEVS)  		return 0; -	fimc->pipeline_ops = &fimc_pipeline_ops; -	fmd->fimc[fimc->pdev->id] = fimc; +	sd = &fimc->vid_cap.subdev;  	sd->grp_id = FIMC_GROUP_ID; +	v4l2_set_subdev_hostdata(sd, (void *)&fimc_pipeline_ops);  	ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd);  	if (ret) {  		v4l2_err(&fmd->v4l2_dev, "Failed to register FIMC.%d (%d)\n",  			 fimc->id, ret); +		return ret;  	} -	return ret; +	fmd->fimc[fimc->id] = fimc; +	return 0;  }  static int fimc_lite_register_callback(struct device *dev, void *p)  {  	struct fimc_lite *fimc = dev_get_drvdata(dev); -	struct v4l2_subdev *sd = &fimc->subdev;  	struct fimc_md *fmd = p;  	int ret; -	if (fimc == NULL) +	if (fimc == NULL || fimc->index >= FIMC_LITE_MAX_DEVS)  		return 0; -	if (fimc->index >= FIMC_LITE_MAX_DEVS) -		return 0; - -	fimc->pipeline_ops = &fimc_pipeline_ops; -	fmd->fimc_lite[fimc->index] = fimc; -	sd->grp_id = FLITE_GROUP_ID; +	fimc->subdev.grp_id = FLITE_GROUP_ID; +	v4l2_set_subdev_hostdata(&fimc->subdev, (void *)&fimc_pipeline_ops); -	ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd); +	ret = v4l2_device_register_subdev(&fmd->v4l2_dev, &fimc->subdev);  	if (ret) {  		v4l2_err(&fmd->v4l2_dev,  			 "Failed to register FIMC-LITE.%d (%d)\n",  			 fimc->index, ret); +		return ret;  	} -	return ret; + +	fmd->fimc_lite[fimc->index] = fimc; +	return 0;  }  static int csis_register_callback(struct device *dev, void *p) @@ -407,10 +404,12 @@ static int csis_register_callback(struct device *dev, void *p)  	v4l2_info(sd, "csis%d sd: %s\n", pdev->id, sd->name);  	id = pdev->id < 0 ? 0 : pdev->id; -	fmd->csis[id].sd = sd;  	sd->grp_id = CSIS_GROUP_ID; +  	ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd); -	if (ret) +	if (!ret) +		fmd->csis[id].sd = sd; +	else  		v4l2_err(&fmd->v4l2_dev,  			 "Failed to register CSIS subdevice: %d\n", ret);  	return ret; diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c index 130f4ac8649..3afe879d54d 100644 --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c @@ -381,11 +381,8 @@ static void s5p_mfc_handle_frame(struct s5p_mfc_ctx *ctx,  		ctx->consumed_stream += s5p_mfc_hw_call(dev->mfc_ops,  						get_consumed_stream, dev);  		if (ctx->codec_mode != S5P_MFC_CODEC_H264_DEC && -			s5p_mfc_hw_call(dev->mfc_ops, -				get_dec_frame_type, dev) == -					S5P_FIMV_DECODE_FRAME_P_FRAME -					&& ctx->consumed_stream + STUFF_BYTE < -					src_buf->b->v4l2_planes[0].bytesused) { +			ctx->consumed_stream + STUFF_BYTE < +			src_buf->b->v4l2_planes[0].bytesused) {  			/* Run MFC again on the same buffer */  			mfc_debug(2, "Running again the same buffer\n");  			ctx->after_packed_pb = 1; diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c b/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c index 50b5bee3c44..3a8cfd9fc1b 100644 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c @@ -1762,7 +1762,7 @@ int s5p_mfc_get_dspl_y_adr_v6(struct s5p_mfc_dev *dev)  int s5p_mfc_get_dec_y_adr_v6(struct s5p_mfc_dev *dev)  { -	return mfc_read(dev, S5P_FIMV_D_DISPLAY_LUMA_ADDR_V6); +	return mfc_read(dev, S5P_FIMV_D_DECODED_LUMA_ADDR_V6);  }  int s5p_mfc_get_dspl_status_v6(struct s5p_mfc_dev *dev) diff --git a/drivers/media/platform/sh_vou.c b/drivers/media/platform/sh_vou.c index 85fd312f0a8..a1c87f0ceaa 100644 --- a/drivers/media/platform/sh_vou.c +++ b/drivers/media/platform/sh_vou.c @@ -935,9 +935,10 @@ static int sh_vou_g_crop(struct file *file, void *fh, struct v4l2_crop *a)  /* Assume a dull encoder, do all the work ourselves. */  static int sh_vou_s_crop(struct file *file, void *fh, const struct v4l2_crop *a)  { +	struct v4l2_crop a_writable = *a;  	struct video_device *vdev = video_devdata(file);  	struct sh_vou_device *vou_dev = video_get_drvdata(vdev); -	struct v4l2_rect *rect = &a->c; +	struct v4l2_rect *rect = &a_writable.c;  	struct v4l2_crop sd_crop = {.type = V4L2_BUF_TYPE_VIDEO_OUTPUT};  	struct v4l2_pix_format *pix = &vou_dev->pix;  	struct sh_vou_geometry geo; diff --git a/drivers/media/platform/soc_camera/mx1_camera.c b/drivers/media/platform/soc_camera/mx1_camera.c index bbe70991d30..032b8c9097f 100644 --- a/drivers/media/platform/soc_camera/mx1_camera.c +++ b/drivers/media/platform/soc_camera/mx1_camera.c @@ -470,14 +470,6 @@ static void mx1_camera_remove_device(struct soc_camera_device *icd)  	pcdev->icd = NULL;  } -static int mx1_camera_set_crop(struct soc_camera_device *icd, -			       struct v4l2_crop *a) -{ -	struct v4l2_subdev *sd = soc_camera_to_subdev(icd); - -	return v4l2_subdev_call(sd, video, s_crop, a); -} -  static int mx1_camera_set_bus_param(struct soc_camera_device *icd)  {  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd); @@ -689,7 +681,6 @@ static struct soc_camera_host_ops mx1_soc_camera_host_ops = {  	.add		= mx1_camera_add_device,  	.remove		= mx1_camera_remove_device,  	.set_bus_param	= mx1_camera_set_bus_param, -	.set_crop	= mx1_camera_set_crop,  	.set_fmt	= mx1_camera_set_fmt,  	.try_fmt	= mx1_camera_try_fmt,  	.init_videobuf	= mx1_camera_init_videobuf, diff --git a/drivers/media/platform/soc_camera/mx2_camera.c b/drivers/media/platform/soc_camera/mx2_camera.c index 9fd9d1c5b21..9a55f4c4c7f 100644 --- a/drivers/media/platform/soc_camera/mx2_camera.c +++ b/drivers/media/platform/soc_camera/mx2_camera.c @@ -864,8 +864,10 @@ static int mx2_start_streaming(struct vb2_queue *q, unsigned int count)  		bytesperline = soc_mbus_bytes_per_line(icd->user_width,  				icd->current_fmt->host_fmt); -		if (bytesperline < 0) +		if (bytesperline < 0) { +			spin_unlock_irqrestore(&pcdev->lock, flags);  			return bytesperline; +		}  		/*  		 * I didn't manage to properly enable/disable the prp @@ -878,8 +880,10 @@ static int mx2_start_streaming(struct vb2_queue *q, unsigned int count)  		pcdev->discard_buffer = dma_alloc_coherent(ici->v4l2_dev.dev,  				pcdev->discard_size, &pcdev->discard_buffer_dma,  				GFP_KERNEL); -		if (!pcdev->discard_buffer) +		if (!pcdev->discard_buffer) { +			spin_unlock_irqrestore(&pcdev->lock, flags);  			return -ENOMEM; +		}  		pcdev->buf_discard[0].discard = true;  		list_add_tail(&pcdev->buf_discard[0].queue, @@ -1099,9 +1103,10 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)  }  static int mx2_camera_set_crop(struct soc_camera_device *icd, -				struct v4l2_crop *a) +				const struct v4l2_crop *a)  { -	struct v4l2_rect *rect = &a->c; +	struct v4l2_crop a_writable = *a; +	struct v4l2_rect *rect = &a_writable.c;  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);  	struct v4l2_mbus_framefmt mf;  	int ret; diff --git a/drivers/media/platform/soc_camera/mx3_camera.c b/drivers/media/platform/soc_camera/mx3_camera.c index 3557ac97e43..261f6e9e1b1 100644 --- a/drivers/media/platform/soc_camera/mx3_camera.c +++ b/drivers/media/platform/soc_camera/mx3_camera.c @@ -799,9 +799,10 @@ static inline void stride_align(__u32 *width)   * default g_crop and cropcap from soc_camera.c   */  static int mx3_camera_set_crop(struct soc_camera_device *icd, -			       struct v4l2_crop *a) +			       const struct v4l2_crop *a)  { -	struct v4l2_rect *rect = &a->c; +	struct v4l2_crop a_writable = *a; +	struct v4l2_rect *rect = &a_writable.c;  	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);  	struct mx3_camera_dev *mx3_cam = ici->priv;  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd); diff --git a/drivers/media/platform/soc_camera/omap1_camera.c b/drivers/media/platform/soc_camera/omap1_camera.c index fa08c7695cc..13636a58510 100644 --- a/drivers/media/platform/soc_camera/omap1_camera.c +++ b/drivers/media/platform/soc_camera/omap1_camera.c @@ -1215,9 +1215,9 @@ static int set_mbus_format(struct omap1_cam_dev *pcdev, struct device *dev,  }  static int omap1_cam_set_crop(struct soc_camera_device *icd, -			       struct v4l2_crop *crop) +			       const struct v4l2_crop *crop)  { -	struct v4l2_rect *rect = &crop->c; +	const struct v4l2_rect *rect = &crop->c;  	const struct soc_camera_format_xlate *xlate = icd->current_fmt;  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);  	struct device *dev = icd->parent; diff --git a/drivers/media/platform/soc_camera/pxa_camera.c b/drivers/media/platform/soc_camera/pxa_camera.c index 1e3776d08da..3434ffe79c6 100644 --- a/drivers/media/platform/soc_camera/pxa_camera.c +++ b/drivers/media/platform/soc_camera/pxa_camera.c @@ -1337,9 +1337,9 @@ static int pxa_camera_check_frame(u32 width, u32 height)  }  static int pxa_camera_set_crop(struct soc_camera_device *icd, -			       struct v4l2_crop *a) +			       const struct v4l2_crop *a)  { -	struct v4l2_rect *rect = &a->c; +	const struct v4l2_rect *rect = &a->c;  	struct device *dev = icd->parent;  	struct soc_camera_host *ici = to_soc_camera_host(dev);  	struct pxa_camera_dev *pcdev = ici->priv; diff --git a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c index 0a24253dcda..2d8861c0e8f 100644 --- a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c +++ b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c @@ -1182,13 +1182,13 @@ static void sh_mobile_ceu_put_formats(struct soc_camera_device *icd)  }  /* Check if any dimension of r1 is smaller than respective one of r2 */ -static bool is_smaller(struct v4l2_rect *r1, struct v4l2_rect *r2) +static bool is_smaller(const struct v4l2_rect *r1, const struct v4l2_rect *r2)  {  	return r1->width < r2->width || r1->height < r2->height;  }  /* Check if r1 fails to cover r2 */ -static bool is_inside(struct v4l2_rect *r1, struct v4l2_rect *r2) +static bool is_inside(const struct v4l2_rect *r1, const struct v4l2_rect *r2)  {  	return r1->left > r2->left || r1->top > r2->top ||  		r1->left + r1->width < r2->left + r2->width || @@ -1263,7 +1263,7 @@ static void update_subrect(struct sh_mobile_ceu_cam *cam)   * 3. if (2) failed, try to request the maximum image   */  static int client_s_crop(struct soc_camera_device *icd, struct v4l2_crop *crop, -			 const struct v4l2_crop *cam_crop) +			 struct v4l2_crop *cam_crop)  {  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);  	struct v4l2_rect *rect = &crop->c, *cam_rect = &cam_crop->c; @@ -1519,7 +1519,8 @@ static int client_scale(struct soc_camera_device *icd,  static int sh_mobile_ceu_set_crop(struct soc_camera_device *icd,  				  const struct v4l2_crop *a)  { -	struct v4l2_rect *rect = &a->c; +	struct v4l2_crop a_writable = *a; +	const struct v4l2_rect *rect = &a_writable.c;  	struct device *dev = icd->parent;  	struct soc_camera_host *ici = to_soc_camera_host(dev);  	struct sh_mobile_ceu_dev *pcdev = ici->priv; @@ -1545,7 +1546,7 @@ static int sh_mobile_ceu_set_crop(struct soc_camera_device *icd,  	 * 1. - 2. Apply iterative camera S_CROP for new input window, read back  	 * actual camera rectangle.  	 */ -	ret = client_s_crop(icd, a, &cam_crop); +	ret = client_s_crop(icd, &a_writable, &cam_crop);  	if (ret < 0)  		return ret; @@ -1946,7 +1947,7 @@ static int sh_mobile_ceu_try_fmt(struct soc_camera_device *icd,  }  static int sh_mobile_ceu_set_livecrop(struct soc_camera_device *icd, -				      struct v4l2_crop *a) +				      const struct v4l2_crop *a)  {  	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);  	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);  |