diff options
Diffstat (limited to 'drivers/media/platform/mx2_emmaprp.c')
| -rw-r--r-- | drivers/media/platform/mx2_emmaprp.c | 50 | 
1 files changed, 22 insertions, 28 deletions
diff --git a/drivers/media/platform/mx2_emmaprp.c b/drivers/media/platform/mx2_emmaprp.c index c690435853b..fa8f7cabe36 100644 --- a/drivers/media/platform/mx2_emmaprp.c +++ b/drivers/media/platform/mx2_emmaprp.c @@ -207,10 +207,8 @@ struct emmaprp_dev {  	struct mutex		dev_mutex;  	spinlock_t		irqlock; -	int			irq_emma;  	void __iomem		*base_emma;  	struct clk		*clk_emma_ahb, *clk_emma_ipg; -	struct resource		*res_emma;  	struct v4l2_m2m_dev	*m2m_dev;  	struct vb2_alloc_ctx	*alloc_ctx; @@ -377,8 +375,13 @@ static irqreturn_t emmaprp_irq(int irq_emma, void *data)  			src_vb = v4l2_m2m_src_buf_remove(curr_ctx->m2m_ctx);  			dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx); -			src_vb->v4l2_buf.timestamp = dst_vb->v4l2_buf.timestamp; -			src_vb->v4l2_buf.timecode = dst_vb->v4l2_buf.timecode; +			dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp; +			dst_vb->v4l2_buf.flags &= +				~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; +			dst_vb->v4l2_buf.flags |= +				src_vb->v4l2_buf.flags +				& V4L2_BUF_FLAG_TSTAMP_SRC_MASK; +			dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;  			spin_lock_irqsave(&pcdev->irqlock, flags);  			v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_DONE); @@ -766,7 +769,7 @@ static int queue_init(void *priv, struct vb2_queue *src_vq,  	src_vq->buf_struct_size = sizeof(struct v4l2_m2m_buffer);  	src_vq->ops = &emmaprp_qops;  	src_vq->mem_ops = &vb2_dma_contig_memops; -	src_vq->timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_COPY; +	src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;  	ret = vb2_queue_init(src_vq);  	if (ret) @@ -778,7 +781,7 @@ static int queue_init(void *priv, struct vb2_queue *src_vq,  	dst_vq->buf_struct_size = sizeof(struct v4l2_m2m_buffer);  	dst_vq->ops = &emmaprp_qops;  	dst_vq->mem_ops = &vb2_dma_contig_memops; -	dst_vq->timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_COPY; +	dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;  	return vb2_queue_init(dst_vq);  } @@ -896,9 +899,8 @@ static int emmaprp_probe(struct platform_device *pdev)  {  	struct emmaprp_dev *pcdev;  	struct video_device *vfd; -	struct resource *res_emma; -	int irq_emma; -	int ret; +	struct resource *res; +	int irq, ret;  	pcdev = devm_kzalloc(&pdev->dev, sizeof(*pcdev), GFP_KERNEL);  	if (!pcdev) @@ -915,12 +917,10 @@ static int emmaprp_probe(struct platform_device *pdev)  	if (IS_ERR(pcdev->clk_emma_ahb))  		return PTR_ERR(pcdev->clk_emma_ahb); -	irq_emma = platform_get_irq(pdev, 0); -	res_emma = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (irq_emma < 0 || res_emma == NULL) { -		dev_err(&pdev->dev, "Missing platform resources data\n"); -		return -ENODEV; -	} +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	pcdev->base_emma = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(pcdev->base_emma)) +		return PTR_ERR(pcdev->base_emma);  	ret = v4l2_device_register(&pdev->dev, &pcdev->v4l2_dev);  	if (ret) @@ -947,20 +947,11 @@ static int emmaprp_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, pcdev); -	pcdev->base_emma = devm_ioremap_resource(&pdev->dev, res_emma); -	if (IS_ERR(pcdev->base_emma)) { -		ret = PTR_ERR(pcdev->base_emma); -		goto rel_vdev; -	} - -	pcdev->irq_emma = irq_emma; -	pcdev->res_emma = res_emma; - -	if (devm_request_irq(&pdev->dev, pcdev->irq_emma, emmaprp_irq, -			     0, MEM2MEM_NAME, pcdev) < 0) { -		ret = -ENODEV; +	irq = platform_get_irq(pdev, 0); +	ret = devm_request_irq(&pdev->dev, irq, emmaprp_irq, 0, +			       dev_name(&pdev->dev), pcdev); +	if (ret)  		goto rel_vdev; -	}  	pcdev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);  	if (IS_ERR(pcdev->alloc_ctx)) { @@ -994,6 +985,8 @@ rel_vdev:  unreg_dev:  	v4l2_device_unregister(&pcdev->v4l2_dev); +	mutex_destroy(&pcdev->dev_mutex); +  	return ret;  } @@ -1007,6 +1000,7 @@ static int emmaprp_remove(struct platform_device *pdev)  	v4l2_m2m_release(pcdev->m2m_dev);  	vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx);  	v4l2_device_unregister(&pcdev->v4l2_dev); +	mutex_destroy(&pcdev->dev_mutex);  	return 0;  }  | 
