lan78xx: Enable LEDs and auto-negotiation
authorPhil Elwell <phil@raspberrypi.org>
Tue, 17 Oct 2017 14:04:29 +0000 (15:04 +0100)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:03:48 +0000 (16:03 +0000)
For applications of the LAN78xx that don't have valid programmed
EEPROMs or OTPs, enabling both LEDs and auto-negotiation by default
seems reasonable.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>
drivers/net/usb/lan78xx.c

index 3e1a83a..26e0f16 100644 (file)
@@ -2716,6 +2716,11 @@ static int lan78xx_reset(struct lan78xx_net *dev)
        int ret;
        u32 buf;
        u8 sig;
+       bool has_eeprom;
+       bool has_otp;
+
+       has_eeprom = !lan78xx_read_eeprom(dev, 0, 0, NULL);
+       has_otp = !lan78xx_read_otp(dev, 0, 0, NULL);
 
        ret = lan78xx_read_reg(dev, HW_CFG, &buf);
        if (ret < 0)
@@ -2797,6 +2802,10 @@ static int lan78xx_reset(struct lan78xx_net *dev)
 
        buf |= HW_CFG_MEF_;
 
+       /* If no valid EEPROM and no valid OTP, enable the LEDs by default */
+       if (!has_eeprom && !has_otp)
+           buf |= HW_CFG_LED0_EN_ | HW_CFG_LED1_EN_;
+
        ret = lan78xx_write_reg(dev, HW_CFG, buf);
        if (ret < 0)
                return ret;
@@ -2895,6 +2904,9 @@ static int lan78xx_reset(struct lan78xx_net *dev)
                        buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
                }
        }
+       /* If no valid EEPROM and no valid OTP, enable AUTO negotiation */
+       if (!has_eeprom && !has_otp)
+           buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
        ret = lan78xx_write_reg(dev, MAC_CR, buf);
        if (ret < 0)
                return ret;