aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb/lan78xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/usb/lan78xx.c')
-rw-r--r--drivers/net/usb/lan78xx.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index b99a7fb09f8e..0161f77641fa 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -1265,30 +1265,45 @@ static int lan78xx_ethtool_get_eeprom(struct net_device *netdev,
1265 struct ethtool_eeprom *ee, u8 *data) 1265 struct ethtool_eeprom *ee, u8 *data)
1266{ 1266{
1267 struct lan78xx_net *dev = netdev_priv(netdev); 1267 struct lan78xx_net *dev = netdev_priv(netdev);
1268 int ret;
1269
1270 ret = usb_autopm_get_interface(dev->intf);
1271 if (ret)
1272 return ret;
1268 1273
1269 ee->magic = LAN78XX_EEPROM_MAGIC; 1274 ee->magic = LAN78XX_EEPROM_MAGIC;
1270 1275
1271 return lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); 1276 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);
1277
1278 usb_autopm_put_interface(dev->intf);
1279
1280 return ret;
1272} 1281}
1273 1282
1274static int lan78xx_ethtool_set_eeprom(struct net_device *netdev, 1283static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,
1275 struct ethtool_eeprom *ee, u8 *data) 1284 struct ethtool_eeprom *ee, u8 *data)
1276{ 1285{
1277 struct lan78xx_net *dev = netdev_priv(netdev); 1286 struct lan78xx_net *dev = netdev_priv(netdev);
1287 int ret;
1288
1289 ret = usb_autopm_get_interface(dev->intf);
1290 if (ret)
1291 return ret;
1278 1292
1279 /* Allow entire eeprom update only */ 1293 /* Invalid EEPROM_INDICATOR at offset zero will result in a failure
1280 if ((ee->magic == LAN78XX_EEPROM_MAGIC) && 1294 * to load data from EEPROM
1281 (ee->offset == 0) && 1295 */
1282 (ee->len == 512) && 1296 if (ee->magic == LAN78XX_EEPROM_MAGIC)
1283 (data[0] == EEPROM_INDICATOR)) 1297 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1284 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1285 else if ((ee->magic == LAN78XX_OTP_MAGIC) && 1298 else if ((ee->magic == LAN78XX_OTP_MAGIC) &&
1286 (ee->offset == 0) && 1299 (ee->offset == 0) &&
1287 (ee->len == 512) && 1300 (ee->len == 512) &&
1288 (data[0] == OTP_INDICATOR_1)) 1301 (data[0] == OTP_INDICATOR_1))
1289 return lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); 1302 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data);
1303
1304 usb_autopm_put_interface(dev->intf);
1290 1305
1291 return -EINVAL; 1306 return ret;
1292} 1307}
1293 1308
1294static void lan78xx_get_strings(struct net_device *netdev, u32 stringset, 1309static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
@@ -2434,7 +2449,6 @@ static int lan78xx_reset(struct lan78xx_net *dev)
2434 /* LAN7801 only has RGMII mode */ 2449 /* LAN7801 only has RGMII mode */
2435 if (dev->chipid == ID_REV_CHIP_ID_7801_) 2450 if (dev->chipid == ID_REV_CHIP_ID_7801_)
2436 buf &= ~MAC_CR_GMII_EN_; 2451 buf &= ~MAC_CR_GMII_EN_;
2437 buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
2438 ret = lan78xx_write_reg(dev, MAC_CR, buf); 2452 ret = lan78xx_write_reg(dev, MAC_CR, buf);
2439 2453
2440 ret = lan78xx_read_reg(dev, MAC_TX, &buf); 2454 ret = lan78xx_read_reg(dev, MAC_TX, &buf);