From: Lad, Prabhakar <[email protected]>
This patch series cleans the VPIF driver, uses devm_* api wherever
required and uses module_platform_driver() to simplify the code.
This patch series applies on http://git.linuxtv.org/hverkuil/media_tree.git/
shortlog/refs/heads/for-v3.11 and is tested on OMAP-L138.
Changes for v2:
1: Rebased on v3.11 branch of Hans.
2: Dropped the patches which removed headers as mentioned by Laurent.
Lad, Prabhakar (5):
media: davinci: vpif: remove unwanted header mach/hardware.h and sort
the includes alphabetically
media: davinci: vpif: Convert to devm_* api
media: davinci: vpif: remove unnecessary braces around defines
media: davinci: vpif_capture: Convert to devm_* api
media: davinci: vpif_display: Convert to devm_* api
drivers/media/platform/davinci/vpif.c | 45 ++++-----------
drivers/media/platform/davinci/vpif_capture.c | 73 +++++--------------------
drivers/media/platform/davinci/vpif_display.c | 61 ++++-----------------
3 files changed, 37 insertions(+), 142 deletions(-)
From: Lad, Prabhakar <[email protected]>
This patch removes unwanted header include of mach/hardware.h
and along side sorts the header inclusion alphabetically.
Signed-off-by: Lad, Prabhakar <[email protected]>
---
drivers/media/platform/davinci/vpif.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/media/platform/davinci/vpif.c b/drivers/media/platform/davinci/vpif.c
index ea82a8b..761c825 100644
--- a/drivers/media/platform/davinci/vpif.c
+++ b/drivers/media/platform/davinci/vpif.c
@@ -17,18 +17,16 @@
* GNU General Public License for more details.
*/
+#include <linux/err.h>
#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
-#include <linux/spinlock.h>
-#include <linux/kernel.h>
-#include <linux/io.h>
-#include <linux/err.h>
#include <linux/pm_runtime.h>
+#include <linux/spinlock.h>
#include <linux/v4l2-dv-timings.h>
-#include <mach/hardware.h>
-
#include "vpif.h"
MODULE_DESCRIPTION("TI DaVinci Video Port Interface driver");
--
1.7.0.4
From: Lad, Prabhakar <[email protected]>
Use devm_ioremap_resource instead of reques_mem_region()/ioremap().
This ensures more consistent error values and simplifies error paths.
Signed-off-by: Lad, Prabhakar <[email protected]>
---
drivers/media/platform/davinci/vpif.c | 27 ++++-----------------------
1 files changed, 4 insertions(+), 23 deletions(-)
diff --git a/drivers/media/platform/davinci/vpif.c b/drivers/media/platform/davinci/vpif.c
index 761c825..164c1b7 100644
--- a/drivers/media/platform/davinci/vpif.c
+++ b/drivers/media/platform/davinci/vpif.c
@@ -37,8 +37,6 @@ MODULE_LICENSE("GPL");
#define VPIF_CH2_MAX_MODES (15)
#define VPIF_CH3_MAX_MODES (02)
-static resource_size_t res_len;
-static struct resource *res;
spinlock_t vpif_lock;
void __iomem *vpif_base;
@@ -421,23 +419,12 @@ EXPORT_SYMBOL(vpif_channel_getfid);
static int vpif_probe(struct platform_device *pdev)
{
- int status = 0;
+ static struct resource *res;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!res)
- return -ENOENT;
-
- res_len = resource_size(res);
-
- res = request_mem_region(res->start, res_len, res->name);
- if (!res)
- return -EBUSY;
-
- vpif_base = ioremap(res->start, res_len);
- if (!vpif_base) {
- status = -EBUSY;
- goto fail;
- }
+ vpif_base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(vpif_base))
+ return PTR_ERR(vpif_base);
pm_runtime_enable(&pdev->dev);
pm_runtime_get(&pdev->dev);
@@ -445,17 +432,11 @@ static int vpif_probe(struct platform_device *pdev)
spin_lock_init(&vpif_lock);
dev_info(&pdev->dev, "vpif probe success\n");
return 0;
-
-fail:
- release_mem_region(res->start, res_len);
- return status;
}
static int vpif_remove(struct platform_device *pdev)
{
pm_runtime_disable(&pdev->dev);
- iounmap(vpif_base);
- release_mem_region(res->start, res_len);
return 0;
}
--
1.7.0.4
From: Lad, Prabhakar <[email protected]>
Signed-off-by: Lad, Prabhakar <[email protected]>
---
drivers/media/platform/davinci/vpif.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/media/platform/davinci/vpif.c b/drivers/media/platform/davinci/vpif.c
index 164c1b7..d9269c9 100644
--- a/drivers/media/platform/davinci/vpif.c
+++ b/drivers/media/platform/davinci/vpif.c
@@ -32,10 +32,10 @@
MODULE_DESCRIPTION("TI DaVinci Video Port Interface driver");
MODULE_LICENSE("GPL");
-#define VPIF_CH0_MAX_MODES (22)
-#define VPIF_CH1_MAX_MODES (02)
-#define VPIF_CH2_MAX_MODES (15)
-#define VPIF_CH3_MAX_MODES (02)
+#define VPIF_CH0_MAX_MODES 22
+#define VPIF_CH1_MAX_MODES 02
+#define VPIF_CH2_MAX_MODES 15
+#define VPIF_CH3_MAX_MODES 02
spinlock_t vpif_lock;
--
1.7.0.4
From: Lad, Prabhakar <[email protected]>
use devm_request_irq() instead of request_irq().
This ensures more consistent error values and simplifies error paths.
use module_platform_driver to simplify the code.
Signed-off-by: Lad, Prabhakar <[email protected]>
---
drivers/media/platform/davinci/vpif_capture.c | 73 +++++--------------------
1 files changed, 13 insertions(+), 60 deletions(-)
diff --git a/drivers/media/platform/davinci/vpif_capture.c b/drivers/media/platform/davinci/vpif_capture.c
index caaf4fe..f37adf1 100644
--- a/drivers/media/platform/davinci/vpif_capture.c
+++ b/drivers/media/platform/davinci/vpif_capture.c
@@ -2082,14 +2082,13 @@ static __init int vpif_probe(struct platform_device *pdev)
while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, res_idx))) {
for (i = res->start; i <= res->end; i++) {
- if (request_irq(i, vpif_channel_isr, IRQF_SHARED,
- "VPIF_Capture", (void *)
- (&vpif_obj.dev[res_idx]->channel_id))) {
- err = -EBUSY;
- for (j = 0; j < i; j++)
- free_irq(j, (void *)
- (&vpif_obj.dev[res_idx]->channel_id));
- goto vpif_int_err;
+ err = devm_request_irq(&pdev->dev, i, vpif_channel_isr,
+ IRQF_SHARED, "VPIF_Capture",
+ (void *)(&vpif_obj.dev[res_idx]->
+ channel_id));
+ if (err) {
+ err = -EINVAL;
+ goto vpif_unregister;
}
}
res_idx++;
@@ -2106,7 +2105,7 @@ static __init int vpif_probe(struct platform_device *pdev)
video_device_release(ch->video_dev);
}
err = -ENOMEM;
- goto vpif_int_err;
+ goto vpif_unregister;
}
/* Initialize field of video device */
@@ -2207,13 +2206,8 @@ vpif_sd_error:
/* Note: does nothing if ch->video_dev == NULL */
video_device_release(ch->video_dev);
}
-vpif_int_err:
+vpif_unregister:
v4l2_device_unregister(&vpif_obj.v4l2_dev);
- for (i = 0; i < res_idx; i++) {
- res = platform_get_resource(pdev, IORESOURCE_IRQ, i);
- for (j = res->start; j <= res->end; j++)
- free_irq(j, (void *)(&vpif_obj.dev[i]->channel_id));
- }
return err;
}
@@ -2229,14 +2223,16 @@ static int vpif_remove(struct platform_device *device)
struct channel_obj *ch;
v4l2_device_unregister(&vpif_obj.v4l2_dev);
-
+ kfree(vpif_obj.sd);
/* un-register device */
for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
/* Get the pointer to the channel object */
ch = vpif_obj.dev[i];
/* Unregister video device */
video_unregister_device(ch->video_dev);
+ kfree(vpif_obj.dev[i]);
}
+
return 0;
}
@@ -2326,47 +2322,4 @@ static __refdata struct platform_driver vpif_driver = {
.remove = vpif_remove,
};
-/**
- * vpif_init: initialize the vpif driver
- *
- * This function registers device and driver to the kernel, requests irq
- * handler and allocates memory
- * for channel objects
- */
-static __init int vpif_init(void)
-{
- return platform_driver_register(&vpif_driver);
-}
-
-/**
- * vpif_cleanup : This function clean up the vpif capture resources
- *
- * This will un-registers device and driver to the kernel, frees
- * requested irq handler and de-allocates memory allocated for channel
- * objects.
- */
-static void vpif_cleanup(void)
-{
- struct platform_device *pdev;
- struct resource *res;
- int irq_num;
- int i = 0;
-
- pdev = container_of(vpif_dev, struct platform_device, dev);
- while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, i))) {
- for (irq_num = res->start; irq_num <= res->end; irq_num++)
- free_irq(irq_num,
- (void *)(&vpif_obj.dev[i]->channel_id));
- i++;
- }
-
- platform_driver_unregister(&vpif_driver);
-
- kfree(vpif_obj.sd);
- for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++)
- kfree(vpif_obj.dev[i]);
-}
-
-/* Function for module initialization and cleanup */
-module_init(vpif_init);
-module_exit(vpif_cleanup);
+module_platform_driver(vpif_driver);
--
1.7.0.4
From: Lad, Prabhakar <[email protected]>
use devm_request_irq() instead of request_irq().
This ensures more consistent error values and simplifies error paths.
use module_platform_driver to simplify the code.
Signed-off-by: Lad, Prabhakar <[email protected]>
---
drivers/media/platform/davinci/vpif_display.c | 61 +++++--------------------
1 files changed, 12 insertions(+), 49 deletions(-)
diff --git a/drivers/media/platform/davinci/vpif_display.c b/drivers/media/platform/davinci/vpif_display.c
index 5b6f906..1bb24cb 100644
--- a/drivers/media/platform/davinci/vpif_display.c
+++ b/drivers/media/platform/davinci/vpif_display.c
@@ -1718,15 +1718,14 @@ static __init int vpif_probe(struct platform_device *pdev)
while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, res_idx))) {
for (i = res->start; i <= res->end; i++) {
- if (request_irq(i, vpif_channel_isr, IRQF_SHARED,
- "VPIF_Display", (void *)
- (&vpif_obj.dev[res_idx]->channel_id))) {
- err = -EBUSY;
- for (j = 0; j < i; j++)
- free_irq(j, (void *)
- (&vpif_obj.dev[res_idx]->channel_id));
+ err = devm_request_irq(&pdev->dev, i, vpif_channel_isr,
+ IRQF_SHARED, "VPIF_Display",
+ (void *)(&vpif_obj.dev[res_idx]->
+ channel_id));
+ if (err) {
+ err = -EINVAL;
vpif_err("VPIF IRQ request failed\n");
- goto vpif_int_err;
+ goto vpif_unregister;
}
}
res_idx++;
@@ -1744,7 +1743,7 @@ static __init int vpif_probe(struct platform_device *pdev)
video_device_release(ch->video_dev);
}
err = -ENOMEM;
- goto vpif_int_err;
+ goto vpif_unregister;
}
/* Initialize field of video device */
@@ -1878,13 +1877,8 @@ vpif_sd_error:
/* Note: does nothing if ch->video_dev == NULL */
video_device_release(ch->video_dev);
}
-vpif_int_err:
+vpif_unregister:
v4l2_device_unregister(&vpif_obj.v4l2_dev);
- for (i = 0; i < res_idx; i++) {
- res = platform_get_resource(pdev, IORESOURCE_IRQ, i);
- for (j = res->start; j <= res->end; j++)
- free_irq(j, (void *)(&vpif_obj.dev[i]->channel_id));
- }
return err;
}
@@ -1899,6 +1893,7 @@ static int vpif_remove(struct platform_device *device)
v4l2_device_unregister(&vpif_obj.v4l2_dev);
+ kfree(vpif_obj.sd);
/* un-register device */
for (i = 0; i < VPIF_DISPLAY_MAX_DEVICES; i++) {
/* Get the pointer to the channel object */
@@ -1907,6 +1902,7 @@ static int vpif_remove(struct platform_device *device)
video_unregister_device(ch->video_dev);
ch->video_dev = NULL;
+ kfree(vpif_obj.dev[i]);
}
return 0;
@@ -1992,37 +1988,4 @@ static __refdata struct platform_driver vpif_driver = {
.remove = vpif_remove,
};
-static __init int vpif_init(void)
-{
- return platform_driver_register(&vpif_driver);
-}
-
-/*
- * vpif_cleanup: This function un-registers device and driver to the kernel,
- * frees requested irq handler and de-allocates memory allocated for channel
- * objects.
- */
-static void vpif_cleanup(void)
-{
- struct platform_device *pdev;
- struct resource *res;
- int irq_num;
- int i = 0;
-
- pdev = container_of(vpif_dev, struct platform_device, dev);
-
- while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, i))) {
- for (irq_num = res->start; irq_num <= res->end; irq_num++)
- free_irq(irq_num,
- (void *)(&vpif_obj.dev[i]->channel_id));
- i++;
- }
-
- platform_driver_unregister(&vpif_driver);
- kfree(vpif_obj.sd);
- for (i = 0; i < VPIF_DISPLAY_MAX_DEVICES; i++)
- kfree(vpif_obj.dev[i]);
-}
-
-module_init(vpif_init);
-module_exit(vpif_cleanup);
+module_platform_driver(vpif_driver);
--
1.7.0.4
Hi Prabhakar,
Thank you for the patch.
On Saturday 25 May 2013 22:06:33 Prabhakar Lad wrote:
> From: Lad, Prabhakar <[email protected]>
>
> Use devm_ioremap_resource instead of reques_mem_region()/ioremap().
> This ensures more consistent error values and simplifies error paths.
>
> Signed-off-by: Lad, Prabhakar <[email protected]>
> ---
> drivers/media/platform/davinci/vpif.c | 27 ++++-----------------------
> 1 files changed, 4 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/media/platform/davinci/vpif.c
> b/drivers/media/platform/davinci/vpif.c index 761c825..164c1b7 100644
> --- a/drivers/media/platform/davinci/vpif.c
> +++ b/drivers/media/platform/davinci/vpif.c
> @@ -37,8 +37,6 @@ MODULE_LICENSE("GPL");
> #define VPIF_CH2_MAX_MODES (15)
> #define VPIF_CH3_MAX_MODES (02)
>
> -static resource_size_t res_len;
> -static struct resource *res;
> spinlock_t vpif_lock;
>
> void __iomem *vpif_base;
> @@ -421,23 +419,12 @@ EXPORT_SYMBOL(vpif_channel_getfid);
>
> static int vpif_probe(struct platform_device *pdev)
> {
> - int status = 0;
> + static struct resource *res;
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> - if (!res)
> - return -ENOENT;
> -
> - res_len = resource_size(res);
> -
> - res = request_mem_region(res->start, res_len, res->name);
> - if (!res)
> - return -EBUSY;
> -
> - vpif_base = ioremap(res->start, res_len);
> - if (!vpif_base) {
> - status = -EBUSY;
> - goto fail;
> - }
> + vpif_base = devm_ioremap_resource(&pdev->dev, res);
> + if (IS_ERR(vpif_base))
> + return PTR_ERR(vpif_base);
You're loosing the request_mem_region(). You should use
devm_request_and_ioremap() function instead of devm_ioremap_resource(). With
that change,
Acked-by: Laurent Pinchart <[email protected]>
> pm_runtime_enable(&pdev->dev);
> pm_runtime_get(&pdev->dev);
> @@ -445,17 +432,11 @@ static int vpif_probe(struct platform_device *pdev)
> spin_lock_init(&vpif_lock);
> dev_info(&pdev->dev, "vpif probe success\n");
> return 0;
> -
> -fail:
> - release_mem_region(res->start, res_len);
> - return status;
> }
>
> static int vpif_remove(struct platform_device *pdev)
> {
> pm_runtime_disable(&pdev->dev);
> - iounmap(vpif_base);
> - release_mem_region(res->start, res_len);
> return 0;
> }
--
Regards,
Laurent Pinchart
Hi Prabhakar,
Thank you for the patch.
On Saturday 25 May 2013 22:06:32 Prabhakar Lad wrote:
> From: Lad, Prabhakar <[email protected]>
>
> This patch removes unwanted header include of mach/hardware.h
> and along side sorts the header inclusion alphabetically.
>
> Signed-off-by: Lad, Prabhakar <[email protected]>
Acked-by: Laurent Pinchart <[email protected]>
> ---
> drivers/media/platform/davinci/vpif.c | 10 ++++------
> 1 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/media/platform/davinci/vpif.c
> b/drivers/media/platform/davinci/vpif.c index ea82a8b..761c825 100644
> --- a/drivers/media/platform/davinci/vpif.c
> +++ b/drivers/media/platform/davinci/vpif.c
> @@ -17,18 +17,16 @@
> * GNU General Public License for more details.
> */
>
> +#include <linux/err.h>
> #include <linux/init.h>
> +#include <linux/io.h>
> +#include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> -#include <linux/spinlock.h>
> -#include <linux/kernel.h>
> -#include <linux/io.h>
> -#include <linux/err.h>
> #include <linux/pm_runtime.h>
> +#include <linux/spinlock.h>
> #include <linux/v4l2-dv-timings.h>
>
> -#include <mach/hardware.h>
> -
> #include "vpif.h"
>
> MODULE_DESCRIPTION("TI DaVinci Video Port Interface driver");
--
Regards,
Laurent Pinchart
Hi Prabhakar,
Thank you for the patch.
On Saturday 25 May 2013 22:06:34 Prabhakar Lad wrote:
> From: Lad, Prabhakar <[email protected]>
>
> Signed-off-by: Lad, Prabhakar <[email protected]>
> ---
> drivers/media/platform/davinci/vpif.c | 8 ++++----
> 1 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/platform/davinci/vpif.c
> b/drivers/media/platform/davinci/vpif.c index 164c1b7..d9269c9 100644
> --- a/drivers/media/platform/davinci/vpif.c
> +++ b/drivers/media/platform/davinci/vpif.c
> @@ -32,10 +32,10 @@
> MODULE_DESCRIPTION("TI DaVinci Video Port Interface driver");
> MODULE_LICENSE("GPL");
>
> -#define VPIF_CH0_MAX_MODES (22)
> -#define VPIF_CH1_MAX_MODES (02)
> -#define VPIF_CH2_MAX_MODES (15)
> -#define VPIF_CH3_MAX_MODES (02)
> +#define VPIF_CH0_MAX_MODES 22
> +#define VPIF_CH1_MAX_MODES 02
> +#define VPIF_CH2_MAX_MODES 15
> +#define VPIF_CH3_MAX_MODES 02
Could you also replace 02 with 2 while you're at it ? 02 is an octal constant.
While it still evaluates to 2 in this case, it would be a good practice to use
decimal when decimal is intended.
With that change,
Laurent Pinchart <[email protected]>
> spinlock_t vpif_lock;
--
Regards,
Laurent Pinchart
Hi Prabhakar,
Thank you for the patch.
On Saturday 25 May 2013 22:06:35 Prabhakar Lad wrote:
> From: Lad, Prabhakar <[email protected]>
>
> use devm_request_irq() instead of request_irq().
> This ensures more consistent error values and simplifies error paths.
>
> use module_platform_driver to simplify the code.
>
> Signed-off-by: Lad, Prabhakar <[email protected]>
There's two separate changes in this patch, could you split it in two if you
resubmit the series ? It would then be good to work on removing the vpif_obj
and vpif_dev global variables.
Same comment for patch 5/5.
> ---
> drivers/media/platform/davinci/vpif_capture.c | 73 ++++------------------
> 1 files changed, 13 insertions(+), 60 deletions(-)
>
> diff --git a/drivers/media/platform/davinci/vpif_capture.c
> b/drivers/media/platform/davinci/vpif_capture.c index caaf4fe..f37adf1
> 100644
> --- a/drivers/media/platform/davinci/vpif_capture.c
> +++ b/drivers/media/platform/davinci/vpif_capture.c
> @@ -2082,14 +2082,13 @@ static __init int vpif_probe(struct platform_device
> *pdev)
>
> while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, res_idx))) {
> for (i = res->start; i <= res->end; i++) {
> - if (request_irq(i, vpif_channel_isr, IRQF_SHARED,
> - "VPIF_Capture", (void *)
> - (&vpif_obj.dev[res_idx]->channel_id))) {
> - err = -EBUSY;
> - for (j = 0; j < i; j++)
> - free_irq(j, (void *)
> - (&vpif_obj.dev[res_idx]->channel_id));
> - goto vpif_int_err;
> + err = devm_request_irq(&pdev->dev, i, vpif_channel_isr,
> + IRQF_SHARED, "VPIF_Capture",
> + (void *)(&vpif_obj.dev[res_idx]->
> + channel_id));
> + if (err) {
> + err = -EINVAL;
> + goto vpif_unregister;
> }
> }
> res_idx++;
> @@ -2106,7 +2105,7 @@ static __init int vpif_probe(struct platform_device
> *pdev) video_device_release(ch->video_dev);
> }
> err = -ENOMEM;
> - goto vpif_int_err;
> + goto vpif_unregister;
> }
>
> /* Initialize field of video device */
> @@ -2207,13 +2206,8 @@ vpif_sd_error:
> /* Note: does nothing if ch->video_dev == NULL */
> video_device_release(ch->video_dev);
> }
> -vpif_int_err:
> +vpif_unregister:
> v4l2_device_unregister(&vpif_obj.v4l2_dev);
> - for (i = 0; i < res_idx; i++) {
> - res = platform_get_resource(pdev, IORESOURCE_IRQ, i);
> - for (j = res->start; j <= res->end; j++)
> - free_irq(j, (void *)(&vpif_obj.dev[i]->channel_id));
> - }
> return err;
> }
>
> @@ -2229,14 +2223,16 @@ static int vpif_remove(struct platform_device
> *device) struct channel_obj *ch;
>
> v4l2_device_unregister(&vpif_obj.v4l2_dev);
> -
> + kfree(vpif_obj.sd);
> /* un-register device */
> for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
> /* Get the pointer to the channel object */
> ch = vpif_obj.dev[i];
> /* Unregister video device */
> video_unregister_device(ch->video_dev);
> + kfree(vpif_obj.dev[i]);
> }
> +
> return 0;
> }
>
> @@ -2326,47 +2322,4 @@ static __refdata struct platform_driver vpif_driver =
> { .remove = vpif_remove,
> };
>
> -/**
> - * vpif_init: initialize the vpif driver
> - *
> - * This function registers device and driver to the kernel, requests irq
> - * handler and allocates memory
> - * for channel objects
> - */
> -static __init int vpif_init(void)
> -{
> - return platform_driver_register(&vpif_driver);
> -}
> -
> -/**
> - * vpif_cleanup : This function clean up the vpif capture resources
> - *
> - * This will un-registers device and driver to the kernel, frees
> - * requested irq handler and de-allocates memory allocated for channel
> - * objects.
> - */
> -static void vpif_cleanup(void)
> -{
> - struct platform_device *pdev;
> - struct resource *res;
> - int irq_num;
> - int i = 0;
> -
> - pdev = container_of(vpif_dev, struct platform_device, dev);
> - while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, i))) {
> - for (irq_num = res->start; irq_num <= res->end; irq_num++)
> - free_irq(irq_num,
> - (void *)(&vpif_obj.dev[i]->channel_id));
> - i++;
> - }
> -
> - platform_driver_unregister(&vpif_driver);
> -
> - kfree(vpif_obj.sd);
> - for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++)
> - kfree(vpif_obj.dev[i]);
> -}
> -
> -/* Function for module initialization and cleanup */
> -module_init(vpif_init);
> -module_exit(vpif_cleanup);
> +module_platform_driver(vpif_driver);
--
Regards,
Laurent Pinchart
Hello.
On 26-05-2013 4:49, Laurent Pinchart wrote:
>> From: Lad, Prabhakar <[email protected]>
>> Use devm_ioremap_resource instead of reques_mem_region()/ioremap().
>> This ensures more consistent error values and simplifies error paths.
>> Signed-off-by: Lad, Prabhakar <[email protected]>
>> ---
>> drivers/media/platform/davinci/vpif.c | 27 ++++-----------------------
>> 1 files changed, 4 insertions(+), 23 deletions(-)
>> diff --git a/drivers/media/platform/davinci/vpif.c
>> b/drivers/media/platform/davinci/vpif.c index 761c825..164c1b7 100644
>> --- a/drivers/media/platform/davinci/vpif.c
>> +++ b/drivers/media/platform/davinci/vpif.c
[...]
>> @@ -421,23 +419,12 @@ EXPORT_SYMBOL(vpif_channel_getfid);
>>
>> static int vpif_probe(struct platform_device *pdev)
>> {
>> - int status = 0;
>> + static struct resource *res;
>>
>> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> - if (!res)
>> - return -ENOENT;
>> -
>> - res_len = resource_size(res);
>> -
>> - res = request_mem_region(res->start, res_len, res->name);
>> - if (!res)
>> - return -EBUSY;
>> -
>> - vpif_base = ioremap(res->start, res_len);
>> - if (!vpif_base) {
>> - status = -EBUSY;
>> - goto fail;
>> - }
>> + vpif_base = devm_ioremap_resource(&pdev->dev, res);
>> + if (IS_ERR(vpif_base))
>> + return PTR_ERR(vpif_base);
> You're loosing the request_mem_region().
He's not losing anything, first look at how devm_ioremp_resource()
is defined.
> You should use devm_request_and_ioremap()
Already deprecated by now.
> function instead of devm_ioremap_resource(). With
> that change,
> Acked-by: Laurent Pinchart <[email protected]>
WBR, Sergei
Hi Sergei,
On Sunday 26 May 2013 18:15:19 Sergei Shtylyov wrote:
> On 26-05-2013 4:49, Laurent Pinchart wrote:
> >> From: Lad, Prabhakar <[email protected]>
> >>
> >> Use devm_ioremap_resource instead of reques_mem_region()/ioremap().
> >> This ensures more consistent error values and simplifies error paths.
> >>
> >> Signed-off-by: Lad, Prabhakar <[email protected]>
> >> ---
> >>
> >> drivers/media/platform/davinci/vpif.c | 27
> >> ++++-----------------------
> >> 1 files changed, 4 insertions(+), 23 deletions(-)
> >>
> >> diff --git a/drivers/media/platform/davinci/vpif.c
> >> b/drivers/media/platform/davinci/vpif.c index 761c825..164c1b7 100644
> >> --- a/drivers/media/platform/davinci/vpif.c
> >> +++ b/drivers/media/platform/davinci/vpif.c
>
> [...]
>
> >> @@ -421,23 +419,12 @@ EXPORT_SYMBOL(vpif_channel_getfid);
> >>
> >> static int vpif_probe(struct platform_device *pdev)
> >> {
> >>
> >> - int status = 0;
> >> + static struct resource *res;
> >>
> >> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >>
> >> - if (!res)
> >> - return -ENOENT;
> >> -
> >> - res_len = resource_size(res);
> >> -
> >> - res = request_mem_region(res->start, res_len, res->name);
> >> - if (!res)
> >> - return -EBUSY;
> >> -
> >> - vpif_base = ioremap(res->start, res_len);
> >> - if (!vpif_base) {
> >> - status = -EBUSY;
> >> - goto fail;
> >> - }
> >> + vpif_base = devm_ioremap_resource(&pdev->dev, res);
> >> + if (IS_ERR(vpif_base))
> >> + return PTR_ERR(vpif_base);
> >
> > You're loosing the request_mem_region().
>
> He's not losing anything, first look at how devm_ioremp_resource() is
> defined.
My bad. I'm not sure where I got that idea from. Thanks for pointing out the
mistake.
> > You should use devm_request_and_ioremap()
>
> Already deprecated by now.
>
> > function instead of devm_ioremap_resource(). With that change,
> >
> > Acked-by: Laurent Pinchart <[email protected]>
--
Regards,
Laurent Pinchart