diff options
Diffstat (limited to 'drivers/net/usb/dm9601.c')
| -rw-r--r-- | drivers/net/usb/dm9601.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c index 78df2be8a728..db3377dae9d5 100644 --- a/drivers/net/usb/dm9601.c +++ b/drivers/net/usb/dm9601.c | |||
| @@ -396,6 +396,20 @@ static void dm9601_set_multicast(struct net_device *net) | |||
| 396 | dm_write_reg_async(dev, DM_RX_CTRL, rx_ctl); | 396 | dm_write_reg_async(dev, DM_RX_CTRL, rx_ctl); |
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | static int dm9601_set_mac_address(struct net_device *net, void *p) | ||
| 400 | { | ||
| 401 | struct sockaddr *addr = p; | ||
| 402 | struct usbnet *dev = netdev_priv(net); | ||
| 403 | |||
| 404 | if (!is_valid_ether_addr(addr->sa_data)) | ||
| 405 | return -EINVAL; | ||
| 406 | |||
| 407 | memcpy(net->dev_addr, addr->sa_data, net->addr_len); | ||
| 408 | dm_write_async(dev, DM_PHY_ADDR, net->addr_len, net->dev_addr); | ||
| 409 | |||
| 410 | return 0; | ||
| 411 | } | ||
| 412 | |||
| 399 | static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf) | 413 | static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf) |
| 400 | { | 414 | { |
| 401 | int ret; | 415 | int ret; |
| @@ -406,6 +420,7 @@ static int dm9601_bind(struct usbnet *dev, struct usb_interface *intf) | |||
| 406 | 420 | ||
| 407 | dev->net->do_ioctl = dm9601_ioctl; | 421 | dev->net->do_ioctl = dm9601_ioctl; |
| 408 | dev->net->set_multicast_list = dm9601_set_multicast; | 422 | dev->net->set_multicast_list = dm9601_set_multicast; |
| 423 | dev->net->set_mac_address = dm9601_set_mac_address; | ||
| 409 | dev->net->ethtool_ops = &dm9601_ethtool_ops; | 424 | dev->net->ethtool_ops = &dm9601_ethtool_ops; |
| 410 | dev->net->hard_header_len += DM_TX_OVERHEAD; | 425 | dev->net->hard_header_len += DM_TX_OVERHEAD; |
| 411 | dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; | 426 | dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; |
