|
@@ -852,13 +852,18 @@ static int fimc_is_probe(struct platform_device *pdev)
|
|
goto err_pm;
|
|
goto err_pm;
|
|
|
|
|
|
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
|
|
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
|
|
|
|
+
|
|
|
|
+ ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
|
|
|
|
+ if (ret < 0)
|
|
|
|
+ goto err_pm;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Register FIMC-IS V4L2 subdevs to this driver. The video nodes
|
|
* Register FIMC-IS V4L2 subdevs to this driver. The video nodes
|
|
* will be created within the subdev's registered() callback.
|
|
* will be created within the subdev's registered() callback.
|
|
*/
|
|
*/
|
|
ret = fimc_is_register_subdevs(is);
|
|
ret = fimc_is_register_subdevs(is);
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
- goto err_pm;
|
|
|
|
|
|
+ goto err_of_dep;
|
|
|
|
|
|
ret = fimc_is_debugfs_create(is);
|
|
ret = fimc_is_debugfs_create(is);
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
@@ -877,6 +882,8 @@ err_dfs:
|
|
fimc_is_debugfs_remove(is);
|
|
fimc_is_debugfs_remove(is);
|
|
err_sd:
|
|
err_sd:
|
|
fimc_is_unregister_subdevs(is);
|
|
fimc_is_unregister_subdevs(is);
|
|
|
|
+err_of_dep:
|
|
|
|
+ of_platform_depopulate(dev);
|
|
err_pm:
|
|
err_pm:
|
|
if (!pm_runtime_enabled(dev))
|
|
if (!pm_runtime_enabled(dev))
|
|
fimc_is_runtime_suspend(dev);
|
|
fimc_is_runtime_suspend(dev);
|
|
@@ -936,6 +943,7 @@ static int fimc_is_remove(struct platform_device *pdev)
|
|
if (!pm_runtime_status_suspended(dev))
|
|
if (!pm_runtime_status_suspended(dev))
|
|
fimc_is_runtime_suspend(dev);
|
|
fimc_is_runtime_suspend(dev);
|
|
free_irq(is->irq, is);
|
|
free_irq(is->irq, is);
|
|
|
|
+ of_platform_depopulate(dev);
|
|
fimc_is_unregister_subdevs(is);
|
|
fimc_is_unregister_subdevs(is);
|
|
vb2_dma_contig_clear_max_seg_size(dev);
|
|
vb2_dma_contig_clear_max_seg_size(dev);
|
|
fimc_is_put_clocks(is);
|
|
fimc_is_put_clocks(is);
|