summaryrefslogtreecommitdiffstats
path: root/drivers/ata/pata_mpc52xx.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-22 20:22:30 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-22 20:22:30 -0700
commit90597b6cfc1fc9926a4d54f09bbf5b3254b1b028 (patch)
tree36e4f213e15dcc85620c7e0ccca42883d412fb8e /drivers/ata/pata_mpc52xx.c
parent7bfe0e66d5da32961f0060fc5d96b739b1ed64b9 (diff)
parentb8cec3c253a2a001e463c43260fb75fb3223a04d (diff)
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
Pull libata updates from Jeff Garzik: 1) AHCI regression fix. A recent "make driver conform to spec" change broke on deployed hardware. Make new behavior optional, rather than default, turning it on only for specific embedded platforms that need this. Everybody else runs in the famous "non conformant but working" mode. 2) pata_cmd64x, pata_legacy cleanups 3) new Intel SATA PCI IDs 4) misc minor vendor feature additions * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: pata_cmd64x: implement sff_irq_check() method pata_cmd64x: implement sff_irq_clear() method pata_cmd64x: use interrupt status from MRDMODE register pata_cmd64x: turn string of *if* statements into *switch* drivers/ata/pata_mpc52xx.c: clean up error handling code ahci_platform: add STRICT_AHCI platform type ahci: move AHCI_HFLAGS() macro to ahci.h ahci: add AHCI_HFLAG_DELAY_ENGINE host flag sata_fsl: add support for interrupt coalsecing feature ata/pata_arasan_cf: Add Hibernation support pata_legacy: correctly mask recovery field for HT6560B ata_piix: IDE-mode SATA patch for Intel Lynx Point DeviceIDs ahci: AHCI-mode SATA patch for Intel Lynx Point DeviceIDs
Diffstat (limited to 'drivers/ata/pata_mpc52xx.c')
-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)
int ata_irq = 0;
struct mpc52xx_ata __iomem *ata_regs;
struct mpc52xx_ata_priv *priv = NULL;
- int rv, ret, task_irq = 0;
+ int rv, task_irq;
int mwdma_mask = 0, udma_mask = 0;
const __be32 *prop;
int proplen;
- struct bcom_task *dmatsk = NULL;
+ struct bcom_task *dmatsk;
/* Get ipb frequency */
ipb_freq = mpc5xxx_get_bus_frequency(op->dev.of_node);
@@ -717,8 +717,7 @@ mpc52xx_ata_probe(struct platform_device *op)
ata_regs = devm_ioremap(&op->dev, res_mem.start, sizeof(*ata_regs));
if (!ata_regs) {
dev_err(&op->dev, "error mapping device registers\n");
- rv = -ENOMEM;
- goto err;
+ return -ENOMEM;
}
/*
@@ -753,7 +752,7 @@ mpc52xx_ata_probe(struct platform_device *op)
if (!priv) {
dev_err(&op->dev, "error allocating private structure\n");
rv = -ENOMEM;
- goto err;
+ goto err1;
}
priv->ipb_period = 1000000000 / (ipb_freq / 1000);
@@ -776,15 +775,15 @@ mpc52xx_ata_probe(struct platform_device *op)
if (!dmatsk) {
dev_err(&op->dev, "bestcomm initialization failed\n");
rv = -ENOMEM;
- goto err;
+ goto err1;
}
task_irq = bcom_get_task_irq(dmatsk);
- ret = request_irq(task_irq, &mpc52xx_ata_task_irq, 0,
+ rv = devm_request_irq(&op->dev, task_irq, &mpc52xx_ata_task_irq, 0,
"ATA task", priv);
- if (ret) {
+ if (rv) {
dev_err(&op->dev, "error requesting DMA IRQ\n");
- goto err;
+ goto err2;
}
priv->dmatsk = dmatsk;
@@ -792,7 +791,7 @@ mpc52xx_ata_probe(struct platform_device *op)
rv = mpc52xx_ata_hw_init(priv);
if (rv) {
dev_err(&op->dev, "error initializing hardware\n");
- goto err;
+ goto err2;
}
/* Register ourselves to libata */
@@ -800,23 +799,16 @@ mpc52xx_ata_probe(struct platform_device *op)
mwdma_mask, udma_mask);
if (rv) {
dev_err(&op->dev, "error registering with ATA layer\n");
- goto err;
+ goto err2;
}
return 0;
- err:
- devm_release_mem_region(&op->dev, res_mem.start, sizeof(*ata_regs));
- if (ata_irq)
- irq_dispose_mapping(ata_irq);
- if (task_irq)
- irq_dispose_mapping(task_irq);
- if (dmatsk)
- bcom_ata_release(dmatsk);
- if (ata_regs)
- devm_iounmap(&op->dev, ata_regs);
- if (priv)
- devm_kfree(&op->dev, priv);
+ err2:
+ irq_dispose_mapping(task_irq);
+ bcom_ata_release(dmatsk);
+ err1:
+ irq_dispose_mapping(ata_irq);
return rv;
}
@@ -835,12 +827,6 @@ mpc52xx_ata_remove(struct platform_device *op)
bcom_ata_release(priv->dmatsk);
irq_dispose_mapping(priv->ata_irq);
- /* Clear up IO allocations */
- devm_iounmap(&op->dev, priv->ata_regs);
- devm_release_mem_region(&op->dev, priv->ata_regs_pa,
- sizeof(*priv->ata_regs));
- devm_kfree(&op->dev, priv);
-
return 0;
}