diff options
| author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2016-09-13 07:59:49 -0400 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-09-22 09:20:06 -0400 |
| commit | 2950da489520ed66da0934d04ebeb32054263e12 (patch) | |
| tree | f2a8086c2d16211bfa164eaf2951fb8f263f440d /drivers/media/platform | |
| parent | 056c61eb0da4d7181fc7072567dc1931cb0e1cbb (diff) | |
[media] exynos4-is: add of_platform_populate() call for FIMC-IS child devices
Instead of relying on the "simple-bus" compatible and the driver core
populating FIMC-IS child devices make the fimc-is driver populating
its child devices. This prevents issues related to accessing ISP_I2C
clock registers with corresponding power domain switched off, which
popped out after applying some pending IOMMU driver patches. Now the
I2C_ISP child devices will be instantiated only when required parent
device drivers are initialized and ready.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/platform')
| -rw-r--r-- | drivers/media/platform/exynos4-is/fimc-is.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c index 313ab10dbb94..518ad34f80d7 100644 --- a/drivers/media/platform/exynos4-is/fimc-is.c +++ b/drivers/media/platform/exynos4-is/fimc-is.c | |||
| @@ -852,13 +852,18 @@ static int fimc_is_probe(struct platform_device *pdev) | |||
| 852 | goto err_pm; | 852 | goto err_pm; |
| 853 | 853 | ||
| 854 | vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32)); | 854 | vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32)); |
| 855 | |||
| 856 | ret = of_platform_populate(dev->of_node, NULL, NULL, dev); | ||
| 857 | if (ret < 0) | ||
| 858 | goto err_pm; | ||
| 859 | |||
| 855 | /* | 860 | /* |
| 856 | * Register FIMC-IS V4L2 subdevs to this driver. The video nodes | 861 | * Register FIMC-IS V4L2 subdevs to this driver. The video nodes |
| 857 | * will be created within the subdev's registered() callback. | 862 | * will be created within the subdev's registered() callback. |
| 858 | */ | 863 | */ |
| 859 | ret = fimc_is_register_subdevs(is); | 864 | ret = fimc_is_register_subdevs(is); |
| 860 | if (ret < 0) | 865 | if (ret < 0) |
| 861 | goto err_pm; | 866 | goto err_of_dep; |
| 862 | 867 | ||
| 863 | ret = fimc_is_debugfs_create(is); | 868 | ret = fimc_is_debugfs_create(is); |
| 864 | if (ret < 0) | 869 | if (ret < 0) |
| @@ -877,6 +882,8 @@ err_dfs: | |||
| 877 | fimc_is_debugfs_remove(is); | 882 | fimc_is_debugfs_remove(is); |
| 878 | err_sd: | 883 | err_sd: |
| 879 | fimc_is_unregister_subdevs(is); | 884 | fimc_is_unregister_subdevs(is); |
| 885 | err_of_dep: | ||
| 886 | of_platform_depopulate(dev); | ||
| 880 | err_pm: | 887 | err_pm: |
| 881 | if (!pm_runtime_enabled(dev)) | 888 | if (!pm_runtime_enabled(dev)) |
| 882 | fimc_is_runtime_suspend(dev); | 889 | fimc_is_runtime_suspend(dev); |
| @@ -936,6 +943,7 @@ static int fimc_is_remove(struct platform_device *pdev) | |||
| 936 | if (!pm_runtime_status_suspended(dev)) | 943 | if (!pm_runtime_status_suspended(dev)) |
| 937 | fimc_is_runtime_suspend(dev); | 944 | fimc_is_runtime_suspend(dev); |
| 938 | free_irq(is->irq, is); | 945 | free_irq(is->irq, is); |
| 946 | of_platform_depopulate(dev); | ||
| 939 | fimc_is_unregister_subdevs(is); | 947 | fimc_is_unregister_subdevs(is); |
| 940 | vb2_dma_contig_clear_max_seg_size(dev); | 948 | vb2_dma_contig_clear_max_seg_size(dev); |
| 941 | fimc_is_put_clocks(is); | 949 | fimc_is_put_clocks(is); |
