diff options
-rw-r--r-- | drivers/net/ethernet/cadence/at91_ether.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/drivers/net/ethernet/cadence/at91_ether.c b/drivers/net/ethernet/cadence/at91_ether.c index 68b7e2a46219..375d272d1a5f 100644 --- a/drivers/net/ethernet/cadence/at91_ether.c +++ b/drivers/net/ethernet/cadence/at91_ether.c @@ -30,9 +30,8 @@ #include <linux/clk.h> #include <linux/gfp.h> #include <linux/phy.h> +#include <linux/io.h> -#include <asm/io.h> -#include <asm/uaccess.h> #include <asm/mach-types.h> #include "macb.h" @@ -472,26 +471,25 @@ static int __init at91ether_probe(struct platform_device *pdev) spin_lock_init(&lp->lock); dev->base_addr = regs->start; /* physical base address */ - lp->regs = ioremap(regs->start, regs->end - regs->start + 1); + lp->regs = devm_ioremap(&pdev->dev, regs->start, resource_size(regs)); if (!lp->regs) { res = -ENOMEM; goto err_free_dev; } /* Clock */ - lp->pclk = clk_get(&pdev->dev, "ether_clk"); + lp->pclk = devm_clk_get(&pdev->dev, "ether_clk"); if (IS_ERR(lp->pclk)) { res = PTR_ERR(lp->pclk); - goto err_ioumap; + goto err_free_dev; } clk_enable(lp->pclk); /* Install the interrupt handler */ dev->irq = platform_get_irq(pdev, 0); - if (request_irq(dev->irq, at91ether_interrupt, 0, dev->name, dev)) { - res = -EBUSY; + res = devm_request_irq(&pdev->dev, dev->irq, at91ether_interrupt, 0, dev->name, dev); + if (res) goto err_disable_clock; - } ether_setup(dev); dev->netdev_ops = &at91ether_netdev_ops; @@ -515,7 +513,7 @@ static int __init at91ether_probe(struct platform_device *pdev) /* Register the network interface */ res = register_netdev(dev); if (res) - goto err_free_irq; + goto err_disable_clock; if (macb_mii_init(lp) != 0) goto err_out_unregister_netdev; @@ -537,14 +535,8 @@ static int __init at91ether_probe(struct platform_device *pdev) err_out_unregister_netdev: unregister_netdev(dev); -err_free_irq: - platform_set_drvdata(pdev, NULL); - free_irq(dev->irq, dev); err_disable_clock: clk_disable(lp->pclk); - clk_put(lp->pclk); -err_ioumap: - iounmap(lp->regs); err_free_dev: free_netdev(dev); return res; @@ -562,10 +554,7 @@ static int __devexit at91ether_remove(struct platform_device *pdev) kfree(lp->mii_bus->irq); mdiobus_free(lp->mii_bus); unregister_netdev(dev); - free_irq(dev->irq, dev); - iounmap(lp->regs); clk_disable(lp->pclk); - clk_put(lp->pclk); free_netdev(dev); platform_set_drvdata(pdev, NULL); |