diff options
Diffstat (limited to 'drivers/net/usb/lan78xx.c')
| -rw-r--r-- | drivers/net/usb/lan78xx.c | 19 | 
1 files changed, 11 insertions, 8 deletions
| diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 42d35cc6b421..00397a807393 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -1175,10 +1175,13 @@ static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset,  	}  write_raw_eeprom_done: -	if (dev->chipid == ID_REV_CHIP_ID_7800_) -		return lan78xx_write_reg(dev, HW_CFG, saved); - -	return 0; +	if (dev->chipid == ID_REV_CHIP_ID_7800_) { +		int rc = lan78xx_write_reg(dev, HW_CFG, saved); +		/* If USB fails, there is nothing to do */ +		if (rc < 0) +			return rc; +	} +	return ret;  }  static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset, @@ -3247,10 +3250,6 @@ static int lan78xx_reset(struct lan78xx_net *dev)  		}  	} while (buf & HW_CFG_LRST_); -	ret = lan78xx_init_mac_address(dev); -	if (ret < 0) -		return ret; -  	/* save DEVID for later usage */  	ret = lan78xx_read_reg(dev, ID_REV, &buf);  	if (ret < 0) @@ -3259,6 +3258,10 @@ static int lan78xx_reset(struct lan78xx_net *dev)  	dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16;  	dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; +	ret = lan78xx_init_mac_address(dev); +	if (ret < 0) +		return ret; +  	/* Respond to the IN token with a NAK */  	ret = lan78xx_read_reg(dev, USB_CFG0, &buf);  	if (ret < 0) | 
