diff options
| -rw-r--r-- | drivers/media/platform/s5p-fimc/fimc-mdevice.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/drivers/media/platform/s5p-fimc/fimc-mdevice.c b/drivers/media/platform/s5p-fimc/fimc-mdevice.c index a17fcb2d5d41..cd38d708ab58 100644 --- a/drivers/media/platform/s5p-fimc/fimc-mdevice.c +++ b/drivers/media/platform/s5p-fimc/fimc-mdevice.c | |||
| @@ -827,7 +827,7 @@ static int fimc_md_link_notify(struct media_pad *source, | |||
| 827 | struct fimc_pipeline *pipeline; | 827 | struct fimc_pipeline *pipeline; |
| 828 | struct v4l2_subdev *sd; | 828 | struct v4l2_subdev *sd; |
| 829 | struct mutex *lock; | 829 | struct mutex *lock; |
| 830 | int ret = 0; | 830 | int i, ret = 0; |
| 831 | int ref_count; | 831 | int ref_count; |
| 832 | 832 | ||
| 833 | if (media_entity_type(sink->entity) != MEDIA_ENT_T_V4L2_SUBDEV) | 833 | if (media_entity_type(sink->entity) != MEDIA_ENT_T_V4L2_SUBDEV) |
| @@ -854,29 +854,28 @@ static int fimc_md_link_notify(struct media_pad *source, | |||
| 854 | return 0; | 854 | return 0; |
| 855 | } | 855 | } |
| 856 | 856 | ||
| 857 | mutex_lock(lock); | ||
| 858 | ref_count = fimc ? fimc->vid_cap.refcnt : fimc_lite->ref_count; | ||
| 859 | |||
| 857 | if (!(flags & MEDIA_LNK_FL_ENABLED)) { | 860 | if (!(flags & MEDIA_LNK_FL_ENABLED)) { |
| 858 | int i; | 861 | if (ref_count > 0) { |
| 859 | mutex_lock(lock); | 862 | ret = __fimc_pipeline_close(pipeline); |
| 860 | ret = __fimc_pipeline_close(pipeline); | 863 | if (!ret && fimc) |
| 864 | fimc_ctrls_delete(fimc->vid_cap.ctx); | ||
| 865 | } | ||
| 861 | for (i = 0; i < IDX_MAX; i++) | 866 | for (i = 0; i < IDX_MAX; i++) |
| 862 | pipeline->subdevs[i] = NULL; | 867 | pipeline->subdevs[i] = NULL; |
| 863 | if (fimc) | 868 | } else if (ref_count > 0) { |
| 864 | fimc_ctrls_delete(fimc->vid_cap.ctx); | 869 | /* |
| 865 | mutex_unlock(lock); | 870 | * Link activation. Enable power of pipeline elements only if |
| 866 | return ret; | 871 | * the pipeline is already in use, i.e. its video node is open. |
| 872 | * Recreate the controls destroyed during the link deactivation. | ||
| 873 | */ | ||
| 874 | ret = __fimc_pipeline_open(pipeline, | ||
| 875 | source->entity, true); | ||
| 876 | if (!ret && fimc) | ||
| 877 | ret = fimc_capture_ctrls_create(fimc); | ||
| 867 | } | 878 | } |
| 868 | /* | ||
| 869 | * Link activation. Enable power of pipeline elements only if the | ||
| 870 | * pipeline is already in use, i.e. its video node is opened. | ||
| 871 | * Recreate the controls destroyed during the link deactivation. | ||
| 872 | */ | ||
| 873 | mutex_lock(lock); | ||
| 874 | |||
| 875 | ref_count = fimc ? fimc->vid_cap.refcnt : fimc_lite->ref_count; | ||
| 876 | if (ref_count > 0) | ||
| 877 | ret = __fimc_pipeline_open(pipeline, source->entity, true); | ||
| 878 | if (!ret && fimc) | ||
| 879 | ret = fimc_capture_ctrls_create(fimc); | ||
| 880 | 879 | ||
| 881 | mutex_unlock(lock); | 880 | mutex_unlock(lock); |
| 882 | return ret ? -EPIPE : ret; | 881 | return ret ? -EPIPE : ret; |
