diff options
author | Arun Kumar K <arun.kk@samsung.com> | 2013-07-26 06:28:01 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2013-09-03 08:24:21 -0400 |
commit | d0b1c31349969973204fad21a076aecf131cc5e4 (patch) | |
tree | 4ba0266d423fefbd8b6e938ed2df15919ce03454 | |
parent | 3396b096c54a84603c51bd705effa88f7f5b0d76 (diff) |
[media] exynos-gsc: Register v4l2 device
Gscaler video device registration was happening without reference to
a parent v4l2_dev causing probe to fail. The patch creates a parent
v4l2 device and uses it for the gsc m2m video device registration.
This fixes regression introduced with comit commit 1c1d86a1ea07506
[media] v4l2: always require v4l2_dev, rename parent to dev_parent
Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Cc: stable@vger.kernel.org
-rw-r--r-- | drivers/media/platform/exynos-gsc/gsc-core.c | 9 | ||||
-rw-r--r-- | drivers/media/platform/exynos-gsc/gsc-core.h | 1 | ||||
-rw-r--r-- | drivers/media/platform/exynos-gsc/gsc-m2m.c | 1 |
3 files changed, 10 insertions, 1 deletions
diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c b/drivers/media/platform/exynos-gsc/gsc-core.c index fe69eaeb907a..9d0cc04d7ab7 100644 --- a/drivers/media/platform/exynos-gsc/gsc-core.c +++ b/drivers/media/platform/exynos-gsc/gsc-core.c | |||
@@ -1122,10 +1122,14 @@ static int gsc_probe(struct platform_device *pdev) | |||
1122 | goto err_clk; | 1122 | goto err_clk; |
1123 | } | 1123 | } |
1124 | 1124 | ||
1125 | ret = gsc_register_m2m_device(gsc); | 1125 | ret = v4l2_device_register(dev, &gsc->v4l2_dev); |
1126 | if (ret) | 1126 | if (ret) |
1127 | goto err_clk; | 1127 | goto err_clk; |
1128 | 1128 | ||
1129 | ret = gsc_register_m2m_device(gsc); | ||
1130 | if (ret) | ||
1131 | goto err_v4l2; | ||
1132 | |||
1129 | platform_set_drvdata(pdev, gsc); | 1133 | platform_set_drvdata(pdev, gsc); |
1130 | pm_runtime_enable(dev); | 1134 | pm_runtime_enable(dev); |
1131 | ret = pm_runtime_get_sync(&pdev->dev); | 1135 | ret = pm_runtime_get_sync(&pdev->dev); |
@@ -1147,6 +1151,8 @@ err_pm: | |||
1147 | pm_runtime_put(dev); | 1151 | pm_runtime_put(dev); |
1148 | err_m2m: | 1152 | err_m2m: |
1149 | gsc_unregister_m2m_device(gsc); | 1153 | gsc_unregister_m2m_device(gsc); |
1154 | err_v4l2: | ||
1155 | v4l2_device_unregister(&gsc->v4l2_dev); | ||
1150 | err_clk: | 1156 | err_clk: |
1151 | gsc_clk_put(gsc); | 1157 | gsc_clk_put(gsc); |
1152 | return ret; | 1158 | return ret; |
@@ -1157,6 +1163,7 @@ static int gsc_remove(struct platform_device *pdev) | |||
1157 | struct gsc_dev *gsc = platform_get_drvdata(pdev); | 1163 | struct gsc_dev *gsc = platform_get_drvdata(pdev); |
1158 | 1164 | ||
1159 | gsc_unregister_m2m_device(gsc); | 1165 | gsc_unregister_m2m_device(gsc); |
1166 | v4l2_device_unregister(&gsc->v4l2_dev); | ||
1160 | 1167 | ||
1161 | vb2_dma_contig_cleanup_ctx(gsc->alloc_ctx); | 1168 | vb2_dma_contig_cleanup_ctx(gsc->alloc_ctx); |
1162 | pm_runtime_disable(&pdev->dev); | 1169 | pm_runtime_disable(&pdev->dev); |
diff --git a/drivers/media/platform/exynos-gsc/gsc-core.h b/drivers/media/platform/exynos-gsc/gsc-core.h index cc19bba09bd1..76435d3bf62d 100644 --- a/drivers/media/platform/exynos-gsc/gsc-core.h +++ b/drivers/media/platform/exynos-gsc/gsc-core.h | |||
@@ -343,6 +343,7 @@ struct gsc_dev { | |||
343 | unsigned long state; | 343 | unsigned long state; |
344 | struct vb2_alloc_ctx *alloc_ctx; | 344 | struct vb2_alloc_ctx *alloc_ctx; |
345 | struct video_device vdev; | 345 | struct video_device vdev; |
346 | struct v4l2_device v4l2_dev; | ||
346 | }; | 347 | }; |
347 | 348 | ||
348 | /** | 349 | /** |
diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c index 40a73f7d20da..e576ff2de3de 100644 --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c | |||
@@ -751,6 +751,7 @@ int gsc_register_m2m_device(struct gsc_dev *gsc) | |||
751 | gsc->vdev.release = video_device_release_empty; | 751 | gsc->vdev.release = video_device_release_empty; |
752 | gsc->vdev.lock = &gsc->lock; | 752 | gsc->vdev.lock = &gsc->lock; |
753 | gsc->vdev.vfl_dir = VFL_DIR_M2M; | 753 | gsc->vdev.vfl_dir = VFL_DIR_M2M; |
754 | gsc->vdev.v4l2_dev = &gsc->v4l2_dev; | ||
754 | snprintf(gsc->vdev.name, sizeof(gsc->vdev.name), "%s.%d:m2m", | 755 | snprintf(gsc->vdev.name, sizeof(gsc->vdev.name), "%s.%d:m2m", |
755 | GSC_MODULE_NAME, gsc->id); | 756 | GSC_MODULE_NAME, gsc->id); |
756 | 757 | ||