Pull the MII interface registration into separate function to avoid the
ifdeffery in smc911x_initialize(). Moreover, adjust the fail path such
that we use goto labels.

Signed-off-by: Marek Vasut <marek.vasut+rene...@gmail.com>
Cc: Joe Hershberger <joe.hershber...@ni.com>
Cc: Masahiro Yamada <yamada.masah...@socionext.com>
---
V2: New patch
V3: No change
V4: No change
---
 drivers/net/smc911x.c | 64 +++++++++++++++++++++++++++----------------
 1 file changed, 40 insertions(+), 24 deletions(-)

diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index 4459da5945..65c25f3bfd 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -240,12 +240,39 @@ static int smc911x_miiphy_write(struct mii_dev *bus, int 
phy, int devad,
 
        return smc911x_eth_phy_write(dev, phy, reg, val);
 }
+
+static int smc911x_initialize_mii(struct eth_device *dev)
+{
+       struct mii_dev *mdiodev = mdio_alloc();
+       int ret;
+
+       if (!mdiodev)
+               return -ENOMEM;
+
+       strncpy(mdiodev->name, dev->name, MDIO_NAME_LEN);
+       mdiodev->read = smc911x_miiphy_read;
+       mdiodev->write = smc911x_miiphy_write;
+
+       ret = mdio_register(mdiodev);
+       if (ret < 0) {
+               mdio_free(mdiodev);
+               return ret;
+       }
+
+       return 0;
+}
+#else
+static int smc911x_initialize_mii(struct eth_device *dev)
+{
+       return 0;
+}
 #endif
 
 int smc911x_initialize(u8 dev_num, int base_addr)
 {
        unsigned long addrl, addrh;
        struct eth_device *dev;
+       int ret;
 
        dev = calloc(1, sizeof(*dev));
        if (!dev)
@@ -254,9 +281,10 @@ int smc911x_initialize(u8 dev_num, int base_addr)
        dev->iobase = base_addr;
 
        /* Try to detect chip. Will fail if not present. */
-       if (smc911x_detect_chip(dev)) {
-               free(dev);
-               return 0;
+       ret = smc911x_detect_chip(dev);
+       if (ret) {
+               ret = 0;        /* Card not detected is not an error */
+               goto err_detect;
        }
 
        addrh = smc911x_get_mac_csr(dev, ADDRH);
@@ -279,27 +307,15 @@ int smc911x_initialize(u8 dev_num, int base_addr)
 
        eth_register(dev);
 
-#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
-       int retval;
-       struct mii_dev *mdiodev = mdio_alloc();
-       if (!mdiodev) {
-               eth_unregister(dev);
-               free(dev);
-               return -ENOMEM;
-       }
-
-       strncpy(mdiodev->name, dev->name, MDIO_NAME_LEN);
-       mdiodev->read = smc911x_miiphy_read;
-       mdiodev->write = smc911x_miiphy_write;
-
-       retval = mdio_register(mdiodev);
-       if (retval < 0) {
-               mdio_free(mdiodev);
-               eth_unregister(dev);
-               free(dev);
-               return retval;
-       }
-#endif
+       ret = smc911x_initialize_mii(dev);
+       if (ret)
+               goto err_mii;
 
        return 1;
+
+err_mii:
+       eth_unregister(dev);
+err_detect:
+       free(dev);
+       return ret;
 }
-- 
2.25.1

Reply via email to