>-----Original Message----- >From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx] >Sent: Thursday, January 14, 2010 3:48 PM >To: Karicheri, Muralidharan >Cc: linux-media@xxxxxxxxxxxxxxx; hverkuil@xxxxxxxxx; mchehab@xxxxxxxxxxxxx; >davinci-linux-open-source@xxxxxxxxxxxxxxxxxxxx >Subject: Re: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code > >"Karicheri, Muralidharan" <m-karicheri2@xxxxxx> 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@xxxxxx >> >>>-----Original Message----- >>>From: Karicheri, Muralidharan >>>Sent: Wednesday, January 13, 2010 6:27 PM >>>To: linux-media@xxxxxxxxxxxxxxx; hverkuil@xxxxxxxxx; >>>khilman@xxxxxxxxxxxxxxxxxxx; mchehab@xxxxxxxxxxxxx >>>Cc: davinci-linux-open-source@xxxxxxxxxxxxxxxxxxxx; Karicheri, >Muralidharan >>>Subject: [PATCH - v4 1/4] V4L - vpfe_capture-remove clock and platform >code >>> >>>From: Muralidharan Karicheri <m-karicheri2@xxxxxx> >>> >>>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@xxxxxx> >>>Reviewed-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> >>>Reviewed-by: Hans Verkuil <hverkuil@xxxxxxxxx> >>> >>>Signed-off-by: Hans Verkuil <hverkuil@xxxxxxxxx> >>>Signed-off-by: Muralidharan Karicheri <m-karicheri2@xxxxxx> >>>--- >>>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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html