lan78xx: Enable LEDs and auto-negotiation

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>
This commit is contained in:
Phil Elwell
2017-10-17 15:04:29 +01:00
committed by Dom Cobley
parent df63771e7e
commit 11e0de5638

View File

@@ -3242,6 +3242,11 @@ static int lan78xx_reset(struct lan78xx_net *dev)
unsigned long timeout;
int ret;
u32 buf;
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)
@@ -3312,6 +3317,10 @@ static int lan78xx_reset(struct lan78xx_net *dev)
buf |= HW_CFG_CLK125_EN_;
buf |= HW_CFG_REFCLK25_EN_;
/* 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;
@@ -3404,6 +3413,10 @@ static int lan78xx_reset(struct lan78xx_net *dev)
if (dev->chipid == ID_REV_CHIP_ID_7801_)
buf &= ~MAC_CR_GMII_EN_;
/* 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;