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 (03fc5d4) 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: Peter Fink <pfink@christ-es.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0d7982ce6e
commit
9fb137aef3
@ -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)
|
|||||||
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)
|
|||||||
/* 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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user