/*
* Atheros AR71xx built-in ethernet mac driver
*
- * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
*
* Based on Atheros' AG7100 driver
static int ag71xx_open(struct net_device *dev)
{
struct ag71xx *ag = netdev_priv(dev);
- int err;
+ int ret;
- err = ag71xx_phy_connect(ag);
- if (err)
+ ret = ag71xx_rings_init(ag);
+ if (ret)
goto err;
- err = ag71xx_rings_init(ag);
- if (err)
- goto err_ring_cleanup;
-
napi_enable(&ag->napi);
netif_carrier_off(dev);
return 0;
- err_ring_cleanup:
- ag71xx_rings_cleanup(ag);
err:
- return err;
+ ag71xx_rings_cleanup(ag);
+ return ret;
}
static int ag71xx_stop(struct net_device *dev)
spin_unlock_irqrestore(&ag->lock, flags);
ag71xx_rings_cleanup(ag);
- ag71xx_phy_disconnect(ag);
return 0;
}
napi_schedule(&ag->napi);
}
+ ag71xx_debugfs_update_int_stats(ag, status);
+
return IRQ_HANDLED;
}
ag71xx_dump_regs(ag);
+ err = ag71xx_phy_connect(ag);
+ if (err)
+ goto err_unregister_netdev;
+
+ err = ag71xx_debugfs_init(ag);
+ if (err)
+ goto err_phy_disconnect;
+
platform_set_drvdata(pdev, dev);
return 0;
+ err_phy_disconnect:
+ ag71xx_phy_disconnect(ag);
+ err_unregister_netdev:
+ unregister_netdev(dev);
err_free_irq:
free_irq(dev->irq, dev);
err_unmap_mii_ctrl:
if (dev) {
struct ag71xx *ag = netdev_priv(dev);
+ ag71xx_debugfs_exit(ag);
+ ag71xx_phy_disconnect(ag);
unregister_netdev(dev);
free_irq(dev->irq, dev);
iounmap(ag->mii_ctrl);
{
int ret;
- ret = ag71xx_mdio_driver_init();
+ ret = ag71xx_debugfs_root_init();
if (ret)
goto err_out;
+ ret = ag71xx_mdio_driver_init();
+ if (ret)
+ goto err_debugfs_exit;
+
ret = platform_driver_register(&ag71xx_driver);
if (ret)
goto err_mdio_exit;
err_mdio_exit:
ag71xx_mdio_driver_exit();
+ err_debugfs_exit:
+ ag71xx_debugfs_root_exit();
err_out:
return ret;
}
{
platform_driver_unregister(&ag71xx_driver);
ag71xx_mdio_driver_exit();
+ ag71xx_debugfs_root_exit();
}
module_init(ag71xx_module_init);