950-0055-lan78xx-Enable-LEDs-and-auto-negotiation.patch 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. From ec6fe1f3510a68ea742758b1cd806a5a08fed7ae Mon Sep 17 00:00:00 2001
  2. From: Phil Elwell <[email protected]>
  3. Date: Tue, 17 Oct 2017 15:04:29 +0100
  4. Subject: [PATCH] lan78xx: Enable LEDs and auto-negotiation
  5. For applications of the LAN78xx that don't have valid programmed
  6. EEPROMs or OTPs, enabling both LEDs and auto-negotiation by default
  7. seems reasonable.
  8. Signed-off-by: Phil Elwell <[email protected]>
  9. ---
  10. drivers/net/usb/lan78xx.c | 12 ++++++++++++
  11. 1 file changed, 12 insertions(+)
  12. --- a/drivers/net/usb/lan78xx.c
  13. +++ b/drivers/net/usb/lan78xx.c
  14. @@ -2691,6 +2691,11 @@ static int lan78xx_reset(struct lan78xx_
  15. int ret;
  16. u32 buf;
  17. u8 sig;
  18. + bool has_eeprom;
  19. + bool has_otp;
  20. +
  21. + has_eeprom = !lan78xx_read_eeprom(dev, 0, 0, NULL);
  22. + has_otp = !lan78xx_read_otp(dev, 0, 0, NULL);
  23. ret = lan78xx_read_reg(dev, HW_CFG, &buf);
  24. if (ret < 0)
  25. @@ -2772,6 +2777,10 @@ static int lan78xx_reset(struct lan78xx_
  26. buf |= HW_CFG_MEF_;
  27. + /* If no valid EEPROM and no valid OTP, enable the LEDs by default */
  28. + if (!has_eeprom && !has_otp)
  29. + buf |= HW_CFG_LED0_EN_ | HW_CFG_LED1_EN_;
  30. +
  31. ret = lan78xx_write_reg(dev, HW_CFG, buf);
  32. if (ret < 0)
  33. return ret;
  34. @@ -2870,6 +2879,9 @@ static int lan78xx_reset(struct lan78xx_
  35. buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
  36. }
  37. }
  38. + /* If no valid EEPROM and no valid OTP, enable AUTO negotiation */
  39. + if (!has_eeprom && !has_otp)
  40. + buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
  41. ret = lan78xx_write_reg(dev, MAC_CR, buf);
  42. if (ret < 0)
  43. return ret;