aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLad, Prabhakar <prabhakar.csengg@gmail.com>2013-07-13 03:50:30 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-07-26 12:19:22 -0400
commit6ef8335928400ab58d547a3a59974d12f1c55d94 (patch)
treeccd92d736927ed2bbed17b969cc4601531cb090b
parent6b55b4516cf6f4711024a158dabbb50b282c5d3f (diff)
[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>
-rw-r--r--drivers/media/platform/davinci/vpss.c62
1 files changed, 13 insertions, 49 deletions
diff --git a/drivers/media/platform/davinci/vpss.c b/drivers/media/platform/davinci/vpss.c
index 8a2f01e344ee..31120b4a4a33 100644
--- a/drivers/media/platform/davinci/vpss.c
+++ b/drivers/media/platform/davinci/vpss.c
@@ -21,6 +21,7 @@
21#include <linux/platform_device.h> 21#include <linux/platform_device.h>
22#include <linux/io.h> 22#include <linux/io.h>
23#include <linux/pm_runtime.h> 23#include <linux/pm_runtime.h>
24#include <linux/err.h>
24 25
25#include <media/davinci/vpss.h> 26#include <media/davinci/vpss.h>
26 27
@@ -404,9 +405,8 @@ EXPORT_SYMBOL(dm365_vpss_set_pg_frame_size);
404 405
405static int vpss_probe(struct platform_device *pdev) 406static int vpss_probe(struct platform_device *pdev)
406{ 407{
407 struct resource *r1, *r2; 408 struct resource *res;
408 char *platform_name; 409 char *platform_name;
409 int status;
410 410
411 if (!pdev->dev.platform_data) { 411 if (!pdev->dev.platform_data) {
412 dev_err(&pdev->dev, "no platform data\n"); 412 dev_err(&pdev->dev, "no platform data\n");
@@ -427,38 +427,19 @@ static int vpss_probe(struct platform_device *pdev)
427 } 427 }
428 428
429 dev_info(&pdev->dev, "%s vpss probed\n", platform_name); 429 dev_info(&pdev->dev, "%s vpss probed\n", platform_name);
430 r1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); 430 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
431 if (!r1)
432 return -ENOENT;
433 431
434 r1 = request_mem_region(r1->start, resource_size(r1), r1->name); 432 oper_cfg.vpss_regs_base0 = devm_ioremap_resource(&pdev->dev, res);
435 if (!r1) 433 if (IS_ERR(oper_cfg.vpss_regs_base0))
436 return -EBUSY; 434 return PTR_ERR(oper_cfg.vpss_regs_base0);
437
438 oper_cfg.vpss_regs_base0 = ioremap(r1->start, resource_size(r1));
439 if (!oper_cfg.vpss_regs_base0) {
440 status = -EBUSY;
441 goto fail1;
442 }
443 435
444 if (oper_cfg.platform == DM355 || oper_cfg.platform == DM365) { 436 if (oper_cfg.platform == DM355 || oper_cfg.platform == DM365) {
445 r2 = platform_get_resource(pdev, IORESOURCE_MEM, 1); 437 res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
446 if (!r2) { 438
447 status = -ENOENT; 439 oper_cfg.vpss_regs_base1 = devm_ioremap_resource(&pdev->dev,
448 goto fail2; 440 res);
449 } 441 if (IS_ERR(oper_cfg.vpss_regs_base1))
450 r2 = request_mem_region(r2->start, resource_size(r2), r2->name); 442 return PTR_ERR(oper_cfg.vpss_regs_base1);
451 if (!r2) {
452 status = -EBUSY;
453 goto fail2;
454 }
455
456 oper_cfg.vpss_regs_base1 = ioremap(r2->start,
457 resource_size(r2));
458 if (!oper_cfg.vpss_regs_base1) {
459 status = -EBUSY;
460 goto fail3;
461 }
462 } 443 }
463 444
464 if (oper_cfg.platform == DM355) { 445 if (oper_cfg.platform == DM355) {
@@ -493,30 +474,13 @@ static int vpss_probe(struct platform_device *pdev)
493 474
494 spin_lock_init(&oper_cfg.vpss_lock); 475 spin_lock_init(&oper_cfg.vpss_lock);
495 dev_info(&pdev->dev, "%s vpss probe success\n", platform_name); 476 dev_info(&pdev->dev, "%s vpss probe success\n", platform_name);
496 return 0;
497 477
498fail3: 478 return 0;
499 release_mem_region(r2->start, resource_size(r2));
500fail2:
501 iounmap(oper_cfg.vpss_regs_base0);
502fail1:
503 release_mem_region(r1->start, resource_size(r1));
504 return status;
505} 479}
506 480
507static int vpss_remove(struct platform_device *pdev) 481static int vpss_remove(struct platform_device *pdev)
508{ 482{
509 struct resource *res;
510
511 pm_runtime_disable(&pdev->dev); 483 pm_runtime_disable(&pdev->dev);
512 iounmap(oper_cfg.vpss_regs_base0);
513 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
514 release_mem_region(res->start, resource_size(res));
515 if (oper_cfg.platform == DM355 || oper_cfg.platform == DM365) {
516 iounmap(oper_cfg.vpss_regs_base1);
517 res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
518 release_mem_region(res->start, resource_size(res));
519 }
520 return 0; 484 return 0;
521} 485}
522 486