Message ID | 1263425228-14625-1-git-send-email-m-karicheri2@ti.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers |
Return-path: <linux-media-owner@vger.kernel.org> Envelope-to: mchehab@infradead.org Delivery-date: Wed, 13 Jan 2010 23:27:22 +0000 Received: from bombadil.infradead.org [18.85.46.34] by pedra with IMAP (fetchmail-6.3.6) for <mchehab@localhost> (single-drop); Wed, 13 Jan 2010 21:27:50 -0200 (BRST) Received: from vger.kernel.org ([209.132.180.67]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NVCcU-0000Iy-Ic; Wed, 13 Jan 2010 23:27:22 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753835Ab0AMX1V (ORCPT <rfc822; kmpark@infradead.org> + 1 other); Wed, 13 Jan 2010 18:27:21 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753763Ab0AMX1U (ORCPT <rfc822;linux-media-outgoing>); Wed, 13 Jan 2010 18:27:20 -0500 Received: from comal.ext.ti.com ([198.47.26.152]:36035 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753775Ab0AMX1T (ORCPT <rfc822;linux-media@vger.kernel.org>); Wed, 13 Jan 2010 18:27:19 -0500 Received: from dlep34.itg.ti.com ([157.170.170.115]) by comal.ext.ti.com (8.13.7/8.13.7) with ESMTP id o0DNRB1E025287 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 13 Jan 2010 17:27:11 -0600 Received: from legion.dal.design.ti.com (localhost [127.0.0.1]) by dlep34.itg.ti.com (8.13.7/8.13.7) with ESMTP id o0DNRAUN003309; Wed, 13 Jan 2010 17:27:10 -0600 (CST) Received: from gt516km11.gt.design.ti.com (gt516km11.gt.design.ti.com [158.218.100.179]) by legion.dal.design.ti.com (8.11.7p1+Sun/8.11.7) with ESMTP id o0DNR9Z03096; Wed, 13 Jan 2010 17:27:09 -0600 (CST) Received: from gt516km11.gt.design.ti.com (localhost.localdomain [127.0.0.1]) by gt516km11.gt.design.ti.com (8.13.1/8.13.1) with ESMTP id o0DNR9qG014649; Wed, 13 Jan 2010 18:27:09 -0500 Received: (from a0868495@localhost) by gt516km11.gt.design.ti.com (8.13.1/8.13.1/Submit) id o0DNR8ut014646; Wed, 13 Jan 2010 18:27:08 -0500 From: m-karicheri2@ti.com To: linux-media@vger.kernel.org, hverkuil@xs4all.nl, khilman@deeprootsystems.com, mchehab@infradead.org Cc: davinci-linux-open-source@linux.davincidsp.com, Muralidharan Karicheri <m-karicheri2@ti.com> Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform code Date: Wed, 13 Jan 2010 18:27:05 -0500 Message-Id: <1263425228-14625-1-git-send-email-m-karicheri2@ti.com> X-Mailer: git-send-email 1.6.0.4 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: <linux-media.vger.kernel.org> X-Mailing-List: linux-media@vger.kernel.org |
Commit Message
m-karicheri2@ti.com
Jan. 13, 2010, 11:27 p.m. UTC
From: Muralidharan Karicheri <m-karicheri2@ti.com> Following changes are done in this patch:- 1) removed the platform code and clk configuration. They are now part of ccdc driver (part of the ccdc patches and platform patches 2-4) 2) Added proper error codes for ccdc register function Reviewed-by: Vaibhav Hiremath <hvaibhav@ti.com> Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Muralidharan Karicheri <m-karicheri2@ti.com> --- Rebased to latest linux-next tree of v4l-dvb This combines the two patches sent earlier to change the clock configuration and converting ccdc drivers to platform drivers. This has updated comments against v1 of these patches. drivers/media/video/davinci/vpfe_capture.c | 131 +++------------------------- 1 files changed, 13 insertions(+), 118 deletions(-)
Comments
Mauro, Please merge this patches if there are no more comments. Kevin, Could you work with Mauro to merge the arch part as required? Murali Karicheri Software Design Engineer Texas Instruments Inc. Germantown, MD 20874 phone: 301-407-9583 email: m-karicheri2@ti.com >-----Original Message----- >From: Karicheri, Muralidharan >Sent: Wednesday, January 13, 2010 6:27 PM >To: linux-media@vger.kernel.org; hverkuil@xs4all.nl; >khilman@deeprootsystems.com; mchehab@infradead.org >Cc: davinci-linux-open-source@linux.davincidsp.com; Karicheri, Muralidharan >Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform code > >From: Muralidharan Karicheri <m-karicheri2@ti.com> > >Following changes are done in this patch:- > 1) removed the platform code and clk configuration. They are now > part of ccdc driver (part of the ccdc patches and platform >patches 2-4) > 2) Added proper error codes for ccdc register function > >Reviewed-by: Vaibhav Hiremath <hvaibhav@ti.com> >Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> >Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> > >Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> >Signed-off-by: Muralidharan Karicheri <m-karicheri2@ti.com> >--- >Rebased to latest linux-next tree of v4l-dvb >This combines the two patches sent earlier to change the clock >configuration >and converting ccdc drivers to platform drivers. This has updated comments >against v1 of these patches. > > drivers/media/video/davinci/vpfe_capture.c | 131 +++--------------------- >---- > 1 files changed, 13 insertions(+), 118 deletions(-) > >diff --git a/drivers/media/video/davinci/vpfe_capture.c >b/drivers/media/video/davinci/vpfe_capture.c >index de22bc9..885cd54 100644 >--- a/drivers/media/video/davinci/vpfe_capture.c >+++ b/drivers/media/video/davinci/vpfe_capture.c >@@ -107,9 +107,6 @@ struct ccdc_config { > int vpfe_probed; > /* name of ccdc device */ > char name[32]; >- /* for storing mem maps for CCDC */ >- int ccdc_addr_size; >- void *__iomem ccdc_addr; > }; > > /* data structures */ >@@ -229,7 +226,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >*dev) > BUG_ON(!dev->hw_ops.set_image_window); > BUG_ON(!dev->hw_ops.get_image_window); > BUG_ON(!dev->hw_ops.get_line_length); >- BUG_ON(!dev->hw_ops.setfbaddr); > BUG_ON(!dev->hw_ops.getfid); > > mutex_lock(&ccdc_lock); >@@ -240,25 +236,23 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >*dev) > * walk through it during vpfe probe > */ > printk(KERN_ERR "vpfe capture not initialized\n"); >- ret = -1; >+ ret = -EFAULT; > goto unlock; > } > > if (strcmp(dev->name, ccdc_cfg->name)) { > /* ignore this ccdc */ >- ret = -1; >+ ret = -EINVAL; > goto unlock; > } > > if (ccdc_dev) { > printk(KERN_ERR "ccdc already registered\n"); >- ret = -1; >+ ret = -EINVAL; > goto unlock; > } > > ccdc_dev = dev; >- dev->hw_ops.set_ccdc_base(ccdc_cfg->ccdc_addr, >- ccdc_cfg->ccdc_addr_size); > unlock: > mutex_unlock(&ccdc_lock); > return ret; >@@ -1786,61 +1780,6 @@ static struct vpfe_device *vpfe_initialize(void) > return vpfe_dev; > } > >-static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) >-{ >- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >- >- clk_disable(vpfe_cfg->vpssclk); >- clk_put(vpfe_cfg->vpssclk); >- clk_disable(vpfe_cfg->slaveclk); >- clk_put(vpfe_cfg->slaveclk); >- v4l2_info(vpfe_dev->pdev->driver, >- "vpfe vpss master & slave clocks disabled\n"); >-} >- >-static int vpfe_enable_clock(struct vpfe_device *vpfe_dev) >-{ >- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >- int ret = -ENOENT; >- >- vpfe_cfg->vpssclk = clk_get(vpfe_dev->pdev, "vpss_master"); >- if (NULL == vpfe_cfg->vpssclk) { >- v4l2_err(vpfe_dev->pdev->driver, "No clock defined for" >- "vpss_master\n"); >- return ret; >- } >- >- if (clk_enable(vpfe_cfg->vpssclk)) { >- v4l2_err(vpfe_dev->pdev->driver, >- "vpfe vpss master clock not enabled\n"); >- goto out; >- } >- v4l2_info(vpfe_dev->pdev->driver, >- "vpfe vpss master clock enabled\n"); >- >- vpfe_cfg->slaveclk = clk_get(vpfe_dev->pdev, "vpss_slave"); >- if (NULL == vpfe_cfg->slaveclk) { >- v4l2_err(vpfe_dev->pdev->driver, >- "No clock defined for vpss slave\n"); >- goto out; >- } >- >- if (clk_enable(vpfe_cfg->slaveclk)) { >- v4l2_err(vpfe_dev->pdev->driver, >- "vpfe vpss slave clock not enabled\n"); >- goto out; >- } >- v4l2_info(vpfe_dev->pdev->driver, "vpfe vpss slave clock enabled\n"); >- return 0; >-out: >- if (vpfe_cfg->vpssclk) >- clk_put(vpfe_cfg->vpssclk); >- if (vpfe_cfg->slaveclk) >- clk_put(vpfe_cfg->slaveclk); >- >- return -1; >-} >- > /* > * vpfe_probe : This function creates device entries by register > * itself to the V4L2 driver and initializes fields of each >@@ -1870,7 +1809,7 @@ static __init int vpfe_probe(struct platform_device >*pdev) > > if (NULL == pdev->dev.platform_data) { > v4l2_err(pdev->dev.driver, "Unable to get vpfe config\n"); >- ret = -ENOENT; >+ ret = -ENODEV; > goto probe_free_dev_mem; > } > >@@ -1884,18 +1823,13 @@ static __init int vpfe_probe(struct platform_device >*pdev) > goto probe_free_dev_mem; > } > >- /* enable vpss clocks */ >- ret = vpfe_enable_clock(vpfe_dev); >- if (ret) >- goto probe_free_dev_mem; >- > mutex_lock(&ccdc_lock); > /* Allocate memory for ccdc configuration */ > ccdc_cfg = kmalloc(sizeof(struct ccdc_config), GFP_KERNEL); > if (NULL == ccdc_cfg) { > v4l2_err(pdev->dev.driver, > "Memory allocation failed for ccdc_cfg\n"); >- goto probe_disable_clock; >+ goto probe_free_dev_mem; > } > > strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); >@@ -1904,61 +1838,34 @@ static __init int vpfe_probe(struct platform_device >*pdev) > if (!res1) { > v4l2_err(pdev->dev.driver, > "Unable to get interrupt for VINT0\n"); >- ret = -ENOENT; >- goto probe_disable_clock; >+ ret = -ENODEV; >+ goto probe_free_ccdc_cfg_mem; > } > vpfe_dev->ccdc_irq0 = res1->start; > > /* Get VINT1 irq resource */ >- res1 = platform_get_resource(pdev, >- IORESOURCE_IRQ, 1); >+ res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); > if (!res1) { > v4l2_err(pdev->dev.driver, > "Unable to get interrupt for VINT1\n"); >- ret = -ENOENT; >- goto probe_disable_clock; >+ ret = -ENODEV; >+ goto probe_free_ccdc_cfg_mem; > } > vpfe_dev->ccdc_irq1 = res1->start; > >- /* Get address base of CCDC */ >- res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); >- if (!res1) { >- v4l2_err(pdev->dev.driver, >- "Unable to get register address map\n"); >- ret = -ENOENT; >- goto probe_disable_clock; >- } >- >- ccdc_cfg->ccdc_addr_size = res1->end - res1->start + 1; >- if (!request_mem_region(res1->start, ccdc_cfg->ccdc_addr_size, >- pdev->dev.driver->name)) { >- v4l2_err(pdev->dev.driver, >- "Failed request_mem_region for ccdc base\n"); >- ret = -ENXIO; >- goto probe_disable_clock; >- } >- ccdc_cfg->ccdc_addr = ioremap_nocache(res1->start, >- ccdc_cfg->ccdc_addr_size); >- if (!ccdc_cfg->ccdc_addr) { >- v4l2_err(pdev->dev.driver, "Unable to ioremap ccdc addr\n"); >- ret = -ENXIO; >- goto probe_out_release_mem1; >- } >- > ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, IRQF_DISABLED, > "vpfe_capture0", vpfe_dev); > > if (0 != ret) { > v4l2_err(pdev->dev.driver, "Unable to request interrupt\n"); >- goto probe_out_unmap1; >+ goto probe_free_ccdc_cfg_mem; > } > > /* Allocate memory for video device */ > vfd = video_device_alloc(); > if (NULL == vfd) { > ret = -ENOMEM; >- v4l2_err(pdev->dev.driver, >- "Unable to alloc video device\n"); >+ v4l2_err(pdev->dev.driver, "Unable to alloc video device\n"); > goto probe_out_release_irq; > } > >@@ -2073,12 +1980,7 @@ probe_out_video_release: > video_device_release(vpfe_dev->video_dev); > probe_out_release_irq: > free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); >-probe_out_unmap1: >- iounmap(ccdc_cfg->ccdc_addr); >-probe_out_release_mem1: >- release_mem_region(res1->start, res1->end - res1->start + 1); >-probe_disable_clock: >- vpfe_disable_clock(vpfe_dev); >+probe_free_ccdc_cfg_mem: > mutex_unlock(&ccdc_lock); > kfree(ccdc_cfg); > probe_free_dev_mem: >@@ -2092,7 +1994,6 @@ probe_free_dev_mem: > static int __devexit vpfe_remove(struct platform_device *pdev) > { > struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); >- struct resource *res; > > v4l2_info(pdev->dev.driver, "vpfe_remove\n"); > >@@ -2100,12 +2001,6 @@ static int __devexit vpfe_remove(struct >platform_device *pdev) > kfree(vpfe_dev->sd); > v4l2_device_unregister(&vpfe_dev->v4l2_dev); > video_unregister_device(vpfe_dev->video_dev); >- mutex_lock(&ccdc_lock); >- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >- release_mem_region(res->start, res->end - res->start + 1); >- iounmap(ccdc_cfg->ccdc_addr); >- mutex_unlock(&ccdc_lock); >- vpfe_disable_clock(vpfe_dev); > kfree(vpfe_dev); > kfree(ccdc_cfg); > return 0; >-- >1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
"Karicheri, Muralidharan" <m-karicheri2@ti.com> writes: > Mauro, > > Please merge this patches if there are no more comments. > > Kevin, > > Could you work with Mauro to merge the arch part as required? > This version looks good with me. I'll assume that these are targed for 2.6.34, not 2.6.33-rc fixes window. These appear to be able at least compile independently, so as soon as Mauro/Hans sign-off on them, I willll add PATCH 4/4 to davinci-next so it will be queued for 2.6.34 and be a part of linux-next. Mauro can queue patches 1-3 in his queue for 2.6.34. They will both be in linux-next for testing. Also, I can *temporarily* add patches 1-3 to davinci git so davinci git will have them all while waiting for 2.6.34 merge window. I will then drop them when Mauro's tree merges upstream. Kevin > Murali Karicheri > Software Design Engineer > Texas Instruments Inc. > Germantown, MD 20874 > phone: 301-407-9583 > email: m-karicheri2@ti.com > >>-----Original Message----- >>From: Karicheri, Muralidharan >>Sent: Wednesday, January 13, 2010 6:27 PM >>To: linux-media@vger.kernel.org; hverkuil@xs4all.nl; >>khilman@deeprootsystems.com; mchehab@infradead.org >>Cc: davinci-linux-open-source@linux.davincidsp.com; Karicheri, Muralidharan >>Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform code >> >>From: Muralidharan Karicheri <m-karicheri2@ti.com> >> >>Following changes are done in this patch:- >> 1) removed the platform code and clk configuration. They are now >> part of ccdc driver (part of the ccdc patches and platform >>patches 2-4) >> 2) Added proper error codes for ccdc register function >> >>Reviewed-by: Vaibhav Hiremath <hvaibhav@ti.com> >>Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> >>Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> >> >>Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> >>Signed-off-by: Muralidharan Karicheri <m-karicheri2@ti.com> >>--- >>Rebased to latest linux-next tree of v4l-dvb >>This combines the two patches sent earlier to change the clock >>configuration >>and converting ccdc drivers to platform drivers. This has updated comments >>against v1 of these patches. >> >> drivers/media/video/davinci/vpfe_capture.c | 131 +++--------------------- >>---- >> 1 files changed, 13 insertions(+), 118 deletions(-) >> >>diff --git a/drivers/media/video/davinci/vpfe_capture.c >>b/drivers/media/video/davinci/vpfe_capture.c >>index de22bc9..885cd54 100644 >>--- a/drivers/media/video/davinci/vpfe_capture.c >>+++ b/drivers/media/video/davinci/vpfe_capture.c >>@@ -107,9 +107,6 @@ struct ccdc_config { >> int vpfe_probed; >> /* name of ccdc device */ >> char name[32]; >>- /* for storing mem maps for CCDC */ >>- int ccdc_addr_size; >>- void *__iomem ccdc_addr; >> }; >> >> /* data structures */ >>@@ -229,7 +226,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>*dev) >> BUG_ON(!dev->hw_ops.set_image_window); >> BUG_ON(!dev->hw_ops.get_image_window); >> BUG_ON(!dev->hw_ops.get_line_length); >>- BUG_ON(!dev->hw_ops.setfbaddr); >> BUG_ON(!dev->hw_ops.getfid); >> >> mutex_lock(&ccdc_lock); >>@@ -240,25 +236,23 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>*dev) >> * walk through it during vpfe probe >> */ >> printk(KERN_ERR "vpfe capture not initialized\n"); >>- ret = -1; >>+ ret = -EFAULT; >> goto unlock; >> } >> >> if (strcmp(dev->name, ccdc_cfg->name)) { >> /* ignore this ccdc */ >>- ret = -1; >>+ ret = -EINVAL; >> goto unlock; >> } >> >> if (ccdc_dev) { >> printk(KERN_ERR "ccdc already registered\n"); >>- ret = -1; >>+ ret = -EINVAL; >> goto unlock; >> } >> >> ccdc_dev = dev; >>- dev->hw_ops.set_ccdc_base(ccdc_cfg->ccdc_addr, >>- ccdc_cfg->ccdc_addr_size); >> unlock: >> mutex_unlock(&ccdc_lock); >> return ret; >>@@ -1786,61 +1780,6 @@ static struct vpfe_device *vpfe_initialize(void) >> return vpfe_dev; >> } >> >>-static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) >>-{ >>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>- >>- clk_disable(vpfe_cfg->vpssclk); >>- clk_put(vpfe_cfg->vpssclk); >>- clk_disable(vpfe_cfg->slaveclk); >>- clk_put(vpfe_cfg->slaveclk); >>- v4l2_info(vpfe_dev->pdev->driver, >>- "vpfe vpss master & slave clocks disabled\n"); >>-} >>- >>-static int vpfe_enable_clock(struct vpfe_device *vpfe_dev) >>-{ >>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>- int ret = -ENOENT; >>- >>- vpfe_cfg->vpssclk = clk_get(vpfe_dev->pdev, "vpss_master"); >>- if (NULL == vpfe_cfg->vpssclk) { >>- v4l2_err(vpfe_dev->pdev->driver, "No clock defined for" >>- "vpss_master\n"); >>- return ret; >>- } >>- >>- if (clk_enable(vpfe_cfg->vpssclk)) { >>- v4l2_err(vpfe_dev->pdev->driver, >>- "vpfe vpss master clock not enabled\n"); >>- goto out; >>- } >>- v4l2_info(vpfe_dev->pdev->driver, >>- "vpfe vpss master clock enabled\n"); >>- >>- vpfe_cfg->slaveclk = clk_get(vpfe_dev->pdev, "vpss_slave"); >>- if (NULL == vpfe_cfg->slaveclk) { >>- v4l2_err(vpfe_dev->pdev->driver, >>- "No clock defined for vpss slave\n"); >>- goto out; >>- } >>- >>- if (clk_enable(vpfe_cfg->slaveclk)) { >>- v4l2_err(vpfe_dev->pdev->driver, >>- "vpfe vpss slave clock not enabled\n"); >>- goto out; >>- } >>- v4l2_info(vpfe_dev->pdev->driver, "vpfe vpss slave clock enabled\n"); >>- return 0; >>-out: >>- if (vpfe_cfg->vpssclk) >>- clk_put(vpfe_cfg->vpssclk); >>- if (vpfe_cfg->slaveclk) >>- clk_put(vpfe_cfg->slaveclk); >>- >>- return -1; >>-} >>- >> /* >> * vpfe_probe : This function creates device entries by register >> * itself to the V4L2 driver and initializes fields of each >>@@ -1870,7 +1809,7 @@ static __init int vpfe_probe(struct platform_device >>*pdev) >> >> if (NULL == pdev->dev.platform_data) { >> v4l2_err(pdev->dev.driver, "Unable to get vpfe config\n"); >>- ret = -ENOENT; >>+ ret = -ENODEV; >> goto probe_free_dev_mem; >> } >> >>@@ -1884,18 +1823,13 @@ static __init int vpfe_probe(struct platform_device >>*pdev) >> goto probe_free_dev_mem; >> } >> >>- /* enable vpss clocks */ >>- ret = vpfe_enable_clock(vpfe_dev); >>- if (ret) >>- goto probe_free_dev_mem; >>- >> mutex_lock(&ccdc_lock); >> /* Allocate memory for ccdc configuration */ >> ccdc_cfg = kmalloc(sizeof(struct ccdc_config), GFP_KERNEL); >> if (NULL == ccdc_cfg) { >> v4l2_err(pdev->dev.driver, >> "Memory allocation failed for ccdc_cfg\n"); >>- goto probe_disable_clock; >>+ goto probe_free_dev_mem; >> } >> >> strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); >>@@ -1904,61 +1838,34 @@ static __init int vpfe_probe(struct platform_device >>*pdev) >> if (!res1) { >> v4l2_err(pdev->dev.driver, >> "Unable to get interrupt for VINT0\n"); >>- ret = -ENOENT; >>- goto probe_disable_clock; >>+ ret = -ENODEV; >>+ goto probe_free_ccdc_cfg_mem; >> } >> vpfe_dev->ccdc_irq0 = res1->start; >> >> /* Get VINT1 irq resource */ >>- res1 = platform_get_resource(pdev, >>- IORESOURCE_IRQ, 1); >>+ res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); >> if (!res1) { >> v4l2_err(pdev->dev.driver, >> "Unable to get interrupt for VINT1\n"); >>- ret = -ENOENT; >>- goto probe_disable_clock; >>+ ret = -ENODEV; >>+ goto probe_free_ccdc_cfg_mem; >> } >> vpfe_dev->ccdc_irq1 = res1->start; >> >>- /* Get address base of CCDC */ >>- res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>- if (!res1) { >>- v4l2_err(pdev->dev.driver, >>- "Unable to get register address map\n"); >>- ret = -ENOENT; >>- goto probe_disable_clock; >>- } >>- >>- ccdc_cfg->ccdc_addr_size = res1->end - res1->start + 1; >>- if (!request_mem_region(res1->start, ccdc_cfg->ccdc_addr_size, >>- pdev->dev.driver->name)) { >>- v4l2_err(pdev->dev.driver, >>- "Failed request_mem_region for ccdc base\n"); >>- ret = -ENXIO; >>- goto probe_disable_clock; >>- } >>- ccdc_cfg->ccdc_addr = ioremap_nocache(res1->start, >>- ccdc_cfg->ccdc_addr_size); >>- if (!ccdc_cfg->ccdc_addr) { >>- v4l2_err(pdev->dev.driver, "Unable to ioremap ccdc addr\n"); >>- ret = -ENXIO; >>- goto probe_out_release_mem1; >>- } >>- >> ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, IRQF_DISABLED, >> "vpfe_capture0", vpfe_dev); >> >> if (0 != ret) { >> v4l2_err(pdev->dev.driver, "Unable to request interrupt\n"); >>- goto probe_out_unmap1; >>+ goto probe_free_ccdc_cfg_mem; >> } >> >> /* Allocate memory for video device */ >> vfd = video_device_alloc(); >> if (NULL == vfd) { >> ret = -ENOMEM; >>- v4l2_err(pdev->dev.driver, >>- "Unable to alloc video device\n"); >>+ v4l2_err(pdev->dev.driver, "Unable to alloc video device\n"); >> goto probe_out_release_irq; >> } >> >>@@ -2073,12 +1980,7 @@ probe_out_video_release: >> video_device_release(vpfe_dev->video_dev); >> probe_out_release_irq: >> free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); >>-probe_out_unmap1: >>- iounmap(ccdc_cfg->ccdc_addr); >>-probe_out_release_mem1: >>- release_mem_region(res1->start, res1->end - res1->start + 1); >>-probe_disable_clock: >>- vpfe_disable_clock(vpfe_dev); >>+probe_free_ccdc_cfg_mem: >> mutex_unlock(&ccdc_lock); >> kfree(ccdc_cfg); >> probe_free_dev_mem: >>@@ -2092,7 +1994,6 @@ probe_free_dev_mem: >> static int __devexit vpfe_remove(struct platform_device *pdev) >> { >> struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); >>- struct resource *res; >> >> v4l2_info(pdev->dev.driver, "vpfe_remove\n"); >> >>@@ -2100,12 +2001,6 @@ static int __devexit vpfe_remove(struct >>platform_device *pdev) >> kfree(vpfe_dev->sd); >> v4l2_device_unregister(&vpfe_dev->v4l2_dev); >> video_unregister_device(vpfe_dev->video_dev); >>- mutex_lock(&ccdc_lock); >>- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>- release_mem_region(res->start, res->end - res->start + 1); >>- iounmap(ccdc_cfg->ccdc_addr); >>- mutex_unlock(&ccdc_lock); >>- vpfe_disable_clock(vpfe_dev); >> kfree(vpfe_dev); >> kfree(ccdc_cfg); >> return 0; >>-- >>1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
>-----Original Message----- >From: Kevin Hilman [mailto:khilman@deeprootsystems.com] >Sent: Thursday, January 14, 2010 3:48 PM >To: Karicheri, Muralidharan >Cc: linux-media@vger.kernel.org; hverkuil@xs4all.nl; mchehab@infradead.org; >davinci-linux-open-source@linux.davincidsp.com >Subject: Re: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code > >"Karicheri, Muralidharan" <m-karicheri2@ti.com> writes: > >> Mauro, >> >> Please merge this patches if there are no more comments. >> >> Kevin, >> >> Could you work with Mauro to merge the arch part as required? >> > >This version looks good with me. > >I'll assume that these are targed for 2.6.34, not 2.6.33-rc fixes window. That is correct. > >These appear to be able at least compile independently, so as soon as >Mauro/Hans sign-off on them, I willll add PATCH 4/4 to davinci-next so >it will be queued for 2.6.34 and be a part of linux-next. > Thanks. Murali >Mauro can queue patches 1-3 in his queue for 2.6.34. They will both >be in linux-next for testing. > >Also, I can *temporarily* add patches 1-3 to davinci git so davinci git >will have them all while waiting for 2.6.34 merge window. I will then >drop them when Mauro's tree merges upstream. > >Kevin > >> Murali Karicheri >> Software Design Engineer >> Texas Instruments Inc. >> Germantown, MD 20874 >> phone: 301-407-9583 >> email: m-karicheri2@ti.com >> >>>-----Original Message----- >>>From: Karicheri, Muralidharan >>>Sent: Wednesday, January 13, 2010 6:27 PM >>>To: linux-media@vger.kernel.org; hverkuil@xs4all.nl; >>>khilman@deeprootsystems.com; mchehab@infradead.org >>>Cc: davinci-linux-open-source@linux.davincidsp.com; Karicheri, >Muralidharan >>>Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code >>> >>>From: Muralidharan Karicheri <m-karicheri2@ti.com> >>> >>>Following changes are done in this patch:- >>> 1) removed the platform code and clk configuration. They are now >>> part of ccdc driver (part of the ccdc patches and platform >>>patches 2-4) >>> 2) Added proper error codes for ccdc register function >>> >>>Reviewed-by: Vaibhav Hiremath <hvaibhav@ti.com> >>>Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> >>>Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> >>> >>>Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> >>>Signed-off-by: Muralidharan Karicheri <m-karicheri2@ti.com> >>>--- >>>Rebased to latest linux-next tree of v4l-dvb >>>This combines the two patches sent earlier to change the clock >>>configuration >>>and converting ccdc drivers to platform drivers. This has updated >comments >>>against v1 of these patches. >>> >>> drivers/media/video/davinci/vpfe_capture.c | 131 +++------------------- >-- >>>---- >>> 1 files changed, 13 insertions(+), 118 deletions(-) >>> >>>diff --git a/drivers/media/video/davinci/vpfe_capture.c >>>b/drivers/media/video/davinci/vpfe_capture.c >>>index de22bc9..885cd54 100644 >>>--- a/drivers/media/video/davinci/vpfe_capture.c >>>+++ b/drivers/media/video/davinci/vpfe_capture.c >>>@@ -107,9 +107,6 @@ struct ccdc_config { >>> int vpfe_probed; >>> /* name of ccdc device */ >>> char name[32]; >>>- /* for storing mem maps for CCDC */ >>>- int ccdc_addr_size; >>>- void *__iomem ccdc_addr; >>> }; >>> >>> /* data structures */ >>>@@ -229,7 +226,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>>*dev) >>> BUG_ON(!dev->hw_ops.set_image_window); >>> BUG_ON(!dev->hw_ops.get_image_window); >>> BUG_ON(!dev->hw_ops.get_line_length); >>>- BUG_ON(!dev->hw_ops.setfbaddr); >>> BUG_ON(!dev->hw_ops.getfid); >>> >>> mutex_lock(&ccdc_lock); >>>@@ -240,25 +236,23 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>>*dev) >>> * walk through it during vpfe probe >>> */ >>> printk(KERN_ERR "vpfe capture not initialized\n"); >>>- ret = -1; >>>+ ret = -EFAULT; >>> goto unlock; >>> } >>> >>> if (strcmp(dev->name, ccdc_cfg->name)) { >>> /* ignore this ccdc */ >>>- ret = -1; >>>+ ret = -EINVAL; >>> goto unlock; >>> } >>> >>> if (ccdc_dev) { >>> printk(KERN_ERR "ccdc already registered\n"); >>>- ret = -1; >>>+ ret = -EINVAL; >>> goto unlock; >>> } >>> >>> ccdc_dev = dev; >>>- dev->hw_ops.set_ccdc_base(ccdc_cfg->ccdc_addr, >>>- ccdc_cfg->ccdc_addr_size); >>> unlock: >>> mutex_unlock(&ccdc_lock); >>> return ret; >>>@@ -1786,61 +1780,6 @@ static struct vpfe_device *vpfe_initialize(void) >>> return vpfe_dev; >>> } >>> >>>-static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) >>>-{ >>>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>>- >>>- clk_disable(vpfe_cfg->vpssclk); >>>- clk_put(vpfe_cfg->vpssclk); >>>- clk_disable(vpfe_cfg->slaveclk); >>>- clk_put(vpfe_cfg->slaveclk); >>>- v4l2_info(vpfe_dev->pdev->driver, >>>- "vpfe vpss master & slave clocks disabled\n"); >>>-} >>>- >>>-static int vpfe_enable_clock(struct vpfe_device *vpfe_dev) >>>-{ >>>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>>- int ret = -ENOENT; >>>- >>>- vpfe_cfg->vpssclk = clk_get(vpfe_dev->pdev, "vpss_master"); >>>- if (NULL == vpfe_cfg->vpssclk) { >>>- v4l2_err(vpfe_dev->pdev->driver, "No clock defined for" >>>- "vpss_master\n"); >>>- return ret; >>>- } >>>- >>>- if (clk_enable(vpfe_cfg->vpssclk)) { >>>- v4l2_err(vpfe_dev->pdev->driver, >>>- "vpfe vpss master clock not enabled\n"); >>>- goto out; >>>- } >>>- v4l2_info(vpfe_dev->pdev->driver, >>>- "vpfe vpss master clock enabled\n"); >>>- >>>- vpfe_cfg->slaveclk = clk_get(vpfe_dev->pdev, "vpss_slave"); >>>- if (NULL == vpfe_cfg->slaveclk) { >>>- v4l2_err(vpfe_dev->pdev->driver, >>>- "No clock defined for vpss slave\n"); >>>- goto out; >>>- } >>>- >>>- if (clk_enable(vpfe_cfg->slaveclk)) { >>>- v4l2_err(vpfe_dev->pdev->driver, >>>- "vpfe vpss slave clock not enabled\n"); >>>- goto out; >>>- } >>>- v4l2_info(vpfe_dev->pdev->driver, "vpfe vpss slave clock enabled\n"); >>>- return 0; >>>-out: >>>- if (vpfe_cfg->vpssclk) >>>- clk_put(vpfe_cfg->vpssclk); >>>- if (vpfe_cfg->slaveclk) >>>- clk_put(vpfe_cfg->slaveclk); >>>- >>>- return -1; >>>-} >>>- >>> /* >>> * vpfe_probe : This function creates device entries by register >>> * itself to the V4L2 driver and initializes fields of each >>>@@ -1870,7 +1809,7 @@ static __init int vpfe_probe(struct platform_device >>>*pdev) >>> >>> if (NULL == pdev->dev.platform_data) { >>> v4l2_err(pdev->dev.driver, "Unable to get vpfe config\n"); >>>- ret = -ENOENT; >>>+ ret = -ENODEV; >>> goto probe_free_dev_mem; >>> } >>> >>>@@ -1884,18 +1823,13 @@ static __init int vpfe_probe(struct >platform_device >>>*pdev) >>> goto probe_free_dev_mem; >>> } >>> >>>- /* enable vpss clocks */ >>>- ret = vpfe_enable_clock(vpfe_dev); >>>- if (ret) >>>- goto probe_free_dev_mem; >>>- >>> mutex_lock(&ccdc_lock); >>> /* Allocate memory for ccdc configuration */ >>> ccdc_cfg = kmalloc(sizeof(struct ccdc_config), GFP_KERNEL); >>> if (NULL == ccdc_cfg) { >>> v4l2_err(pdev->dev.driver, >>> "Memory allocation failed for ccdc_cfg\n"); >>>- goto probe_disable_clock; >>>+ goto probe_free_dev_mem; >>> } >>> >>> strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); >>>@@ -1904,61 +1838,34 @@ static __init int vpfe_probe(struct >platform_device >>>*pdev) >>> if (!res1) { >>> v4l2_err(pdev->dev.driver, >>> "Unable to get interrupt for VINT0\n"); >>>- ret = -ENOENT; >>>- goto probe_disable_clock; >>>+ ret = -ENODEV; >>>+ goto probe_free_ccdc_cfg_mem; >>> } >>> vpfe_dev->ccdc_irq0 = res1->start; >>> >>> /* Get VINT1 irq resource */ >>>- res1 = platform_get_resource(pdev, >>>- IORESOURCE_IRQ, 1); >>>+ res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); >>> if (!res1) { >>> v4l2_err(pdev->dev.driver, >>> "Unable to get interrupt for VINT1\n"); >>>- ret = -ENOENT; >>>- goto probe_disable_clock; >>>+ ret = -ENODEV; >>>+ goto probe_free_ccdc_cfg_mem; >>> } >>> vpfe_dev->ccdc_irq1 = res1->start; >>> >>>- /* Get address base of CCDC */ >>>- res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>- if (!res1) { >>>- v4l2_err(pdev->dev.driver, >>>- "Unable to get register address map\n"); >>>- ret = -ENOENT; >>>- goto probe_disable_clock; >>>- } >>>- >>>- ccdc_cfg->ccdc_addr_size = res1->end - res1->start + 1; >>>- if (!request_mem_region(res1->start, ccdc_cfg->ccdc_addr_size, >>>- pdev->dev.driver->name)) { >>>- v4l2_err(pdev->dev.driver, >>>- "Failed request_mem_region for ccdc base\n"); >>>- ret = -ENXIO; >>>- goto probe_disable_clock; >>>- } >>>- ccdc_cfg->ccdc_addr = ioremap_nocache(res1->start, >>>- ccdc_cfg->ccdc_addr_size); >>>- if (!ccdc_cfg->ccdc_addr) { >>>- v4l2_err(pdev->dev.driver, "Unable to ioremap ccdc addr\n"); >>>- ret = -ENXIO; >>>- goto probe_out_release_mem1; >>>- } >>>- >>> ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, IRQF_DISABLED, >>> "vpfe_capture0", vpfe_dev); >>> >>> if (0 != ret) { >>> v4l2_err(pdev->dev.driver, "Unable to request interrupt\n"); >>>- goto probe_out_unmap1; >>>+ goto probe_free_ccdc_cfg_mem; >>> } >>> >>> /* Allocate memory for video device */ >>> vfd = video_device_alloc(); >>> if (NULL == vfd) { >>> ret = -ENOMEM; >>>- v4l2_err(pdev->dev.driver, >>>- "Unable to alloc video device\n"); >>>+ v4l2_err(pdev->dev.driver, "Unable to alloc video device\n"); >>> goto probe_out_release_irq; >>> } >>> >>>@@ -2073,12 +1980,7 @@ probe_out_video_release: >>> video_device_release(vpfe_dev->video_dev); >>> probe_out_release_irq: >>> free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); >>>-probe_out_unmap1: >>>- iounmap(ccdc_cfg->ccdc_addr); >>>-probe_out_release_mem1: >>>- release_mem_region(res1->start, res1->end - res1->start + 1); >>>-probe_disable_clock: >>>- vpfe_disable_clock(vpfe_dev); >>>+probe_free_ccdc_cfg_mem: >>> mutex_unlock(&ccdc_lock); >>> kfree(ccdc_cfg); >>> probe_free_dev_mem: >>>@@ -2092,7 +1994,6 @@ probe_free_dev_mem: >>> static int __devexit vpfe_remove(struct platform_device *pdev) >>> { >>> struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); >>>- struct resource *res; >>> >>> v4l2_info(pdev->dev.driver, "vpfe_remove\n"); >>> >>>@@ -2100,12 +2001,6 @@ static int __devexit vpfe_remove(struct >>>platform_device *pdev) >>> kfree(vpfe_dev->sd); >>> v4l2_device_unregister(&vpfe_dev->v4l2_dev); >>> video_unregister_device(vpfe_dev->video_dev); >>>- mutex_lock(&ccdc_lock); >>>- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>- release_mem_region(res->start, res->end - res->start + 1); >>>- iounmap(ccdc_cfg->ccdc_addr); >>>- mutex_unlock(&ccdc_lock); >>>- vpfe_disable_clock(vpfe_dev); >>> kfree(vpfe_dev); >>> kfree(ccdc_cfg); >>> return 0; >>>-- >>>1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Mauro, Could you add patches 1-3 to linux-next ASAP? See the response from Kevin for the arch part. Murali Karicheri Software Design Engineer Texas Instruments Inc. Germantown, MD 20874 phone: 301-407-9583 email: m-karicheri2@ti.com >-----Original Message----- >From: Kevin Hilman [mailto:khilman@deeprootsystems.com] >Sent: Thursday, January 14, 2010 3:48 PM >To: Karicheri, Muralidharan >Cc: linux-media@vger.kernel.org; hverkuil@xs4all.nl; mchehab@infradead.org; >davinci-linux-open-source@linux.davincidsp.com >Subject: Re: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code > >"Karicheri, Muralidharan" <m-karicheri2@ti.com> writes: > >> Mauro, >> >> Please merge this patches if there are no more comments. >> >> Kevin, >> >> Could you work with Mauro to merge the arch part as required? >> > >This version looks good with me. > >I'll assume that these are targed for 2.6.34, not 2.6.33-rc fixes window. > >These appear to be able at least compile independently, so as soon as >Mauro/Hans sign-off on them, I willll add PATCH 4/4 to davinci-next so >it will be queued for 2.6.34 and be a part of linux-next. > >Mauro can queue patches 1-3 in his queue for 2.6.34. They will both >be in linux-next for testing. > >Also, I can *temporarily* add patches 1-3 to davinci git so davinci git >will have them all while waiting for 2.6.34 merge window. I will then >drop them when Mauro's tree merges upstream. > >Kevin > >> Murali Karicheri >> Software Design Engineer >> Texas Instruments Inc. >> Germantown, MD 20874 >> phone: 301-407-9583 >> email: m-karicheri2@ti.com >> >>>-----Original Message----- >>>From: Karicheri, Muralidharan >>>Sent: Wednesday, January 13, 2010 6:27 PM >>>To: linux-media@vger.kernel.org; hverkuil@xs4all.nl; >>>khilman@deeprootsystems.com; mchehab@infradead.org >>>Cc: davinci-linux-open-source@linux.davincidsp.com; Karicheri, >Muralidharan >>>Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code >>> >>>From: Muralidharan Karicheri <m-karicheri2@ti.com> >>> >>>Following changes are done in this patch:- >>> 1) removed the platform code and clk configuration. They are now >>> part of ccdc driver (part of the ccdc patches and platform >>>patches 2-4) >>> 2) Added proper error codes for ccdc register function >>> >>>Reviewed-by: Vaibhav Hiremath <hvaibhav@ti.com> >>>Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> >>>Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> >>> >>>Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> >>>Signed-off-by: Muralidharan Karicheri <m-karicheri2@ti.com> >>>--- >>>Rebased to latest linux-next tree of v4l-dvb >>>This combines the two patches sent earlier to change the clock >>>configuration >>>and converting ccdc drivers to platform drivers. This has updated >comments >>>against v1 of these patches. >>> >>> drivers/media/video/davinci/vpfe_capture.c | 131 +++------------------- >-- >>>---- >>> 1 files changed, 13 insertions(+), 118 deletions(-) >>> >>>diff --git a/drivers/media/video/davinci/vpfe_capture.c >>>b/drivers/media/video/davinci/vpfe_capture.c >>>index de22bc9..885cd54 100644 >>>--- a/drivers/media/video/davinci/vpfe_capture.c >>>+++ b/drivers/media/video/davinci/vpfe_capture.c >>>@@ -107,9 +107,6 @@ struct ccdc_config { >>> int vpfe_probed; >>> /* name of ccdc device */ >>> char name[32]; >>>- /* for storing mem maps for CCDC */ >>>- int ccdc_addr_size; >>>- void *__iomem ccdc_addr; >>> }; >>> >>> /* data structures */ >>>@@ -229,7 +226,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>>*dev) >>> BUG_ON(!dev->hw_ops.set_image_window); >>> BUG_ON(!dev->hw_ops.get_image_window); >>> BUG_ON(!dev->hw_ops.get_line_length); >>>- BUG_ON(!dev->hw_ops.setfbaddr); >>> BUG_ON(!dev->hw_ops.getfid); >>> >>> mutex_lock(&ccdc_lock); >>>@@ -240,25 +236,23 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>>*dev) >>> * walk through it during vpfe probe >>> */ >>> printk(KERN_ERR "vpfe capture not initialized\n"); >>>- ret = -1; >>>+ ret = -EFAULT; >>> goto unlock; >>> } >>> >>> if (strcmp(dev->name, ccdc_cfg->name)) { >>> /* ignore this ccdc */ >>>- ret = -1; >>>+ ret = -EINVAL; >>> goto unlock; >>> } >>> >>> if (ccdc_dev) { >>> printk(KERN_ERR "ccdc already registered\n"); >>>- ret = -1; >>>+ ret = -EINVAL; >>> goto unlock; >>> } >>> >>> ccdc_dev = dev; >>>- dev->hw_ops.set_ccdc_base(ccdc_cfg->ccdc_addr, >>>- ccdc_cfg->ccdc_addr_size); >>> unlock: >>> mutex_unlock(&ccdc_lock); >>> return ret; >>>@@ -1786,61 +1780,6 @@ static struct vpfe_device *vpfe_initialize(void) >>> return vpfe_dev; >>> } >>> >>>-static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) >>>-{ >>>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>>- >>>- clk_disable(vpfe_cfg->vpssclk); >>>- clk_put(vpfe_cfg->vpssclk); >>>- clk_disable(vpfe_cfg->slaveclk); >>>- clk_put(vpfe_cfg->slaveclk); >>>- v4l2_info(vpfe_dev->pdev->driver, >>>- "vpfe vpss master & slave clocks disabled\n"); >>>-} >>>- >>>-static int vpfe_enable_clock(struct vpfe_device *vpfe_dev) >>>-{ >>>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>>- int ret = -ENOENT; >>>- >>>- vpfe_cfg->vpssclk = clk_get(vpfe_dev->pdev, "vpss_master"); >>>- if (NULL == vpfe_cfg->vpssclk) { >>>- v4l2_err(vpfe_dev->pdev->driver, "No clock defined for" >>>- "vpss_master\n"); >>>- return ret; >>>- } >>>- >>>- if (clk_enable(vpfe_cfg->vpssclk)) { >>>- v4l2_err(vpfe_dev->pdev->driver, >>>- "vpfe vpss master clock not enabled\n"); >>>- goto out; >>>- } >>>- v4l2_info(vpfe_dev->pdev->driver, >>>- "vpfe vpss master clock enabled\n"); >>>- >>>- vpfe_cfg->slaveclk = clk_get(vpfe_dev->pdev, "vpss_slave"); >>>- if (NULL == vpfe_cfg->slaveclk) { >>>- v4l2_err(vpfe_dev->pdev->driver, >>>- "No clock defined for vpss slave\n"); >>>- goto out; >>>- } >>>- >>>- if (clk_enable(vpfe_cfg->slaveclk)) { >>>- v4l2_err(vpfe_dev->pdev->driver, >>>- "vpfe vpss slave clock not enabled\n"); >>>- goto out; >>>- } >>>- v4l2_info(vpfe_dev->pdev->driver, "vpfe vpss slave clock enabled\n"); >>>- return 0; >>>-out: >>>- if (vpfe_cfg->vpssclk) >>>- clk_put(vpfe_cfg->vpssclk); >>>- if (vpfe_cfg->slaveclk) >>>- clk_put(vpfe_cfg->slaveclk); >>>- >>>- return -1; >>>-} >>>- >>> /* >>> * vpfe_probe : This function creates device entries by register >>> * itself to the V4L2 driver and initializes fields of each >>>@@ -1870,7 +1809,7 @@ static __init int vpfe_probe(struct platform_device >>>*pdev) >>> >>> if (NULL == pdev->dev.platform_data) { >>> v4l2_err(pdev->dev.driver, "Unable to get vpfe config\n"); >>>- ret = -ENOENT; >>>+ ret = -ENODEV; >>> goto probe_free_dev_mem; >>> } >>> >>>@@ -1884,18 +1823,13 @@ static __init int vpfe_probe(struct >platform_device >>>*pdev) >>> goto probe_free_dev_mem; >>> } >>> >>>- /* enable vpss clocks */ >>>- ret = vpfe_enable_clock(vpfe_dev); >>>- if (ret) >>>- goto probe_free_dev_mem; >>>- >>> mutex_lock(&ccdc_lock); >>> /* Allocate memory for ccdc configuration */ >>> ccdc_cfg = kmalloc(sizeof(struct ccdc_config), GFP_KERNEL); >>> if (NULL == ccdc_cfg) { >>> v4l2_err(pdev->dev.driver, >>> "Memory allocation failed for ccdc_cfg\n"); >>>- goto probe_disable_clock; >>>+ goto probe_free_dev_mem; >>> } >>> >>> strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); >>>@@ -1904,61 +1838,34 @@ static __init int vpfe_probe(struct >platform_device >>>*pdev) >>> if (!res1) { >>> v4l2_err(pdev->dev.driver, >>> "Unable to get interrupt for VINT0\n"); >>>- ret = -ENOENT; >>>- goto probe_disable_clock; >>>+ ret = -ENODEV; >>>+ goto probe_free_ccdc_cfg_mem; >>> } >>> vpfe_dev->ccdc_irq0 = res1->start; >>> >>> /* Get VINT1 irq resource */ >>>- res1 = platform_get_resource(pdev, >>>- IORESOURCE_IRQ, 1); >>>+ res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); >>> if (!res1) { >>> v4l2_err(pdev->dev.driver, >>> "Unable to get interrupt for VINT1\n"); >>>- ret = -ENOENT; >>>- goto probe_disable_clock; >>>+ ret = -ENODEV; >>>+ goto probe_free_ccdc_cfg_mem; >>> } >>> vpfe_dev->ccdc_irq1 = res1->start; >>> >>>- /* Get address base of CCDC */ >>>- res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>- if (!res1) { >>>- v4l2_err(pdev->dev.driver, >>>- "Unable to get register address map\n"); >>>- ret = -ENOENT; >>>- goto probe_disable_clock; >>>- } >>>- >>>- ccdc_cfg->ccdc_addr_size = res1->end - res1->start + 1; >>>- if (!request_mem_region(res1->start, ccdc_cfg->ccdc_addr_size, >>>- pdev->dev.driver->name)) { >>>- v4l2_err(pdev->dev.driver, >>>- "Failed request_mem_region for ccdc base\n"); >>>- ret = -ENXIO; >>>- goto probe_disable_clock; >>>- } >>>- ccdc_cfg->ccdc_addr = ioremap_nocache(res1->start, >>>- ccdc_cfg->ccdc_addr_size); >>>- if (!ccdc_cfg->ccdc_addr) { >>>- v4l2_err(pdev->dev.driver, "Unable to ioremap ccdc addr\n"); >>>- ret = -ENXIO; >>>- goto probe_out_release_mem1; >>>- } >>>- >>> ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, IRQF_DISABLED, >>> "vpfe_capture0", vpfe_dev); >>> >>> if (0 != ret) { >>> v4l2_err(pdev->dev.driver, "Unable to request interrupt\n"); >>>- goto probe_out_unmap1; >>>+ goto probe_free_ccdc_cfg_mem; >>> } >>> >>> /* Allocate memory for video device */ >>> vfd = video_device_alloc(); >>> if (NULL == vfd) { >>> ret = -ENOMEM; >>>- v4l2_err(pdev->dev.driver, >>>- "Unable to alloc video device\n"); >>>+ v4l2_err(pdev->dev.driver, "Unable to alloc video device\n"); >>> goto probe_out_release_irq; >>> } >>> >>>@@ -2073,12 +1980,7 @@ probe_out_video_release: >>> video_device_release(vpfe_dev->video_dev); >>> probe_out_release_irq: >>> free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); >>>-probe_out_unmap1: >>>- iounmap(ccdc_cfg->ccdc_addr); >>>-probe_out_release_mem1: >>>- release_mem_region(res1->start, res1->end - res1->start + 1); >>>-probe_disable_clock: >>>- vpfe_disable_clock(vpfe_dev); >>>+probe_free_ccdc_cfg_mem: >>> mutex_unlock(&ccdc_lock); >>> kfree(ccdc_cfg); >>> probe_free_dev_mem: >>>@@ -2092,7 +1994,6 @@ probe_free_dev_mem: >>> static int __devexit vpfe_remove(struct platform_device *pdev) >>> { >>> struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); >>>- struct resource *res; >>> >>> v4l2_info(pdev->dev.driver, "vpfe_remove\n"); >>> >>>@@ -2100,12 +2001,6 @@ static int __devexit vpfe_remove(struct >>>platform_device *pdev) >>> kfree(vpfe_dev->sd); >>> v4l2_device_unregister(&vpfe_dev->v4l2_dev); >>> video_unregister_device(vpfe_dev->video_dev); >>>- mutex_lock(&ccdc_lock); >>>- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>- release_mem_region(res->start, res->end - res->start + 1); >>>- iounmap(ccdc_cfg->ccdc_addr); >>>- mutex_unlock(&ccdc_lock); >>>- vpfe_disable_clock(vpfe_dev); >>> kfree(vpfe_dev); >>> kfree(ccdc_cfg); >>> return 0; >>>-- >>>1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Mauro, I know you are busy, but this patch is sitting too long for merge and require your service. Could you at least respond to my email with your plan so that I can work on the next patch set for your merge. Thanks and regards, Murali Karicheri Software Design Engineer Texas Instruments Inc. Germantown, MD 20874 phone: 301-407-9583 email: m-karicheri2@ti.com >-----Original Message----- >From: davinci-linux-open-source-bounces@linux.davincidsp.com >[mailto:davinci-linux-open-source-bounces@linux.davincidsp.com] On Behalf >Of Karicheri, Muralidharan >Sent: Thursday, January 14, 2010 4:24 PM >To: mchehab@infradead.org >Cc: davinci-linux-open-source@linux.davincidsp.com; mchehab@infradead.org; >linux-media@vger.kernel.org >Subject: RE: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code > >Mauro, > >Could you add patches 1-3 to linux-next ASAP? > >See the response from Kevin for the arch part. > >Murali Karicheri >Software Design Engineer >Texas Instruments Inc. >Germantown, MD 20874 >phone: 301-407-9583 >email: m-karicheri2@ti.com > >>-----Original Message----- >>From: Kevin Hilman [mailto:khilman@deeprootsystems.com] >>Sent: Thursday, January 14, 2010 3:48 PM >>To: Karicheri, Muralidharan >>Cc: linux-media@vger.kernel.org; hverkuil@xs4all.nl; >mchehab@infradead.org; >>davinci-linux-open-source@linux.davincidsp.com >>Subject: Re: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >>code >> >>"Karicheri, Muralidharan" <m-karicheri2@ti.com> writes: >> >>> Mauro, >>> >>> Please merge this patches if there are no more comments. >>> >>> Kevin, >>> >>> Could you work with Mauro to merge the arch part as required? >>> >> >>This version looks good with me. >> >>I'll assume that these are targed for 2.6.34, not 2.6.33-rc fixes window. >> >>These appear to be able at least compile independently, so as soon as >>Mauro/Hans sign-off on them, I willll add PATCH 4/4 to davinci-next so >>it will be queued for 2.6.34 and be a part of linux-next. >> >>Mauro can queue patches 1-3 in his queue for 2.6.34. They will both >>be in linux-next for testing. >> >>Also, I can *temporarily* add patches 1-3 to davinci git so davinci git >>will have them all while waiting for 2.6.34 merge window. I will then >>drop them when Mauro's tree merges upstream. >> >>Kevin >> >>> Murali Karicheri >>> Software Design Engineer >>> Texas Instruments Inc. >>> Germantown, MD 20874 >>> phone: 301-407-9583 >>> email: m-karicheri2@ti.com >>> >>>>-----Original Message----- >>>>From: Karicheri, Muralidharan >>>>Sent: Wednesday, January 13, 2010 6:27 PM >>>>To: linux-media@vger.kernel.org; hverkuil@xs4all.nl; >>>>khilman@deeprootsystems.com; mchehab@infradead.org >>>>Cc: davinci-linux-open-source@linux.davincidsp.com; Karicheri, >>Muralidharan >>>>Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >>code >>>> >>>>From: Muralidharan Karicheri <m-karicheri2@ti.com> >>>> >>>>Following changes are done in this patch:- >>>> 1) removed the platform code and clk configuration. They are now >>>> part of ccdc driver (part of the ccdc patches and platform >>>>patches 2-4) >>>> 2) Added proper error codes for ccdc register function >>>> >>>>Reviewed-by: Vaibhav Hiremath <hvaibhav@ti.com> >>>>Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> >>>>Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl> >>>> >>>>Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> >>>>Signed-off-by: Muralidharan Karicheri <m-karicheri2@ti.com> >>>>--- >>>>Rebased to latest linux-next tree of v4l-dvb >>>>This combines the two patches sent earlier to change the clock >>>>configuration >>>>and converting ccdc drivers to platform drivers. This has updated >>comments >>>>against v1 of these patches. >>>> >>>> drivers/media/video/davinci/vpfe_capture.c | 131 +++------------------ >- >>-- >>>>---- >>>> 1 files changed, 13 insertions(+), 118 deletions(-) >>>> >>>>diff --git a/drivers/media/video/davinci/vpfe_capture.c >>>>b/drivers/media/video/davinci/vpfe_capture.c >>>>index de22bc9..885cd54 100644 >>>>--- a/drivers/media/video/davinci/vpfe_capture.c >>>>+++ b/drivers/media/video/davinci/vpfe_capture.c >>>>@@ -107,9 +107,6 @@ struct ccdc_config { >>>> int vpfe_probed; >>>> /* name of ccdc device */ >>>> char name[32]; >>>>- /* for storing mem maps for CCDC */ >>>>- int ccdc_addr_size; >>>>- void *__iomem ccdc_addr; >>>> }; >>>> >>>> /* data structures */ >>>>@@ -229,7 +226,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device >>>>*dev) >>>> BUG_ON(!dev->hw_ops.set_image_window); >>>> BUG_ON(!dev->hw_ops.get_image_window); >>>> BUG_ON(!dev->hw_ops.get_line_length); >>>>- BUG_ON(!dev->hw_ops.setfbaddr); >>>> BUG_ON(!dev->hw_ops.getfid); >>>> >>>> mutex_lock(&ccdc_lock); >>>>@@ -240,25 +236,23 @@ int vpfe_register_ccdc_device(struct >ccdc_hw_device >>>>*dev) >>>> * walk through it during vpfe probe >>>> */ >>>> printk(KERN_ERR "vpfe capture not initialized\n"); >>>>- ret = -1; >>>>+ ret = -EFAULT; >>>> goto unlock; >>>> } >>>> >>>> if (strcmp(dev->name, ccdc_cfg->name)) { >>>> /* ignore this ccdc */ >>>>- ret = -1; >>>>+ ret = -EINVAL; >>>> goto unlock; >>>> } >>>> >>>> if (ccdc_dev) { >>>> printk(KERN_ERR "ccdc already registered\n"); >>>>- ret = -1; >>>>+ ret = -EINVAL; >>>> goto unlock; >>>> } >>>> >>>> ccdc_dev = dev; >>>>- dev->hw_ops.set_ccdc_base(ccdc_cfg->ccdc_addr, >>>>- ccdc_cfg->ccdc_addr_size); >>>> unlock: >>>> mutex_unlock(&ccdc_lock); >>>> return ret; >>>>@@ -1786,61 +1780,6 @@ static struct vpfe_device *vpfe_initialize(void) >>>> return vpfe_dev; >>>> } >>>> >>>>-static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) >>>>-{ >>>>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>>>- >>>>- clk_disable(vpfe_cfg->vpssclk); >>>>- clk_put(vpfe_cfg->vpssclk); >>>>- clk_disable(vpfe_cfg->slaveclk); >>>>- clk_put(vpfe_cfg->slaveclk); >>>>- v4l2_info(vpfe_dev->pdev->driver, >>>>- "vpfe vpss master & slave clocks disabled\n"); >>>>-} >>>>- >>>>-static int vpfe_enable_clock(struct vpfe_device *vpfe_dev) >>>>-{ >>>>- struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>>>- int ret = -ENOENT; >>>>- >>>>- vpfe_cfg->vpssclk = clk_get(vpfe_dev->pdev, "vpss_master"); >>>>- if (NULL == vpfe_cfg->vpssclk) { >>>>- v4l2_err(vpfe_dev->pdev->driver, "No clock defined for" >>>>- "vpss_master\n"); >>>>- return ret; >>>>- } >>>>- >>>>- if (clk_enable(vpfe_cfg->vpssclk)) { >>>>- v4l2_err(vpfe_dev->pdev->driver, >>>>- "vpfe vpss master clock not enabled\n"); >>>>- goto out; >>>>- } >>>>- v4l2_info(vpfe_dev->pdev->driver, >>>>- "vpfe vpss master clock enabled\n"); >>>>- >>>>- vpfe_cfg->slaveclk = clk_get(vpfe_dev->pdev, "vpss_slave"); >>>>- if (NULL == vpfe_cfg->slaveclk) { >>>>- v4l2_err(vpfe_dev->pdev->driver, >>>>- "No clock defined for vpss slave\n"); >>>>- goto out; >>>>- } >>>>- >>>>- if (clk_enable(vpfe_cfg->slaveclk)) { >>>>- v4l2_err(vpfe_dev->pdev->driver, >>>>- "vpfe vpss slave clock not enabled\n"); >>>>- goto out; >>>>- } >>>>- v4l2_info(vpfe_dev->pdev->driver, "vpfe vpss slave clock enabled\n"); >>>>- return 0; >>>>-out: >>>>- if (vpfe_cfg->vpssclk) >>>>- clk_put(vpfe_cfg->vpssclk); >>>>- if (vpfe_cfg->slaveclk) >>>>- clk_put(vpfe_cfg->slaveclk); >>>>- >>>>- return -1; >>>>-} >>>>- >>>> /* >>>> * vpfe_probe : This function creates device entries by register >>>> * itself to the V4L2 driver and initializes fields of each >>>>@@ -1870,7 +1809,7 @@ static __init int vpfe_probe(struct >platform_device >>>>*pdev) >>>> >>>> if (NULL == pdev->dev.platform_data) { >>>> v4l2_err(pdev->dev.driver, "Unable to get vpfe config\n"); >>>>- ret = -ENOENT; >>>>+ ret = -ENODEV; >>>> goto probe_free_dev_mem; >>>> } >>>> >>>>@@ -1884,18 +1823,13 @@ static __init int vpfe_probe(struct >>platform_device >>>>*pdev) >>>> goto probe_free_dev_mem; >>>> } >>>> >>>>- /* enable vpss clocks */ >>>>- ret = vpfe_enable_clock(vpfe_dev); >>>>- if (ret) >>>>- goto probe_free_dev_mem; >>>>- >>>> mutex_lock(&ccdc_lock); >>>> /* Allocate memory for ccdc configuration */ >>>> ccdc_cfg = kmalloc(sizeof(struct ccdc_config), GFP_KERNEL); >>>> if (NULL == ccdc_cfg) { >>>> v4l2_err(pdev->dev.driver, >>>> "Memory allocation failed for ccdc_cfg\n"); >>>>- goto probe_disable_clock; >>>>+ goto probe_free_dev_mem; >>>> } >>>> >>>> strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); >>>>@@ -1904,61 +1838,34 @@ static __init int vpfe_probe(struct >>platform_device >>>>*pdev) >>>> if (!res1) { >>>> v4l2_err(pdev->dev.driver, >>>> "Unable to get interrupt for VINT0\n"); >>>>- ret = -ENOENT; >>>>- goto probe_disable_clock; >>>>+ ret = -ENODEV; >>>>+ goto probe_free_ccdc_cfg_mem; >>>> } >>>> vpfe_dev->ccdc_irq0 = res1->start; >>>> >>>> /* Get VINT1 irq resource */ >>>>- res1 = platform_get_resource(pdev, >>>>- IORESOURCE_IRQ, 1); >>>>+ res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); >>>> if (!res1) { >>>> v4l2_err(pdev->dev.driver, >>>> "Unable to get interrupt for VINT1\n"); >>>>- ret = -ENOENT; >>>>- goto probe_disable_clock; >>>>+ ret = -ENODEV; >>>>+ goto probe_free_ccdc_cfg_mem; >>>> } >>>> vpfe_dev->ccdc_irq1 = res1->start; >>>> >>>>- /* Get address base of CCDC */ >>>>- res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>>- if (!res1) { >>>>- v4l2_err(pdev->dev.driver, >>>>- "Unable to get register address map\n"); >>>>- ret = -ENOENT; >>>>- goto probe_disable_clock; >>>>- } >>>>- >>>>- ccdc_cfg->ccdc_addr_size = res1->end - res1->start + 1; >>>>- if (!request_mem_region(res1->start, ccdc_cfg->ccdc_addr_size, >>>>- pdev->dev.driver->name)) { >>>>- v4l2_err(pdev->dev.driver, >>>>- "Failed request_mem_region for ccdc base\n"); >>>>- ret = -ENXIO; >>>>- goto probe_disable_clock; >>>>- } >>>>- ccdc_cfg->ccdc_addr = ioremap_nocache(res1->start, >>>>- ccdc_cfg->ccdc_addr_size); >>>>- if (!ccdc_cfg->ccdc_addr) { >>>>- v4l2_err(pdev->dev.driver, "Unable to ioremap ccdc addr\n"); >>>>- ret = -ENXIO; >>>>- goto probe_out_release_mem1; >>>>- } >>>>- >>>> ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, IRQF_DISABLED, >>>> "vpfe_capture0", vpfe_dev); >>>> >>>> if (0 != ret) { >>>> v4l2_err(pdev->dev.driver, "Unable to request interrupt\n"); >>>>- goto probe_out_unmap1; >>>>+ goto probe_free_ccdc_cfg_mem; >>>> } >>>> >>>> /* Allocate memory for video device */ >>>> vfd = video_device_alloc(); >>>> if (NULL == vfd) { >>>> ret = -ENOMEM; >>>>- v4l2_err(pdev->dev.driver, >>>>- "Unable to alloc video device\n"); >>>>+ v4l2_err(pdev->dev.driver, "Unable to alloc video device\n"); >>>> goto probe_out_release_irq; >>>> } >>>> >>>>@@ -2073,12 +1980,7 @@ probe_out_video_release: >>>> video_device_release(vpfe_dev->video_dev); >>>> probe_out_release_irq: >>>> free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); >>>>-probe_out_unmap1: >>>>- iounmap(ccdc_cfg->ccdc_addr); >>>>-probe_out_release_mem1: >>>>- release_mem_region(res1->start, res1->end - res1->start + 1); >>>>-probe_disable_clock: >>>>- vpfe_disable_clock(vpfe_dev); >>>>+probe_free_ccdc_cfg_mem: >>>> mutex_unlock(&ccdc_lock); >>>> kfree(ccdc_cfg); >>>> probe_free_dev_mem: >>>>@@ -2092,7 +1994,6 @@ probe_free_dev_mem: >>>> static int __devexit vpfe_remove(struct platform_device *pdev) >>>> { >>>> struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); >>>>- struct resource *res; >>>> >>>> v4l2_info(pdev->dev.driver, "vpfe_remove\n"); >>>> >>>>@@ -2100,12 +2001,6 @@ static int __devexit vpfe_remove(struct >>>>platform_device *pdev) >>>> kfree(vpfe_dev->sd); >>>> v4l2_device_unregister(&vpfe_dev->v4l2_dev); >>>> video_unregister_device(vpfe_dev->video_dev); >>>>- mutex_lock(&ccdc_lock); >>>>- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>>- release_mem_region(res->start, res->end - res->start + 1); >>>>- iounmap(ccdc_cfg->ccdc_addr); >>>>- mutex_unlock(&ccdc_lock); >>>>- vpfe_disable_clock(vpfe_dev); >>>> kfree(vpfe_dev); >>>> kfree(ccdc_cfg); >>>> return 0; >>>>-- >>>>1.6.0.4 >_______________________________________________ >Davinci-linux-open-source mailing list >Davinci-linux-open-source@linux.davincidsp.com >http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c index de22bc9..885cd54 100644 --- a/drivers/media/video/davinci/vpfe_capture.c +++ b/drivers/media/video/davinci/vpfe_capture.c @@ -107,9 +107,6 @@ struct ccdc_config { int vpfe_probed; /* name of ccdc device */ char name[32]; - /* for storing mem maps for CCDC */ - int ccdc_addr_size; - void *__iomem ccdc_addr; }; /* data structures */ @@ -229,7 +226,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device *dev) BUG_ON(!dev->hw_ops.set_image_window); BUG_ON(!dev->hw_ops.get_image_window); BUG_ON(!dev->hw_ops.get_line_length); - BUG_ON(!dev->hw_ops.setfbaddr); BUG_ON(!dev->hw_ops.getfid); mutex_lock(&ccdc_lock); @@ -240,25 +236,23 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device *dev) * walk through it during vpfe probe */ printk(KERN_ERR "vpfe capture not initialized\n"); - ret = -1; + ret = -EFAULT; goto unlock; } if (strcmp(dev->name, ccdc_cfg->name)) { /* ignore this ccdc */ - ret = -1; + ret = -EINVAL; goto unlock; } if (ccdc_dev) { printk(KERN_ERR "ccdc already registered\n"); - ret = -1; + ret = -EINVAL; goto unlock; } ccdc_dev = dev; - dev->hw_ops.set_ccdc_base(ccdc_cfg->ccdc_addr, - ccdc_cfg->ccdc_addr_size); unlock: mutex_unlock(&ccdc_lock); return ret; @@ -1786,61 +1780,6 @@ static struct vpfe_device *vpfe_initialize(void) return vpfe_dev; } -static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) -{ - struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; - - clk_disable(vpfe_cfg->vpssclk); - clk_put(vpfe_cfg->vpssclk); - clk_disable(vpfe_cfg->slaveclk); - clk_put(vpfe_cfg->slaveclk); - v4l2_info(vpfe_dev->pdev->driver, - "vpfe vpss master & slave clocks disabled\n"); -} - -static int vpfe_enable_clock(struct vpfe_device *vpfe_dev) -{ - struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; - int ret = -ENOENT; - - vpfe_cfg->vpssclk = clk_get(vpfe_dev->pdev, "vpss_master"); - if (NULL == vpfe_cfg->vpssclk) { - v4l2_err(vpfe_dev->pdev->driver, "No clock defined for" - "vpss_master\n"); - return ret; - } - - if (clk_enable(vpfe_cfg->vpssclk)) { - v4l2_err(vpfe_dev->pdev->driver, - "vpfe vpss master clock not enabled\n"); - goto out; - } - v4l2_info(vpfe_dev->pdev->driver, - "vpfe vpss master clock enabled\n"); - - vpfe_cfg->slaveclk = clk_get(vpfe_dev->pdev, "vpss_slave"); - if (NULL == vpfe_cfg->slaveclk) { - v4l2_err(vpfe_dev->pdev->driver, - "No clock defined for vpss slave\n"); - goto out; - } - - if (clk_enable(vpfe_cfg->slaveclk)) { - v4l2_err(vpfe_dev->pdev->driver, - "vpfe vpss slave clock not enabled\n"); - goto out; - } - v4l2_info(vpfe_dev->pdev->driver, "vpfe vpss slave clock enabled\n"); - return 0; -out: - if (vpfe_cfg->vpssclk) - clk_put(vpfe_cfg->vpssclk); - if (vpfe_cfg->slaveclk) - clk_put(vpfe_cfg->slaveclk); - - return -1; -} - /* * vpfe_probe : This function creates device entries by register * itself to the V4L2 driver and initializes fields of each @@ -1870,7 +1809,7 @@ static __init int vpfe_probe(struct platform_device *pdev) if (NULL == pdev->dev.platform_data) { v4l2_err(pdev->dev.driver, "Unable to get vpfe config\n"); - ret = -ENOENT; + ret = -ENODEV; goto probe_free_dev_mem; } @@ -1884,18 +1823,13 @@ static __init int vpfe_probe(struct platform_device *pdev) goto probe_free_dev_mem; } - /* enable vpss clocks */ - ret = vpfe_enable_clock(vpfe_dev); - if (ret) - goto probe_free_dev_mem; - mutex_lock(&ccdc_lock); /* Allocate memory for ccdc configuration */ ccdc_cfg = kmalloc(sizeof(struct ccdc_config), GFP_KERNEL); if (NULL == ccdc_cfg) { v4l2_err(pdev->dev.driver, "Memory allocation failed for ccdc_cfg\n"); - goto probe_disable_clock; + goto probe_free_dev_mem; } strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); @@ -1904,61 +1838,34 @@ static __init int vpfe_probe(struct platform_device *pdev) if (!res1) { v4l2_err(pdev->dev.driver, "Unable to get interrupt for VINT0\n"); - ret = -ENOENT; - goto probe_disable_clock; + ret = -ENODEV; + goto probe_free_ccdc_cfg_mem; } vpfe_dev->ccdc_irq0 = res1->start; /* Get VINT1 irq resource */ - res1 = platform_get_resource(pdev, - IORESOURCE_IRQ, 1); + res1 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); if (!res1) { v4l2_err(pdev->dev.driver, "Unable to get interrupt for VINT1\n"); - ret = -ENOENT; - goto probe_disable_clock; + ret = -ENODEV; + goto probe_free_ccdc_cfg_mem; } vpfe_dev->ccdc_irq1 = res1->start; - /* Get address base of CCDC */ - res1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res1) { - v4l2_err(pdev->dev.driver, - "Unable to get register address map\n"); - ret = -ENOENT; - goto probe_disable_clock; - } - - ccdc_cfg->ccdc_addr_size = res1->end - res1->start + 1; - if (!request_mem_region(res1->start, ccdc_cfg->ccdc_addr_size, - pdev->dev.driver->name)) { - v4l2_err(pdev->dev.driver, - "Failed request_mem_region for ccdc base\n"); - ret = -ENXIO; - goto probe_disable_clock; - } - ccdc_cfg->ccdc_addr = ioremap_nocache(res1->start, - ccdc_cfg->ccdc_addr_size); - if (!ccdc_cfg->ccdc_addr) { - v4l2_err(pdev->dev.driver, "Unable to ioremap ccdc addr\n"); - ret = -ENXIO; - goto probe_out_release_mem1; - } - ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, IRQF_DISABLED, "vpfe_capture0", vpfe_dev); if (0 != ret) { v4l2_err(pdev->dev.driver, "Unable to request interrupt\n"); - goto probe_out_unmap1; + goto probe_free_ccdc_cfg_mem; } /* Allocate memory for video device */ vfd = video_device_alloc(); if (NULL == vfd) { ret = -ENOMEM; - v4l2_err(pdev->dev.driver, - "Unable to alloc video device\n"); + v4l2_err(pdev->dev.driver, "Unable to alloc video device\n"); goto probe_out_release_irq; } @@ -2073,12 +1980,7 @@ probe_out_video_release: video_device_release(vpfe_dev->video_dev); probe_out_release_irq: free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); -probe_out_unmap1: - iounmap(ccdc_cfg->ccdc_addr); -probe_out_release_mem1: - release_mem_region(res1->start, res1->end - res1->start + 1); -probe_disable_clock: - vpfe_disable_clock(vpfe_dev); +probe_free_ccdc_cfg_mem: mutex_unlock(&ccdc_lock); kfree(ccdc_cfg); probe_free_dev_mem: @@ -2092,7 +1994,6 @@ probe_free_dev_mem: static int __devexit vpfe_remove(struct platform_device *pdev) { struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); - struct resource *res; v4l2_info(pdev->dev.driver, "vpfe_remove\n"); @@ -2100,12 +2001,6 @@ static int __devexit vpfe_remove(struct platform_device *pdev) kfree(vpfe_dev->sd); v4l2_device_unregister(&vpfe_dev->v4l2_dev); video_unregister_device(vpfe_dev->video_dev); - mutex_lock(&ccdc_lock); - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - release_mem_region(res->start, res->end - res->start + 1); - iounmap(ccdc_cfg->ccdc_addr); - mutex_unlock(&ccdc_lock); - vpfe_disable_clock(vpfe_dev); kfree(vpfe_dev); kfree(ccdc_cfg); return 0;