diff options
Diffstat (limited to 'drivers/media/platform/s5p-fimc/fimc-capture.c')
-rw-r--r-- | drivers/media/platform/s5p-fimc/fimc-capture.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/media/platform/s5p-fimc/fimc-capture.c b/drivers/media/platform/s5p-fimc/fimc-capture.c index 367efd164d0f..891ee873c62b 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) | |||
556 | 556 | ||
557 | dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state); | 557 | dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state); |
558 | 558 | ||
559 | if (mutex_lock_interruptible(&fimc->lock)) | 559 | mutex_lock(&fimc->lock); |
560 | return -ERESTARTSYS; | ||
561 | 560 | ||
562 | if (--fimc->vid_cap.refcnt == 0) { | 561 | if (--fimc->vid_cap.refcnt == 0) { |
563 | clear_bit(ST_CAPT_BUSY, &fimc->state); | 562 | clear_bit(ST_CAPT_BUSY, &fimc->state); |
@@ -1736,7 +1735,9 @@ static int fimc_register_capture_device(struct fimc_dev *fimc, | |||
1736 | q->mem_ops = &vb2_dma_contig_memops; | 1735 | q->mem_ops = &vb2_dma_contig_memops; |
1737 | q->buf_struct_size = sizeof(struct fimc_vid_buffer); | 1736 | q->buf_struct_size = sizeof(struct fimc_vid_buffer); |
1738 | 1737 | ||
1739 | vb2_queue_init(q); | 1738 | ret = vb2_queue_init(q); |
1739 | if (ret) | ||
1740 | goto err_ent; | ||
1740 | 1741 | ||
1741 | vid_cap->vd_pad.flags = MEDIA_PAD_FL_SINK; | 1742 | vid_cap->vd_pad.flags = MEDIA_PAD_FL_SINK; |
1742 | ret = media_entity_init(&vfd->entity, 1, &vid_cap->vd_pad, 0); | 1743 | 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) | |||
1772 | if (ret) | 1773 | if (ret) |
1773 | return ret; | 1774 | return ret; |
1774 | 1775 | ||
1776 | fimc->pipeline_ops = v4l2_get_subdev_hostdata(sd); | ||
1777 | |||
1775 | ret = fimc_register_capture_device(fimc, sd->v4l2_dev); | 1778 | ret = fimc_register_capture_device(fimc, sd->v4l2_dev); |
1776 | if (ret) | 1779 | if (ret) { |
1777 | fimc_unregister_m2m_device(fimc); | 1780 | fimc_unregister_m2m_device(fimc); |
1781 | fimc->pipeline_ops = NULL; | ||
1782 | } | ||
1778 | 1783 | ||
1779 | return ret; | 1784 | return ret; |
1780 | } | 1785 | } |
@@ -1791,6 +1796,7 @@ static void fimc_capture_subdev_unregistered(struct v4l2_subdev *sd) | |||
1791 | if (video_is_registered(&fimc->vid_cap.vfd)) { | 1796 | if (video_is_registered(&fimc->vid_cap.vfd)) { |
1792 | video_unregister_device(&fimc->vid_cap.vfd); | 1797 | video_unregister_device(&fimc->vid_cap.vfd); |
1793 | media_entity_cleanup(&fimc->vid_cap.vfd.entity); | 1798 | media_entity_cleanup(&fimc->vid_cap.vfd.entity); |
1799 | fimc->pipeline_ops = NULL; | ||
1794 | } | 1800 | } |
1795 | kfree(fimc->vid_cap.ctx); | 1801 | kfree(fimc->vid_cap.ctx); |
1796 | fimc->vid_cap.ctx = NULL; | 1802 | fimc->vid_cap.ctx = NULL; |