[PATCH] [v2] i.MX27: Fix emma-prp clocks in mx2_camera.c
This driver wasn't converted to the new clock changes (clk_prepare_enable/clk_disable_unprepare). Also naming of emma-prp related clocks for the i.MX27 was not correct. Signed-off-by: Javier Martin javier.mar...@vista-silicon.com --- arch/arm/mach-imx/clk-imx27.c|8 --- drivers/media/video/mx2_camera.c | 47 +- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 295cbd7..373c8fd 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -223,7 +223,7 @@ int __init mx27_clocks_init(unsigned long fref) clk_register_clkdev(clk[per3_gate], per, imx-fb.0); clk_register_clkdev(clk[lcdc_ipg_gate], ipg, imx-fb.0); clk_register_clkdev(clk[lcdc_ahb_gate], ahb, imx-fb.0); - clk_register_clkdev(clk[csi_ahb_gate], NULL, mx2-camera.0); + clk_register_clkdev(clk[csi_ahb_gate], ahb, mx2-camera.0); clk_register_clkdev(clk[usb_div], per, fsl-usb2-udc); clk_register_clkdev(clk[usb_ipg_gate], ipg, fsl-usb2-udc); clk_register_clkdev(clk[usb_ahb_gate], ahb, fsl-usb2-udc); @@ -250,8 +250,10 @@ int __init mx27_clocks_init(unsigned long fref) clk_register_clkdev(clk[i2c2_ipg_gate], NULL, imx-i2c.1); clk_register_clkdev(clk[owire_ipg_gate], NULL, mxc_w1.0); clk_register_clkdev(clk[kpp_ipg_gate], NULL, imx-keypad); - clk_register_clkdev(clk[emma_ahb_gate], ahb, imx-emma); - clk_register_clkdev(clk[emma_ipg_gate], ipg, imx-emma); + clk_register_clkdev(clk[emma_ahb_gate], emma-ahb, mx2-camera.0); + clk_register_clkdev(clk[emma_ipg_gate], emma-ipg, mx2-camera.0); + clk_register_clkdev(clk[emma_ahb_gate], ahb, m2m-emmaprp.0); + clk_register_clkdev(clk[emma_ipg_gate], ipg, m2m-emmaprp.0); clk_register_clkdev(clk[iim_ipg_gate], iim, NULL); clk_register_clkdev(clk[gpio_ipg_gate], gpio, NULL); clk_register_clkdev(clk[brom_ahb_gate], brom, NULL); diff --git a/drivers/media/video/mx2_camera.c b/drivers/media/video/mx2_camera.c index 41f9a25..e4d77e1 100644 --- a/drivers/media/video/mx2_camera.c +++ b/drivers/media/video/mx2_camera.c @@ -270,7 +270,7 @@ struct mx2_camera_dev { struct device *dev; struct soc_camera_host soc_host; struct soc_camera_device *icd; - struct clk *clk_csi, *clk_emma; + struct clk *clk_csi, *clk_emma_ahb, *clk_emma_ipg; unsigned intirq_csi, irq_emma; void __iomem*base_csi, *base_emma; @@ -417,7 +417,7 @@ static int mx2_camera_add_device(struct soc_camera_device *icd) if (pcdev-icd) return -EBUSY; - ret = clk_enable(pcdev-clk_csi); + ret = clk_prepare_enable(pcdev-clk_csi); if (ret 0) return ret; @@ -1616,23 +1616,12 @@ static int __devinit mx27_camera_emma_init(struct mx2_camera_dev *pcdev) goto exit_iounmap; } - pcdev-clk_emma = clk_get(NULL, emma); - if (IS_ERR(pcdev-clk_emma)) { - err = PTR_ERR(pcdev-clk_emma); - goto exit_free_irq; - } - - clk_enable(pcdev-clk_emma); - err = mx27_camera_emma_prp_reset(pcdev); if (err) - goto exit_clk_emma_put; + goto exit_free_irq; return err; -exit_clk_emma_put: - clk_disable(pcdev-clk_emma); - clk_put(pcdev-clk_emma); exit_free_irq: free_irq(pcdev-irq_emma, pcdev); exit_iounmap: @@ -1655,6 +1644,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) res_csi = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq_csi = platform_get_irq(pdev, 0); + if (res_csi == NULL || irq_csi 0) { dev_err(pdev-dev, Missing platform resources data\n); err = -ENODEV; @@ -1668,12 +1658,26 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) goto exit; } - pcdev-clk_csi = clk_get(pdev-dev, NULL); + pcdev-clk_csi = devm_clk_get(pdev-dev, ahb); if (IS_ERR(pcdev-clk_csi)) { dev_err(pdev-dev, Could not get csi clock\n); err = PTR_ERR(pcdev-clk_csi); goto exit_kfree; } + pcdev-clk_emma_ipg = devm_clk_get(pdev-dev, emma-ipg); + if (IS_ERR(pcdev-clk_emma_ipg)) { + err = PTR_ERR(pcdev-clk_emma_ipg); + goto exit_kfree; + } + pcdev-clk_emma_ahb = devm_clk_get(pdev-dev, emma-ahb); + if (IS_ERR(pcdev-clk_emma_ahb)) { + err = PTR_ERR(pcdev-clk_emma_ahb); + goto exit_kfree; + } + + clk_prepare_enable(pcdev-clk_csi); + clk_prepare_enable(pcdev-clk_emma_ipg); + clk_prepare_enable(pcdev-clk_emma_ahb); pcdev-res_csi = res_csi; pcdev-pdata = pdev-dev.platform_data; @@
Re: [PATCH] [v2] i.MX27: Fix emma-prp clocks in mx2_camera.c
On Fri, Jul 06, 2012 at 09:13:11AM +0200, Javier Martin wrote: This driver wasn't converted to the new clock changes (clk_prepare_enable/clk_disable_unprepare). Also naming of emma-prp related clocks for the i.MX27 was not correct. Signed-off-by: Javier Martin javier.mar...@vista-silicon.com --- arch/arm/mach-imx/clk-imx27.c|8 --- drivers/media/video/mx2_camera.c | 47 +- 2 files changed, 31 insertions(+), 24 deletions(-) @@ -1616,23 +1616,12 @@ static int __devinit mx27_camera_emma_init(struct mx2_camera_dev *pcdev) goto exit_iounmap; } - pcdev-clk_emma = clk_get(NULL, emma); - if (IS_ERR(pcdev-clk_emma)) { - err = PTR_ERR(pcdev-clk_emma); - goto exit_free_irq; - } - - clk_enable(pcdev-clk_emma); - err = mx27_camera_emma_prp_reset(pcdev); if (err) - goto exit_clk_emma_put; + goto exit_free_irq; return err; -exit_clk_emma_put: - clk_disable(pcdev-clk_emma); - clk_put(pcdev-clk_emma); exit_free_irq: free_irq(pcdev-irq_emma, pcdev); exit_iounmap: @@ -1655,6 +1644,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) res_csi = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq_csi = platform_get_irq(pdev, 0); + if (res_csi == NULL || irq_csi 0) { dev_err(pdev-dev, Missing platform resources data\n); err = -ENODEV; @@ -1668,12 +1658,26 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) goto exit; } - pcdev-clk_csi = clk_get(pdev-dev, NULL); + pcdev-clk_csi = devm_clk_get(pdev-dev, ahb); if (IS_ERR(pcdev-clk_csi)) { dev_err(pdev-dev, Could not get csi clock\n); err = PTR_ERR(pcdev-clk_csi); goto exit_kfree; } + pcdev-clk_emma_ipg = devm_clk_get(pdev-dev, emma-ipg); + if (IS_ERR(pcdev-clk_emma_ipg)) { + err = PTR_ERR(pcdev-clk_emma_ipg); + goto exit_kfree; + } + pcdev-clk_emma_ahb = devm_clk_get(pdev-dev, emma-ahb); + if (IS_ERR(pcdev-clk_emma_ahb)) { + err = PTR_ERR(pcdev-clk_emma_ahb); + goto exit_kfree; + } + + clk_prepare_enable(pcdev-clk_csi); + clk_prepare_enable(pcdev-clk_emma_ipg); + clk_prepare_enable(pcdev-clk_emma_ahb); pcdev-res_csi = res_csi; pcdev-pdata = pdev-dev.platform_data; @@ -1768,8 +1772,8 @@ exit_free_emma: eallocctx: if (cpu_is_mx27()) { free_irq(pcdev-irq_emma, pcdev); - clk_disable(pcdev-clk_emma); - clk_put(pcdev-clk_emma); + clk_disable_unprepare(pcdev-clk_emma_ipg); + clk_disable_unprepare(pcdev-clk_emma_ahb); The clk_disable_unprepare is inside a cpu_is_mx27() which seems correct. Shouldn't the corresponding clk_get be in cpu_is_mx27() aswell? Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0| Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917- | -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] [v2] i.MX27: Fix emma-prp clocks in mx2_camera.c
On 6 July 2012 09:34, Sascha Hauer s.ha...@pengutronix.de wrote: On Fri, Jul 06, 2012 at 09:13:11AM +0200, Javier Martin wrote: This driver wasn't converted to the new clock changes (clk_prepare_enable/clk_disable_unprepare). Also naming of emma-prp related clocks for the i.MX27 was not correct. Signed-off-by: Javier Martin javier.mar...@vista-silicon.com --- arch/arm/mach-imx/clk-imx27.c|8 --- drivers/media/video/mx2_camera.c | 47 +- 2 files changed, 31 insertions(+), 24 deletions(-) @@ -1616,23 +1616,12 @@ static int __devinit mx27_camera_emma_init(struct mx2_camera_dev *pcdev) goto exit_iounmap; } - pcdev-clk_emma = clk_get(NULL, emma); - if (IS_ERR(pcdev-clk_emma)) { - err = PTR_ERR(pcdev-clk_emma); - goto exit_free_irq; - } - - clk_enable(pcdev-clk_emma); - err = mx27_camera_emma_prp_reset(pcdev); if (err) - goto exit_clk_emma_put; + goto exit_free_irq; return err; -exit_clk_emma_put: - clk_disable(pcdev-clk_emma); - clk_put(pcdev-clk_emma); exit_free_irq: free_irq(pcdev-irq_emma, pcdev); exit_iounmap: @@ -1655,6 +1644,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) res_csi = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq_csi = platform_get_irq(pdev, 0); + if (res_csi == NULL || irq_csi 0) { dev_err(pdev-dev, Missing platform resources data\n); err = -ENODEV; @@ -1668,12 +1658,26 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) goto exit; } - pcdev-clk_csi = clk_get(pdev-dev, NULL); + pcdev-clk_csi = devm_clk_get(pdev-dev, ahb); if (IS_ERR(pcdev-clk_csi)) { dev_err(pdev-dev, Could not get csi clock\n); err = PTR_ERR(pcdev-clk_csi); goto exit_kfree; } + pcdev-clk_emma_ipg = devm_clk_get(pdev-dev, emma-ipg); + if (IS_ERR(pcdev-clk_emma_ipg)) { + err = PTR_ERR(pcdev-clk_emma_ipg); + goto exit_kfree; + } + pcdev-clk_emma_ahb = devm_clk_get(pdev-dev, emma-ahb); + if (IS_ERR(pcdev-clk_emma_ahb)) { + err = PTR_ERR(pcdev-clk_emma_ahb); + goto exit_kfree; + } + + clk_prepare_enable(pcdev-clk_csi); + clk_prepare_enable(pcdev-clk_emma_ipg); + clk_prepare_enable(pcdev-clk_emma_ahb); pcdev-res_csi = res_csi; pcdev-pdata = pdev-dev.platform_data; @@ -1768,8 +1772,8 @@ exit_free_emma: eallocctx: if (cpu_is_mx27()) { free_irq(pcdev-irq_emma, pcdev); - clk_disable(pcdev-clk_emma); - clk_put(pcdev-clk_emma); + clk_disable_unprepare(pcdev-clk_emma_ipg); + clk_disable_unprepare(pcdev-clk_emma_ahb); The clk_disable_unprepare is inside a cpu_is_mx27() which seems correct. Shouldn't the corresponding clk_get be in cpu_is_mx27() aswell? Yes indeed. Should I fix it in a new version of this patch or should I send another one instead? -- Javier Martin Vista Silicon S.L. CDTUC - FASE C - Oficina S-345 Avda de los Castros s/n 39005- Santander. Cantabria. Spain +34 942 25 32 60 www.vista-silicon.com -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] [v2] i.MX27: Fix emma-prp clocks in mx2_camera.c
On Fri, Jul 06, 2012 at 09:46:46AM +0200, javier Martin wrote: On 6 July 2012 09:34, Sascha Hauer s.ha...@pengutronix.de wrote: On Fri, Jul 06, 2012 at 09:13:11AM +0200, Javier Martin wrote: if (cpu_is_mx27()) { free_irq(pcdev-irq_emma, pcdev); - clk_disable(pcdev-clk_emma); - clk_put(pcdev-clk_emma); + clk_disable_unprepare(pcdev-clk_emma_ipg); + clk_disable_unprepare(pcdev-clk_emma_ahb); The clk_disable_unprepare is inside a cpu_is_mx27() which seems correct. Shouldn't the corresponding clk_get be in cpu_is_mx27() aswell? Yes indeed. Should I fix it in a new version of this patch or should I send another one instead? Another version of this patch should be fine. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0| Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917- | -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html