diff options
Diffstat (limited to 'drivers/usb/gadget/function/u_ether.c')
| -rw-r--r-- | drivers/usb/gadget/function/u_ether.c | 16 | 
1 files changed, 6 insertions, 10 deletions
| diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c index e0ad5aed6ac9..6f5d45ef2e39 100644 --- a/drivers/usb/gadget/function/u_ether.c +++ b/drivers/usb/gadget/function/u_ether.c @@ -17,6 +17,7 @@  #include <linux/etherdevice.h>  #include <linux/ethtool.h>  #include <linux/if_vlan.h> +#include <linux/etherdevice.h>  #include "u_ether.h" @@ -863,19 +864,23 @@ int gether_register_netdev(struct net_device *net)  {  	struct eth_dev *dev;  	struct usb_gadget *g; -	struct sockaddr sa;  	int status;  	if (!net->dev.parent)  		return -EINVAL;  	dev = netdev_priv(net);  	g = dev->gadget; + +	net->addr_assign_type = NET_ADDR_RANDOM; +	eth_hw_addr_set(net, dev->dev_mac); +  	status = register_netdev(net);  	if (status < 0) {  		dev_dbg(&g->dev, "register_netdev failed, %d\n", status);  		return status;  	} else {  		INFO(dev, "HOST MAC %pM\n", dev->host_mac); +		INFO(dev, "MAC %pM\n", dev->dev_mac);  		/* two kinds of host-initiated state changes:  		 *  - iff DATA transfer is active, carrier is "on" @@ -883,15 +888,6 @@ int gether_register_netdev(struct net_device *net)  		 */  		netif_carrier_off(net);  	} -	sa.sa_family = net->type; -	memcpy(sa.sa_data, dev->dev_mac, ETH_ALEN); -	rtnl_lock(); -	status = dev_set_mac_address(net, &sa, NULL); -	rtnl_unlock(); -	if (status) -		pr_warn("cannot set self ethernet address: %d\n", status); -	else -		INFO(dev, "MAC %pM\n", dev->dev_mac);  	return status;  } |