aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/pata_mpc52xx.c44
1 files changed, 15 insertions, 29 deletions
diff --git a/drivers/ata/pata_mpc52xx.c b/drivers/ata/pata_mpc52xx.c
index 00748ae1a016..d2c102fd4330 100644
--- a/drivers/ata/pata_mpc52xx.c
+++ b/drivers/ata/pata_mpc52xx.c
@@ -687,11 +687,11 @@ mpc52xx_ata_probe(struct platform_device *op)
687 int ata_irq = 0; 687 int ata_irq = 0;
688 struct mpc52xx_ata __iomem *ata_regs; 688 struct mpc52xx_ata __iomem *ata_regs;
689 struct mpc52xx_ata_priv *priv = NULL; 689 struct mpc52xx_ata_priv *priv = NULL;
690 int rv, ret, task_irq = 0; 690 int rv, task_irq;
691 int mwdma_mask = 0, udma_mask = 0; 691 int mwdma_mask = 0, udma_mask = 0;
692 const __be32 *prop; 692 const __be32 *prop;
693 int proplen; 693 int proplen;
694 struct bcom_task *dmatsk = NULL; 694 struct bcom_task *dmatsk;
695 695
696 /* Get ipb frequency */ 696 /* Get ipb frequency */
697 ipb_freq = mpc5xxx_get_bus_frequency(op->dev.of_node); 697 ipb_freq = mpc5xxx_get_bus_frequency(op->dev.of_node);
@@ -717,8 +717,7 @@ mpc52xx_ata_probe(struct platform_device *op)
717 ata_regs = devm_ioremap(&op->dev, res_mem.start, sizeof(*ata_regs)); 717 ata_regs = devm_ioremap(&op->dev, res_mem.start, sizeof(*ata_regs));
718 if (!ata_regs) { 718 if (!ata_regs) {
719 dev_err(&op->dev, "error mapping device registers\n"); 719 dev_err(&op->dev, "error mapping device registers\n");
720 rv = -ENOMEM; 720 return -ENOMEM;
721 goto err;
722 } 721 }
723 722
724 /* 723 /*
@@ -753,7 +752,7 @@ mpc52xx_ata_probe(struct platform_device *op)
753 if (!priv) { 752 if (!priv) {
754 dev_err(&op->dev, "error allocating private structure\n"); 753 dev_err(&op->dev, "error allocating private structure\n");
755 rv = -ENOMEM; 754 rv = -ENOMEM;
756 goto err; 755 goto err1;
757 } 756 }
758 757
759 priv->ipb_period = 1000000000 / (ipb_freq / 1000); 758 priv->ipb_period = 1000000000 / (ipb_freq / 1000);
@@ -776,15 +775,15 @@ mpc52xx_ata_probe(struct platform_device *op)
776 if (!dmatsk) { 775 if (!dmatsk) {
777 dev_err(&op->dev, "bestcomm initialization failed\n"); 776 dev_err(&op->dev, "bestcomm initialization failed\n");
778 rv = -ENOMEM; 777 rv = -ENOMEM;
779 goto err; 778 goto err1;
780 } 779 }
781 780
782 task_irq = bcom_get_task_irq(dmatsk); 781 task_irq = bcom_get_task_irq(dmatsk);
783 ret = request_irq(task_irq, &mpc52xx_ata_task_irq, 0, 782 rv = devm_request_irq(&op->dev, task_irq, &mpc52xx_ata_task_irq, 0,
784 "ATA task", priv); 783 "ATA task", priv);
785 if (ret) { 784 if (rv) {
786 dev_err(&op->dev, "error requesting DMA IRQ\n"); 785 dev_err(&op->dev, "error requesting DMA IRQ\n");
787 goto err; 786 goto err2;
788 } 787 }
789 priv->dmatsk = dmatsk; 788 priv->dmatsk = dmatsk;
790 789
@@ -792,7 +791,7 @@ mpc52xx_ata_probe(struct platform_device *op)
792 rv = mpc52xx_ata_hw_init(priv); 791 rv = mpc52xx_ata_hw_init(priv);
793 if (rv) { 792 if (rv) {
794 dev_err(&op->dev, "error initializing hardware\n"); 793 dev_err(&op->dev, "error initializing hardware\n");
795 goto err; 794 goto err2;
796 } 795 }
797 796
798 /* Register ourselves to libata */ 797 /* Register ourselves to libata */
@@ -800,23 +799,16 @@ mpc52xx_ata_probe(struct platform_device *op)
800 mwdma_mask, udma_mask); 799 mwdma_mask, udma_mask);
801 if (rv) { 800 if (rv) {
802 dev_err(&op->dev, "error registering with ATA layer\n"); 801 dev_err(&op->dev, "error registering with ATA layer\n");
803 goto err; 802 goto err2;
804 } 803 }
805 804
806 return 0; 805 return 0;
807 806
808 err: 807 err2:
809 devm_release_mem_region(&op->dev, res_mem.start, sizeof(*ata_regs)); 808 irq_dispose_mapping(task_irq);
810 if (ata_irq) 809 bcom_ata_release(dmatsk);
811 irq_dispose_mapping(ata_irq); 810 err1:
812 if (task_irq) 811 irq_dispose_mapping(ata_irq);
813 irq_dispose_mapping(task_irq);
814 if (dmatsk)
815 bcom_ata_release(dmatsk);
816 if (ata_regs)
817 devm_iounmap(&op->dev, ata_regs);
818 if (priv)
819 devm_kfree(&op->dev, priv);
820 return rv; 812 return rv;
821} 813}
822 814
@@ -835,12 +827,6 @@ mpc52xx_ata_remove(struct platform_device *op)
835 bcom_ata_release(priv->dmatsk); 827 bcom_ata_release(priv->dmatsk);
836 irq_dispose_mapping(priv->ata_irq); 828 irq_dispose_mapping(priv->ata_irq);
837 829
838 /* Clear up IO allocations */
839 devm_iounmap(&op->dev, priv->ata_regs);
840 devm_release_mem_region(&op->dev, priv->ata_regs_pa,
841 sizeof(*priv->ata_regs));
842 devm_kfree(&op->dev, priv);
843
844 return 0; 830 return 0;
845} 831}
846 832