Re: [PATCH 2/2] [media]: mx2_camera: Fix regression caused by clock conversion

2012-10-08 Thread Guennadi Liakhovetski
Hi Fabio

On Fri, 5 Oct 2012, Fabio Estevam wrote:

 Since mx27 transitioned to the commmon clock framework in 3.5, the correct way
 to acquire the csi clock is to get csi_ahb and csi_per clocks separately.
 
 By not doing so the camera sensor does not probe correctly:
 
 soc-camera-pdrv soc-camera-pdrv.0: Probing soc-camera-pdrv.0
 mx2-camera mx2-camera.0: Camera driver attached to camera 0
 ov2640 0-0030: Product ID error fb:fb
 mx2-camera mx2-camera.0: Camera driver detached from camera 0
 mx2-camera mx2-camera.0: MX2 Camera (CSI) driver probed, clock frequency: 
 6650
 
 Adapt the mx2_camera driver to the new clock framework and make it functional
 again.

Do I understand it right, that since the driver is currently broken, it 
doesn't matter any more in which order these two patches get applied, so, 
we can push them via different trees - ARM and media?

Thanks
Guennadi

 
 Signed-off-by: Fabio Estevam fabio.este...@freescale.com
 ---
  drivers/media/platform/soc_camera/mx2_camera.c |   42 
 
  1 file changed, 29 insertions(+), 13 deletions(-)
 
 diff --git a/drivers/media/platform/soc_camera/mx2_camera.c 
 b/drivers/media/platform/soc_camera/mx2_camera.c
 index 0c0dd74..2c67969 100644
 --- a/drivers/media/platform/soc_camera/mx2_camera.c
 +++ b/drivers/media/platform/soc_camera/mx2_camera.c
 @@ -272,8 +272,9 @@ struct mx2_camera_dev {
   struct device   *dev;
   struct soc_camera_host  soc_host;
   struct soc_camera_device *icd;
 - struct clk  *clk_csi, *clk_emma_ahb, *clk_emma_ipg;
 -
 + struct clk  *clk_emma_ahb, *clk_emma_ipg;
 + struct clk  *clk_csi_ahb, *clk_csi_per;
 +
   unsigned intirq_csi, irq_emma;
   void __iomem*base_csi, *base_emma;
   unsigned long   base_dma;
 @@ -435,7 +436,8 @@ static void mx2_camera_deactivate(struct mx2_camera_dev 
 *pcdev)
  {
   unsigned long flags;
  
 - clk_disable_unprepare(pcdev-clk_csi);
 + clk_disable_unprepare(pcdev-clk_csi_ahb);
 + clk_disable_unprepare(pcdev-clk_csi_per);
   writel(0, pcdev-base_csi + CSICR1);
   if (cpu_is_mx27()) {
   writel(0, pcdev-base_emma + PRP_CNTL);
 @@ -463,7 +465,11 @@ static int mx2_camera_add_device(struct 
 soc_camera_device *icd)
   if (pcdev-icd)
   return -EBUSY;
  
 - ret = clk_prepare_enable(pcdev-clk_csi);
 + ret = clk_prepare_enable(pcdev-clk_csi_ahb);
 + if (ret  0)
 + return ret;
 +
 + ret = clk_prepare_enable(pcdev-clk_csi_per);
   if (ret  0)
   return ret;
  
 @@ -1736,13 +1742,21 @@ static int __devinit mx2_camera_probe(struct 
 platform_device *pdev)
   goto exit;
   }
  
 - pcdev-clk_csi = 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);
 + pcdev-clk_csi_ahb = clk_get(pdev-dev, ahb);
 + if (IS_ERR(pcdev-clk_csi_ahb)) {
 + dev_err(pdev-dev, Could not get csi ahb clock\n);
 + err = PTR_ERR(pcdev-clk_csi_ahb);
   goto exit_kfree;
   }
  
 + pcdev-clk_csi_per = clk_get(pdev-dev, per);
 + if (IS_ERR(pcdev-clk_csi_per)) {
 + dev_err(pdev-dev, Could not get csi per clock\n);
 + err = PTR_ERR(pcdev-clk_csi_per);
 + goto exit_kfree;
 + }
 +
 +
   pcdev-res_csi = res_csi;
   pcdev-pdata = pdev-dev.platform_data;
   if (pcdev-pdata) {
 @@ -1750,12 +1764,12 @@ static int __devinit mx2_camera_probe(struct 
 platform_device *pdev)
  
   pcdev-platform_flags = pcdev-pdata-flags;
  
 - rate = clk_round_rate(pcdev-clk_csi, pcdev-pdata-clk * 2);
 + rate = clk_round_rate(pcdev-clk_csi_per, pcdev-pdata-clk * 
 2);
   if (rate = 0) {
   err = -ENODEV;
   goto exit_dma_free;
   }
 - err = clk_set_rate(pcdev-clk_csi, rate);
 + err = clk_set_rate(pcdev-clk_csi_per, rate);
   if (err  0)
   goto exit_dma_free;
   }
 @@ -1827,7 +1841,7 @@ static int __devinit mx2_camera_probe(struct 
 platform_device *pdev)
   goto exit_free_emma;
  
   dev_info(pdev-dev, MX2 Camera (CSI) driver probed, clock frequency: 
 %ld\n,
 - clk_get_rate(pcdev-clk_csi));
 + clk_get_rate(pcdev-clk_csi_per));
  
   return 0;
  
 @@ -1851,7 +1865,8 @@ exit_iounmap:
  exit_release:
   release_mem_region(res_csi-start, resource_size(res_csi));
  exit_dma_free:
 - clk_put(pcdev-clk_csi);
 + clk_put(pcdev-clk_csi_per);
 + clk_put(pcdev-clk_csi_ahb);
  exit_kfree:
   kfree(pcdev);
  exit:
 @@ -1865,7 +1880,8 @@ static int __devexit mx2_camera_remove(struct 
 platform_device *pdev)
   struct mx2_camera_dev, soc_host);
   struct resource 

