diff options
| author | Marek Vasut <marek.vasut+renesas@gmail.com> | 2020-03-21 17:25:41 +0100 | 
|---|---|---|
| committer | marex <marex@desktop.lan> | 2020-05-01 12:35:21 +0200 | 
| commit | f51a2f84969a1c88fb96414835a3b04883f3d8eb (patch) | |
| tree | 6cd05075329534bf530500578046d90b191e5425 | |
| parent | 9741795408d2fb907256899cd9403dd57b917358 (diff) | |
net: smc911x: Pull MII registration into separate function
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+renesas@gmail.com>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
| -rw-r--r-- | drivers/net/smc911x.c | 64 | 
1 files changed, 40 insertions, 24 deletions
| diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 4459da5945d..65c25f3bfd3 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;  } | 
