net: designware: Add driver remove support
authorBin Meng <bmeng.cn@gmail.com>
Thu, 8 Oct 2015 04:32:38 +0000 (21:32 -0700)
committerJoe Hershberger <joe.hershberger@ni.com>
Thu, 29 Oct 2015 19:05:50 +0000 (14:05 -0500)
In designware_eth_probe(), some additional resources are allocated
(eg: mdio, phy). We should free these in the driver remove phase.
Add designware_eth_remove() to clean it up.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
drivers/net/designware.c

index 6433896eec03b4468b5d83bddc0414b3b7723916..a6c39c39ffaaee82f40f31dbf6c9ada59b3ce745 100644 (file)
@@ -613,6 +613,17 @@ static int designware_eth_probe(struct udevice *dev)
        return ret;
 }
 
+static int designware_eth_remove(struct udevice *dev)
+{
+       struct dw_eth_dev *priv = dev_get_priv(dev);
+
+       free(priv->phydev);
+       mdio_unregister(priv->bus);
+       mdio_free(priv->bus);
+
+       return 0;
+}
+
 static const struct eth_ops designware_eth_ops = {
        .start                  = designware_eth_start,
        .send                   = designware_eth_send,
@@ -653,6 +664,7 @@ U_BOOT_DRIVER(eth_designware) = {
        .ofdata_to_platdata = designware_eth_ofdata_to_platdata,
        .bind   = designware_eth_bind,
        .probe  = designware_eth_probe,
+       .remove = designware_eth_remove,
        .ops    = &designware_eth_ops,
        .priv_auto_alloc_size = sizeof(struct dw_eth_dev),
        .platdata_auto_alloc_size = sizeof(struct eth_pdata),