Re: [PATCH 2/2] [media]: mx2_camera: Fix regression caused by clock conversion

2012-10-08 Thread javier Martin
On 8 October 2012 11:09, Guennadi Liakhovetski g.liakhovet...@gmx.de wrote:
 Hi Fabio

 On Fri, 5 Oct 2012, Fabio Estevam wrote:

 Since mx27 transitioned to the commmon clock framework in 3.5, the correct 
 way
 to acquire the csi clock is to get csi_ahb and csi_per clocks separately.

 By not doing so the camera sensor does not probe correctly:

 soc-camera-pdrv soc-camera-pdrv.0: Probing soc-camera-pdrv.0
 mx2-camera mx2-camera.0: Camera driver attached to camera 0
 ov2640 0-0030: Product ID error fb:fb
 mx2-camera mx2-camera.0: Camera driver detached from camera 0
 mx2-camera mx2-camera.0: MX2 Camera (CSI) driver probed, clock frequency: 
 6650

 Adapt the mx2_camera driver to the new clock framework and make it functional
 again.

 Do I understand it right, that since the driver is currently broken, it
 doesn't matter any more in which order these two patches get applied, so,
 we can push them via different trees - ARM and media?

 Thanks
 Guennadi


Please,
hold on a couple of days before merging this one.

This driver is currently working in our Visstrim M10 platform without
this patch and I need to test it to confirm whether it breaks
something or not.

Regards.
-- 
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 2/2] [media]: mx2_camera: Fix regression caused by clock conversion

2012-10-08 Thread Gaëtan Carlier

Hi,
On 10/05/2012 11:53 PM, Fabio Estevam wrote:

Since mx27 transitioned to the commmon clock framework in 3.5, the correct way
to acquire the csi clock is to get csi_ahb and csi_per clocks separately.

By not doing so the camera sensor does not probe correctly:

soc-camera-pdrv soc-camera-pdrv.0: Probing soc-camera-pdrv.0
mx2-camera mx2-camera.0: Camera driver attached to camera 0
ov2640 0-0030: Product ID error fb:fb
mx2-camera mx2-camera.0: Camera driver detached from camera 0
mx2-camera mx2-camera.0: MX2 Camera (CSI) driver probed, clock frequency: 
6650

