> @@ -1520,17 +1513,22 @@ static int smsc911x_open(struct net_device *dev) > unsigned int timeout; > unsigned int temp; > unsigned int intcfg; > + int retval; > > - /* if the phy is not yet registered, retry later*/ > + /* find and start the given phy */ > if (!dev->phydev) { > - SMSC_WARN(pdata, hw, "phy_dev is NULL"); > - return -EAGAIN; > + if (smsc911x_mii_probe(dev) < 0) { > + SMSC_WARN(pdata, probe, "Error starting phy"); > + retval = -EAGAIN;
smsc911x_mii_probe() returns an error code. It is better to use that, than -EAGAIN, which is rather odd to start with. > + goto out; > + } > } > > /* Reset the LAN911x */ > if (smsc911x_soft_reset(pdata)) { > SMSC_WARN(pdata, hw, "soft reset failed"); > - return -EIO; > + retval = -EIO; > + goto mii_free_out; smsc911x_soft_reset() also returns an error code you should use. This patch also seems to do quite a few different things. Please can you break it up into multiple patches. Thanks Andrew