diff options
Diffstat (limited to 'drivers/dma/sirf-dma.c')
-rw-r--r-- | drivers/dma/sirf-dma.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c index 3eed8b35b0f1..64385cde044b 100644 --- a/drivers/dma/sirf-dma.c +++ b/drivers/dma/sirf-dma.c | |||
@@ -570,21 +570,19 @@ static int __devinit sirfsoc_dma_probe(struct platform_device *op) | |||
570 | 570 | ||
571 | if (of_property_read_u32(dn, "cell-index", &id)) { | 571 | if (of_property_read_u32(dn, "cell-index", &id)) { |
572 | dev_err(dev, "Fail to get DMAC index\n"); | 572 | dev_err(dev, "Fail to get DMAC index\n"); |
573 | ret = -ENODEV; | 573 | return -ENODEV; |
574 | goto free_mem; | ||
575 | } | 574 | } |
576 | 575 | ||
577 | sdma->irq = irq_of_parse_and_map(dn, 0); | 576 | sdma->irq = irq_of_parse_and_map(dn, 0); |
578 | if (sdma->irq == NO_IRQ) { | 577 | if (sdma->irq == NO_IRQ) { |
579 | dev_err(dev, "Error mapping IRQ!\n"); | 578 | dev_err(dev, "Error mapping IRQ!\n"); |
580 | ret = -EINVAL; | 579 | return -EINVAL; |
581 | goto free_mem; | ||
582 | } | 580 | } |
583 | 581 | ||
584 | ret = of_address_to_resource(dn, 0, &res); | 582 | ret = of_address_to_resource(dn, 0, &res); |
585 | if (ret) { | 583 | if (ret) { |
586 | dev_err(dev, "Error parsing memory region!\n"); | 584 | dev_err(dev, "Error parsing memory region!\n"); |
587 | goto free_mem; | 585 | goto irq_dispose; |
588 | } | 586 | } |
589 | 587 | ||
590 | regs_start = res.start; | 588 | regs_start = res.start; |
@@ -597,12 +595,11 @@ static int __devinit sirfsoc_dma_probe(struct platform_device *op) | |||
597 | goto irq_dispose; | 595 | goto irq_dispose; |
598 | } | 596 | } |
599 | 597 | ||
600 | ret = devm_request_irq(dev, sdma->irq, &sirfsoc_dma_irq, 0, DRV_NAME, | 598 | ret = request_irq(sdma->irq, &sirfsoc_dma_irq, 0, DRV_NAME, sdma); |
601 | sdma); | ||
602 | if (ret) { | 599 | if (ret) { |
603 | dev_err(dev, "Error requesting IRQ!\n"); | 600 | dev_err(dev, "Error requesting IRQ!\n"); |
604 | ret = -EINVAL; | 601 | ret = -EINVAL; |
605 | goto unmap_mem; | 602 | goto irq_dispose; |
606 | } | 603 | } |
607 | 604 | ||
608 | dma = &sdma->dma; | 605 | dma = &sdma->dma; |
@@ -652,13 +649,9 @@ static int __devinit sirfsoc_dma_probe(struct platform_device *op) | |||
652 | return 0; | 649 | return 0; |
653 | 650 | ||
654 | free_irq: | 651 | free_irq: |
655 | devm_free_irq(dev, sdma->irq, sdma); | 652 | free_irq(sdma->irq, sdma); |
656 | irq_dispose: | 653 | irq_dispose: |
657 | irq_dispose_mapping(sdma->irq); | 654 | irq_dispose_mapping(sdma->irq); |
658 | unmap_mem: | ||
659 | iounmap(sdma->base); | ||
660 | free_mem: | ||
661 | devm_kfree(dev, sdma); | ||
662 | return ret; | 655 | return ret; |
663 | } | 656 | } |
664 | 657 | ||
@@ -668,10 +661,8 @@ static int __devexit sirfsoc_dma_remove(struct platform_device *op) | |||
668 | struct sirfsoc_dma *sdma = dev_get_drvdata(dev); | 661 | struct sirfsoc_dma *sdma = dev_get_drvdata(dev); |
669 | 662 | ||
670 | dma_async_device_unregister(&sdma->dma); | 663 | dma_async_device_unregister(&sdma->dma); |
671 | devm_free_irq(dev, sdma->irq, sdma); | 664 | free_irq(sdma->irq, sdma); |
672 | irq_dispose_mapping(sdma->irq); | 665 | irq_dispose_mapping(sdma->irq); |
673 | iounmap(sdma->base); | ||
674 | devm_kfree(dev, sdma); | ||
675 | return 0; | 666 | return 0; |
676 | } | 667 | } |
677 | 668 | ||