diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-10-07 14:08:56 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-10-07 14:08:56 -0400 |
commit | 5a89770daad83df74d77a8d34a1ffaedae565ce9 (patch) | |
tree | 0d8ef70293a6ef969ba8b7718e59608337643d40 /drivers/net/usb/mcs7830.c | |
parent | c46c948260f41af18b277c1eb1895d788d3605dc (diff) | |
parent | af7c951d76708c61b862463d579d76be757130bf (diff) |
Merge branches 'pxa-core' and 'pxa-machines' into pxa-all
Conflicts:
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/pxa25x.c
arch/arm/mach-pxa/pxa27x.c
Diffstat (limited to 'drivers/net/usb/mcs7830.c')
-rw-r--r-- | drivers/net/usb/mcs7830.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c index c3d119f997f5..ca9d00c1194e 100644 --- a/drivers/net/usb/mcs7830.c +++ b/drivers/net/usb/mcs7830.c | |||
@@ -46,6 +46,10 @@ | |||
46 | 46 | ||
47 | #define MCS7830_VENDOR_ID 0x9710 | 47 | #define MCS7830_VENDOR_ID 0x9710 |
48 | #define MCS7830_PRODUCT_ID 0x7830 | 48 | #define MCS7830_PRODUCT_ID 0x7830 |
49 | #define MCS7730_PRODUCT_ID 0x7730 | ||
50 | |||
51 | #define SITECOM_VENDOR_ID 0x0DF6 | ||
52 | #define LN_030_PRODUCT_ID 0x0021 | ||
49 | 53 | ||
50 | #define MCS7830_MII_ADVERTISE (ADVERTISE_PAUSE_CAP | ADVERTISE_100FULL | \ | 54 | #define MCS7830_MII_ADVERTISE (ADVERTISE_PAUSE_CAP | ADVERTISE_100FULL | \ |
51 | ADVERTISE_100HALF | ADVERTISE_10FULL | \ | 55 | ADVERTISE_100HALF | ADVERTISE_10FULL | \ |
@@ -442,6 +446,29 @@ static struct ethtool_ops mcs7830_ethtool_ops = { | |||
442 | .nway_reset = usbnet_nway_reset, | 446 | .nway_reset = usbnet_nway_reset, |
443 | }; | 447 | }; |
444 | 448 | ||
449 | static int mcs7830_set_mac_address(struct net_device *netdev, void *p) | ||
450 | { | ||
451 | int ret; | ||
452 | struct usbnet *dev = netdev_priv(netdev); | ||
453 | struct sockaddr *addr = p; | ||
454 | |||
455 | if (netif_running(netdev)) | ||
456 | return -EBUSY; | ||
457 | |||
458 | if (!is_valid_ether_addr(addr->sa_data)) | ||
459 | return -EINVAL; | ||
460 | |||
461 | memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); | ||
462 | |||
463 | ret = mcs7830_set_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN, | ||
464 | netdev->dev_addr); | ||
465 | |||
466 | if (ret < 0) | ||
467 | return ret; | ||
468 | |||
469 | return 0; | ||
470 | } | ||
471 | |||
445 | static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev) | 472 | static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev) |
446 | { | 473 | { |
447 | struct net_device *net = dev->net; | 474 | struct net_device *net = dev->net; |
@@ -455,6 +482,7 @@ static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev) | |||
455 | net->ethtool_ops = &mcs7830_ethtool_ops; | 482 | net->ethtool_ops = &mcs7830_ethtool_ops; |
456 | net->set_multicast_list = mcs7830_set_multicast; | 483 | net->set_multicast_list = mcs7830_set_multicast; |
457 | mcs7830_set_multicast(net); | 484 | mcs7830_set_multicast(net); |
485 | net->set_mac_address = mcs7830_set_mac_address; | ||
458 | 486 | ||
459 | /* reserve space for the status byte on rx */ | 487 | /* reserve space for the status byte on rx */ |
460 | dev->rx_urb_size = ETH_FRAME_LEN + 1; | 488 | dev->rx_urb_size = ETH_FRAME_LEN + 1; |
@@ -491,7 +519,16 @@ static int mcs7830_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
491 | } | 519 | } |
492 | 520 | ||
493 | static const struct driver_info moschip_info = { | 521 | static const struct driver_info moschip_info = { |
494 | .description = "MOSCHIP 7830 usb-NET adapter", | 522 | .description = "MOSCHIP 7830/7730 usb-NET adapter", |
523 | .bind = mcs7830_bind, | ||
524 | .rx_fixup = mcs7830_rx_fixup, | ||
525 | .flags = FLAG_ETHER, | ||
526 | .in = 1, | ||
527 | .out = 2, | ||
528 | }; | ||
529 | |||
530 | static const struct driver_info sitecom_info = { | ||
531 | .description = "Sitecom LN-30 usb-NET adapter", | ||
495 | .bind = mcs7830_bind, | 532 | .bind = mcs7830_bind, |
496 | .rx_fixup = mcs7830_rx_fixup, | 533 | .rx_fixup = mcs7830_rx_fixup, |
497 | .flags = FLAG_ETHER, | 534 | .flags = FLAG_ETHER, |
@@ -504,6 +541,14 @@ static const struct usb_device_id products[] = { | |||
504 | USB_DEVICE(MCS7830_VENDOR_ID, MCS7830_PRODUCT_ID), | 541 | USB_DEVICE(MCS7830_VENDOR_ID, MCS7830_PRODUCT_ID), |
505 | .driver_info = (unsigned long) &moschip_info, | 542 | .driver_info = (unsigned long) &moschip_info, |
506 | }, | 543 | }, |
544 | { | ||
545 | USB_DEVICE(MCS7830_VENDOR_ID, MCS7730_PRODUCT_ID), | ||
546 | .driver_info = (unsigned long) &moschip_info, | ||
547 | }, | ||
548 | { | ||
549 | USB_DEVICE(SITECOM_VENDOR_ID, LN_030_PRODUCT_ID), | ||
550 | .driver_info = (unsigned long) &sitecom_info, | ||
551 | }, | ||
507 | {}, | 552 | {}, |
508 | }; | 553 | }; |
509 | MODULE_DEVICE_TABLE(usb, products); | 554 | MODULE_DEVICE_TABLE(usb, products); |