This change adds support to cdc_ncm for ACPI MAC address pass through functionality that also exists in the Realtek r8152 driver. This is in support of Dell's Universal Dock D6000, to give it the same feature capability as is currently available in Windows and advertized on Dell's product web site. Signed-off-by: Charles Hyde <charles.hyde@xxxxxxxxxxxx> Cc: Mario Limonciello <mario.limonciello@xxxxxxxx> Cc: Oliver Neukum <oliver@xxxxxxxxxx> Cc: linux-usb@xxxxxxxxxxxxxxx --- drivers/net/usb/cdc_ncm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index f77c8672f972..1f046acca6fc 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -52,6 +52,7 @@ #include <linux/usb/usbnet.h> #include <linux/usb/cdc.h> #include <linux/usb/cdc_ncm.h> +#include <acpi/acpi_mac_passthru.h> #if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM) static bool prefer_mbim = true; @@ -930,11 +931,18 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_ usb_set_intfdata(ctx->control, dev); if (ctx->ether_desc) { + struct sockaddr sa; + temp = usbnet_get_ethernet_addr(dev, ctx->ether_desc->iMACAddress); if (temp) { dev_dbg(&intf->dev, "failed to get mac address\n"); goto error2; } + if (get_acpi_mac_passthru(&intf->dev, &sa) == 0) { + memcpy(dev->net->dev_addr, sa.sa_data, ETH_ALEN); + if (usbnet_set_ethernet_addr(dev) < 0) + usbnet_get_ethernet_addr(dev, ctx->ether_desc->iMACAddress); + } dev_info(&intf->dev, "MAC-Address: %pM\n", dev->net->dev_addr); } -- 2.20.1