Adapt the mx2_camera driver to the new clock framework and make it functional
again.

Signed-off-by: Fabio Estevam fabio.este...@freescale.com
---
  drivers/media/platform/soc_camera/mx2_camera.c |   42 
  1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/drivers/media/platform/soc_camera/mx2_camera.c 
b/drivers/media/platform/soc_camera/mx2_camera.c
index 0c0dd74..2c67969 100644
--- a/drivers/media/platform/soc_camera/mx2_camera.c
+++ b/drivers/media/platform/soc_camera/mx2_camera.c
@@ -272,8 +272,9 @@ struct mx2_camera_dev {
struct device   *dev;
struct soc_camera_host  soc_host;
struct soc_camera_device *icd;
-   struct clk  *clk_csi, *clk_emma_ahb, *clk_emma_ipg;
-
+   struct clk  *clk_emma_ahb, *clk_emma_ipg;
+   struct clk  *clk_csi_ahb, *clk_csi_per;
+
unsigned intirq_csi, irq_emma;
void __iomem*base_csi, *base_emma;
unsigned long   base_dma;
@@ -435,7 +436,8 @@ static void mx2_camera_deactivate(struct mx2_camera_dev 
*pcdev)
  {
unsigned long flags;

-   clk_disable_unprepare(pcdev-clk_csi);
+   clk_disable_unprepare(pcdev-clk_csi_ahb);
+   clk_disable_unprepare(pcdev-clk_csi_per);
writel(0, pcdev-base_csi + CSICR1);
if (cpu_is_mx27()) {
writel(0, pcdev-base_emma + PRP_CNTL);
@@ -463,7 +465,11 @@ static int mx2_camera_add_device(struct soc_camera_device 
*icd)
if (pcdev-icd)
return -EBUSY;

-   ret = clk_prepare_enable(pcdev-clk_csi);
+   ret = clk_prepare_enable(pcdev-clk_csi_ahb);
+   if (ret  0)
+   return ret;
+
+   ret = clk_prepare_enable(pcdev-clk_csi_per);
if (ret  0)
return ret;

@@ -1736,13 +1742,21 @@ static int __devinit mx2_camera_probe(struct 
platform_device *pdev)
goto exit;
}

-   pcdev-clk_csi = 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);
+   pcdev-clk_csi_ahb = clk_get(pdev-dev, ahb);
+   if (IS_ERR(pcdev-clk_csi_ahb)) {
+   dev_err(pdev-dev, Could not get csi ahb clock\n);
+   err = PTR_ERR(pcdev-clk_csi_ahb);
goto exit_kfree;
}

+   pcdev-clk_csi_per = clk_get(pdev-dev, per);
+   if (IS_ERR(pcdev-clk_csi_per)) {
+   dev_err(pdev-dev, Could not get csi per clock\n);
+   err = PTR_ERR(pcdev-clk_csi_per);
+   goto exit_kfree;
+   }
+
+
pcdev-res_csi = res_csi;
pcdev-pdata = pdev-dev.platform_data;
if (pcdev-pdata) {
@@ -1750,12 +1764,12 @@ static int __devinit mx2_camera_probe(struct 
platform_device *pdev)

pcdev-platform_flags = pcdev-pdata-flags;

-   rate = clk_round_rate(pcdev-clk_csi, pcdev-pdata-clk * 2);
+   rate = clk_round_rate(pcdev-clk_csi_per, pcdev-pdata-clk * 
2);
if (rate = 0) {
err = -ENODEV;
goto exit_dma_free;
}
-   err = clk_set_rate(pcdev-clk_csi, rate);
+   err = clk_set_rate(pcdev-clk_csi_per, rate);
if (err  0)
goto exit_dma_free;
}
@@ -1827,7 +1841,7 @@ static int __devinit mx2_camera_probe(struct 
platform_device *pdev)
goto exit_free_emma;

dev_info(pdev-dev, MX2 Camera (CSI) driver probed, clock frequency: 
%ld\n,
-   clk_get_rate(pcdev-clk_csi));
+   clk_get_rate(pcdev-clk_csi_per));

return 0;

@@ -1851,7 +1865,8 @@ exit_iounmap:
  exit_release:
release_mem_region(res_csi-start, resource_size(res_csi));
  exit_dma_free:
-   clk_put(pcdev-clk_csi);
+   clk_put(pcdev-clk_csi_per);
+   clk_put(pcdev-clk_csi_ahb);
  exit_kfree:
kfree(pcdev);
  exit:
@@ -1865,7 +1880,8 @@ static int __devexit mx2_camera_remove(struct 
platform_device *pdev)
struct mx2_camera_dev, soc_host);
struct resource *res;

-   clk_put(pcdev-clk_csi);
+   clk_put(pcdev-clk_csi_per);
+   clk_put(pcdev-clk_csi_ahb);
if (cpu_is_mx25())
free_irq(pcdev-irq_csi, pcdev);
if (cpu_is_mx27())




Re: [PATCH 2/2] [media]: mx2_camera: Fix regression caused by clock conversion

2012-10-08 Thread Fabio Estevam
On Mon, Oct 8, 2012 at 7:04 AM, Gaëtan Carlier gcem...@gmail.com wrote:

 This patch does not apply on linux-next-20121008. I suppose that linux-media
 development branch is needed. How can I put linux-media branch on top of

Ok, I have just rebased it against linux-next-20121008. See below.

It allows ov2640 to probe correctly. However, it does not work with
Gstreamer anymore (Friday's linux-next allowed to get the Gstreamer
pipeline to work).

$ gst-launch v4l2src  ! fbdevsink
Setting pipeline to PAUSED ...mx2-camera mx2-camera.0: Camera driver
attached to camera 0

mx2-camera mx2-camera.0: Camera driver detached from camera 0
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
to query norm on device '/dev/video0'.
Additional debug info:
v4l2_calls.c(213): gst_v4l2_fill_lists ():
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Failed to get attributes for norm 0 on devide '/dev/video0'. (61 - No
data available)
Setting pipeline to NULL ...
Freeing pipeline ...

Does anyone have any ideas?

Thanks,

Fabio Estevam

