aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2016-09-13 07:59:49 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-09-22 09:20:06 -0400
commit2950da489520ed66da0934d04ebeb32054263e12 (patch)
treef2a8086c2d16211bfa164eaf2951fb8f263f440d /drivers/media/platform
parent056c61eb0da4d7181fc7072567dc1931cb0e1cbb (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.c10
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);
878err_sd: 883err_sd:
879 fimc_is_unregister_subdevs(is); 884 fimc_is_unregister_subdevs(is);
885err_of_dep:
886 of_platform_depopulate(dev);
880err_pm: 887err_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);