diff options
-rw-r--r-- | drivers/media/platform/davinci/vpss.c | 62 |
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 | ||
405 | static int vpss_probe(struct platform_device *pdev) | 406 | static 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 | ||
498 | fail3: | 478 | return 0; |
499 | release_mem_region(r2->start, resource_size(r2)); | ||
500 | fail2: | ||
501 | iounmap(oper_cfg.vpss_regs_base0); | ||
502 | fail1: | ||
503 | release_mem_region(r1->start, resource_size(r1)); | ||
504 | return status; | ||
505 | } | 479 | } |
506 | 480 | ||
507 | static int vpss_remove(struct platform_device *pdev) | 481 | static 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 | ||