---
 drivers/media/platform/soc_camera/mx2_camera.c |   47 +---
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/drivers/media/platform/soc_camera/mx2_camera.c
b/drivers/media/platform/soc_camera/mx2_camera.c
index 403d7f1..9f8c5f0 100644
--- a/drivers/media/platform/soc_camera/mx2_camera.c
+++ b/drivers/media/platform/soc_camera/mx2_camera.c
@@ -272,7 +272,8 @@ struct mx2_camera_dev {
struct device   *dev;
struct soc_camera_host  soc_host;
struct soc_camera_device *icd;
-   struct clk  *clk_csi, *clk_emma_ahb, *clk_emma_ipg;
+   struct clk  *clk_emma_ahb, *clk_emma_ipg;
+   struct clk  *clk_csi_ahb, *clk_csi_per;

void __iomem*base_csi, *base_emma;

@@ -432,7 +433,8 @@ static void mx2_camera_deactivate(struct
mx2_camera_dev *pcdev)
 {
unsigned long flags;

-   clk_disable_unprepare(pcdev-clk_csi);
+   clk_disable_unprepare(pcdev-clk_csi_ahb);
+   clk_disable_unprepare(pcdev-clk_csi_per);
writel(0, pcdev-base_csi + CSICR1);
if (cpu_is_mx27()) {
writel(0, pcdev-base_emma + PRP_CNTL);
@@ -460,7 +462,11 @@ static int mx2_camera_add_device(struct
soc_camera_device *icd)
if (pcdev-icd)
return -EBUSY;

-   ret = clk_prepare_enable(pcdev-clk_csi);
+   ret = clk_prepare_enable(pcdev-clk_csi_ahb);
+   if (ret  0)
+   return ret;
+
+   ret = clk_prepare_enable(pcdev-clk_csi_per);
if (ret  0)
return ret;

@@ -1725,11 +1731,18 @@ static int __devinit mx2_camera_probe(struct
platform_device *pdev)
goto exit;
}

-   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;
+   pcdev-clk_csi_ahb = devm_clk_get(pdev-dev, ahb);
+   if (IS_ERR(pcdev-clk_csi_ahb)) {
+   dev_err(pdev-dev, Could not get csi ahb clock\n);
+   err = PTR_ERR(pcdev-clk_csi_ahb);
+   goto exit;
+   }
+
+   pcdev-clk_csi_per = devm_clk_get(pdev-dev, per);
+   if (IS_ERR(pcdev-clk_csi_per)) {
+   dev_err(pdev-dev, Could not get csi per clock\n);
+   err = PTR_ERR(pcdev-clk_csi_per);
+   goto exit_csi_ahb;
}

pcdev-pdata = pdev-dev.platform_data;
@@ -1738,14 +1751,15 @@ static int __devinit mx2_camera_probe(struct
platform_device *pdev)

pcdev-platform_flags = pcdev-pdata-flags;

-   rate = clk_round_rate(pcdev-clk_csi, pcdev-pdata-clk * 2);
+   rate = clk_round_rate(pcdev-clk_csi_per,
+   pcdev-pdata-clk * 2);
if (rate = 0) {
err = -ENODEV;
-   goto exit;
+   goto exit_csi_per;
}
-   err = clk_set_rate(pcdev-clk_csi, rate);
+   err = clk_set_rate(pcdev-clk_csi_per, rate);
if (err  0)
-   goto exit;
+   goto exit_csi_per;
}

INIT_LIST_HEAD(pcdev-capture);
@@ -1801,7 +1815,7 @@ static int __devinit mx2_camera_probe(struct
platform_device *pdev)
goto exit_free_emma;

dev_info(pdev-dev, MX2 Camera (CSI) driver probed, clock frequency: 
%ld\n,
-   clk_get_rate(pcdev-clk_csi));
+   clk_get_rate(pcdev-clk_csi_per));

return 0;

@@ -1812,6 +1826,10 @@ eallocctx:
clk_disable_unprepare(pcdev-clk_emma_ipg);
clk_disable_unprepare(pcdev-clk_emma_ahb);
}
+exit_csi_per:
+   clk_disable_unprepare(pcdev-clk_csi_per);
+exit_csi_ahb:
+   

[PATCH 2/2] [media]: mx2_camera: Fix regression caused by clock conversion

2012-10-05 Thread Fabio Estevam
Since mx27 transitioned to the commmon clock framework in 3.5, the correct way
to acquire the csi clock is to get csi_ahb and csi_per clocks separately.

By not doing so the camera sensor does not probe correctly:

soc-camera-pdrv soc-camera-pdrv.0: Probing soc-camera-pdrv.0
mx2-camera mx2-camera.0: Camera driver attached to camera 0
ov2640 0-0030: Product ID error fb:fb
mx2-camera mx2-camera.0: Camera driver detached from camera 0
mx2-camera mx2-camera.0: MX2 Camera (CSI) driver probed, clock frequency: 
6650

Adapt the mx2_camera driver to the new clock framework and make it functional
again.

Signed-off-by: Fabio Estevam fabio.este...@freescale.com
---
 drivers/media/platform/soc_camera/mx2_camera.c |   42 
 1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/drivers/media/platform/soc_camera/mx2_camera.c 
