Commit 9fb137ae authored by Peter Fink's avatar Peter Fink Committed by David S. Miller

net: usb: ax88179_178a: allow optionally getting mac address from device tree

Adopt and integrate the feature to pass the MAC address via device tree
from asix_device.c (03fc5d4f) also to other ax88179 based asix chips.
E.g. the bootloader fills in local-mac-address and the driver will then
pick up and use this MAC address.
Signed-off-by: default avatarPeter Fink <pfink@christ-es.de>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0d7982ce
...@@ -1214,6 +1214,29 @@ static int ax88179_led_setting(struct usbnet *dev) ...@@ -1214,6 +1214,29 @@ static int ax88179_led_setting(struct usbnet *dev)
return 0; return 0;
} }
static void ax88179_get_mac_addr(struct usbnet *dev)
{
u8 mac[ETH_ALEN];
/* Maybe the boot loader passed the MAC address via device tree */
if (!eth_platform_get_mac_address(&dev->udev->dev, mac)) {
netif_dbg(dev, ifup, dev->net,
"MAC address read from device tree");
} else {
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_NODE_ID, ETH_ALEN,
ETH_ALEN, mac);
netif_dbg(dev, ifup, dev->net,
"MAC address read from ASIX chip");
}
if (is_valid_ether_addr(mac)) {
memcpy(dev->net->dev_addr, mac, ETH_ALEN);
} else {
netdev_info(dev->net, "invalid MAC address, using random\n");
eth_hw_addr_random(dev->net);
}
}
static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf) static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
{ {
u8 buf[5]; u8 buf[5];
...@@ -1240,8 +1263,8 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf) ...@@ -1240,8 +1263,8 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, tmp); ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, tmp);
msleep(100); msleep(100);
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_NODE_ID, ETH_ALEN, /* Read MAC address from DTB or asix chip */
ETH_ALEN, dev->net->dev_addr); ax88179_get_mac_addr(dev);
memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN); memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN);
/* RX bulk configuration */ /* RX bulk configuration */
...@@ -1541,8 +1564,8 @@ static int ax88179_reset(struct usbnet *dev) ...@@ -1541,8 +1564,8 @@ static int ax88179_reset(struct usbnet *dev)
/* Ethernet PHY Auto Detach*/ /* Ethernet PHY Auto Detach*/
ax88179_auto_detach(dev, 0); ax88179_auto_detach(dev, 0);
ax88179_read_cmd(dev, AX_ACCESS_MAC, AX_NODE_ID, ETH_ALEN, ETH_ALEN, /* Read MAC address from DTB or asix chip */
dev->net->dev_addr); ax88179_get_mac_addr(dev);
/* RX bulk configuration */ /* RX bulk configuration */
memcpy(tmp, &AX88179_BULKIN_SIZE[0], 5); memcpy(tmp, &AX88179_BULKIN_SIZE[0], 5);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment