From 6ed88d188a8240ba44da6578eab7d17e036d0e61 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 17 Oct 2017 15:04:29 +0100 Subject: [PATCH] lan78xx: Enable LEDs if no valid EEPROM or OTP For applications of the LAN78xx that don't have valid programmed EEPROMs or OTPs, enabling both LEDs by default seems reasonable. Signed-off-by: Phil Elwell --- drivers/net/usb/lan78xx.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index a21039852f8d..cd20ce4ed87d 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -2414,6 +2414,12 @@ static int lan78xx_reset(struct lan78xx_net *dev) ret = lan78xx_read_reg(dev, HW_CFG, &buf); buf |= HW_CFG_MEF_; + + /* If no valid EEPROM and no valid OTP, enable the LEDs by default */ + if (lan78xx_read_eeprom(dev, 0, 0, NULL) && + lan78xx_read_otp(dev, 0, 0, NULL)) + buf |= HW_CFG_LED0_EN_ | HW_CFG_LED1_EN_; + ret = lan78xx_write_reg(dev, HW_CFG, buf); ret = lan78xx_read_reg(dev, USB_CFG0, &buf); From 4a4710f3847cd087e150f83382dffd92e09d9914 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Sat, 17 Mar 2018 00:10:02 +0100 Subject: [PATCH] lan78xx: Read MAC address from DT if present There is a standard mechanism for locating and using a MAC address from the Device Tree. Use this facility in the lan78xx driver to support applications without programmed EEPROM or OTP. Signed-off-by: Phil Elwell --- drivers/net/usb/lan78xx.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 60a604cc7647..a21039852f8d 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include "lan78xx.h" @@ -1639,6 +1640,14 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) u32 addr_lo, addr_hi; int ret; u8 addr[6]; + const u8 *mac_addr; + + /* maybe the boot loader passed the MAC address in devicetree */ + mac_addr = of_get_mac_address(dev->udev->dev.of_node); + if (mac_addr) { + ether_addr_copy(addr, mac_addr); + goto set_mac_addr; + } ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); @@ -1667,6 +1676,7 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev) "MAC address set to random addr"); } +set_mac_addr: addr_lo = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24); addr_hi = addr[4] | (addr[5] << 8);