b/drivers/media/platform/soc_camera/mx2_camera.c
index 0c0dd74..2c67969 100644
--- a/drivers/media/platform/soc_camera/mx2_camera.c
+++ b/drivers/media/platform/soc_camera/mx2_camera.c
@@ -272,8 +272,9 @@ struct mx2_camera_dev {
struct device   *dev;
struct soc_camera_host  soc_host;
struct soc_camera_device *icd;
-   struct clk  *clk_csi, *clk_emma_ahb, *clk_emma_ipg;
-
+   struct clk  *clk_emma_ahb, *clk_emma_ipg;
+   struct clk  *clk_csi_ahb, *clk_csi_per;
+
unsigned intirq_csi, irq_emma;
void __iomem*base_csi, *base_emma;
unsigned long   base_dma;
@@ -435,7 +436,8 @@ static void mx2_camera_deactivate(struct mx2_camera_dev 
*pcdev)
 {
unsigned long flags;
 
-   clk_disable_unprepare(pcdev-clk_csi);
+   clk_disable_unprepare(pcdev-clk_csi_ahb);
+   clk_disable_unprepare(pcdev-clk_csi_per);
writel(0, pcdev-base_csi + CSICR1);
if (cpu_is_mx27()) {
writel(0, pcdev-base_emma + PRP_CNTL);
@@ -463,7 +465,11 @@ static int mx2_camera_add_device(struct soc_camera_device 
*icd)
if (pcdev-icd)
return -EBUSY;
 
-   ret = clk_prepare_enable(pcdev-clk_csi);
+   ret = clk_prepare_enable(pcdev-clk_csi_ahb);
+   if (ret  0)
+   return ret;
+
+   ret = clk_prepare_enable(pcdev-clk_csi_per);
if (ret  0)
return ret;
 
@@ -1736,13 +1742,21 @@ static int __devinit mx2_camera_probe(struct 
platform_device *pdev)
goto exit;
}
 
-   pcdev-clk_csi = 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);
+   pcdev-clk_csi_ahb = clk_get(pdev-dev, ahb);
+   if (IS_ERR(pcdev-clk_csi_ahb)) {
+   dev_err(pdev-dev, Could not get csi ahb clock\n);
+   err = PTR_ERR(pcdev-clk_csi_ahb);
goto exit_kfree;
}
 
+   pcdev-clk_csi_per = clk_get(pdev-dev, per);
+   if (IS_ERR(pcdev-clk_csi_per)) {
+   dev_err(pdev-dev, Could not get csi per clock\n);
+   err = PTR_ERR(pcdev-clk_csi_per);
+   goto exit_kfree;
+   }
+
+
pcdev-res_csi = res_csi;
pcdev-pdata = pdev-dev.platform_data;
if (pcdev-pdata) {
@@ -1750,12 +1764,12 @@ static int __devinit mx2_camera_probe(struct 
platform_device *pdev)
 
pcdev-platform_flags = pcdev-pdata-flags;
 
-   rate = clk_round_rate(pcdev-clk_csi, pcdev-pdata-clk * 2);
+   rate = clk_round_rate(pcdev-clk_csi_per, pcdev-pdata-clk * 
2);
if (rate = 0) {
err = -ENODEV;
goto exit_dma_free;
}
-   err = clk_set_rate(pcdev-clk_csi, rate);
+   err = clk_set_rate(pcdev-clk_csi_per, rate);
if (err  0)
goto exit_dma_free;
}
@@ -1827,7 +1841,7 @@ static int __devinit mx2_camera_probe(struct 
platform_device *pdev)
goto exit_free_emma;
 
dev_info(pdev-dev, MX2 Camera (CSI) driver probed, clock frequency: 
%ld\n,
-   clk_get_rate(pcdev-clk_csi));
+   clk_get_rate(pcdev-clk_csi_per));
 
return 0;
 
@@ -1851,7 +1865,8 @@ exit_iounmap:
 exit_release:
release_mem_region(res_csi-start, resource_size(res_csi));
 exit_dma_free:
-   clk_put(pcdev-clk_csi);
+   clk_put(pcdev-clk_csi_per);
+   clk_put(pcdev-clk_csi_ahb);
 exit_kfree:
kfree(pcdev);
 exit:
@@ -1865,7 +1880,8 @@ static int __devexit mx2_camera_remove(struct 
platform_device *pdev)
struct mx2_camera_dev, soc_host);
struct resource *res;
 
-   clk_put(pcdev-clk_csi);
+   clk_put(pcdev-clk_csi_per);
+   clk_put(pcdev-clk_csi_ahb);
if (cpu_is_mx25())
free_irq(pcdev-irq_csi, pcdev);
if (cpu_is_mx27())
-- 
1.7.9.5


--
To unsubscribe from this list: send