[media] media: davinci: vpss: convert to devm* api
Replace existing resource handling in the driver with managed device resource, this ensures more consistent error values and simplifies error paths. Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
6b55b4516c
commit
6ef8335928
1 changed files with 12 additions and 48 deletions
|
@ -21,6 +21,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <media/davinci/vpss.h>
|
||||
|
||||
|
@ -404,9 +405,8 @@ EXPORT_SYMBOL(dm365_vpss_set_pg_frame_size);
|
|||
|
||||
static int vpss_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *r1, *r2;
|
||||
struct resource *res;
|
||||
char *platform_name;
|
||||
int status;
|
||||
|
||||
if (!pdev->dev.platform_data) {
|
||||
dev_err(&pdev->dev, "no platform data\n");
|
||||
|
@ -427,38 +427,19 @@ static int vpss_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
dev_info(&pdev->dev, "%s vpss probed\n", platform_name);
|
||||
r1 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!r1)
|
||||
return -ENOENT;
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
r1 = request_mem_region(r1->start, resource_size(r1), r1->name);
|
||||
if (!r1)
|
||||
return -EBUSY;
|
||||
|
||||
oper_cfg.vpss_regs_base0 = ioremap(r1->start, resource_size(r1));
|
||||
if (!oper_cfg.vpss_regs_base0) {
|
||||
status = -EBUSY;
|
||||
goto fail1;
|
||||
}
|
||||
oper_cfg.vpss_regs_base0 = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(oper_cfg.vpss_regs_base0))
|
||||
return PTR_ERR(oper_cfg.vpss_regs_base0);
|
||||
|
||||
if (oper_cfg.platform == DM355 || oper_cfg.platform == DM365) {
|
||||
r2 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!r2) {
|
||||
status = -ENOENT;
|
||||
goto fail2;
|
||||
}
|
||||
r2 = request_mem_region(r2->start, resource_size(r2), r2->name);
|
||||
if (!r2) {
|
||||
status = -EBUSY;
|
||||
goto fail2;
|
||||
}
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
|
||||
oper_cfg.vpss_regs_base1 = ioremap(r2->start,
|
||||
resource_size(r2));
|
||||
if (!oper_cfg.vpss_regs_base1) {
|
||||
status = -EBUSY;
|
||||
goto fail3;
|
||||
}
|
||||
oper_cfg.vpss_regs_base1 = devm_ioremap_resource(&pdev->dev,
|
||||
res);
|
||||
if (IS_ERR(oper_cfg.vpss_regs_base1))
|
||||
return PTR_ERR(oper_cfg.vpss_regs_base1);
|
||||
}
|
||||
|
||||
if (oper_cfg.platform == DM355) {
|
||||
|
@ -493,30 +474,13 @@ static int vpss_probe(struct platform_device *pdev)
|
|||
|
||||
spin_lock_init(&oper_cfg.vpss_lock);
|
||||
dev_info(&pdev->dev, "%s vpss probe success\n", platform_name);
|
||||
return 0;
|
||||
|
||||
fail3:
|
||||
release_mem_region(r2->start, resource_size(r2));
|
||||
fail2:
|
||||
iounmap(oper_cfg.vpss_regs_base0);
|
||||
fail1:
|
||||
release_mem_region(r1->start, resource_size(r1));
|
||||
return status;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vpss_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
iounmap(oper_cfg.vpss_regs_base0);
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
if (oper_cfg.platform == DM355 || oper_cfg.platform == DM365) {
|
||||
iounmap(oper_cfg.vpss_regs_base1);
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue