Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/tg3.c
This commit is contained in:
@@ -460,7 +460,7 @@ static const struct driver_info cdc_info = {
|
||||
.manage_power = cdc_manage_power,
|
||||
};
|
||||
|
||||
static const struct driver_info mbm_info = {
|
||||
static const struct driver_info wwan_info = {
|
||||
.description = "Mobile Broadband Network Device",
|
||||
.flags = FLAG_WWAN,
|
||||
.bind = usbnet_cdc_bind,
|
||||
@@ -471,6 +471,7 @@ static const struct driver_info mbm_info = {
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#define HUAWEI_VENDOR_ID 0x12D1
|
||||
|
||||
static const struct usb_device_id products [] = {
|
||||
/*
|
||||
@@ -587,8 +588,17 @@ static const struct usb_device_id products [] = {
|
||||
}, {
|
||||
USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MDLM,
|
||||
USB_CDC_PROTO_NONE),
|
||||
.driver_info = (unsigned long)&mbm_info,
|
||||
.driver_info = (unsigned long)&wwan_info,
|
||||
|
||||
}, {
|
||||
/* Various Huawei modems with a network port like the UMG1831 */
|
||||
.match_flags = USB_DEVICE_ID_MATCH_VENDOR
|
||||
| USB_DEVICE_ID_MATCH_INT_INFO,
|
||||
.idVendor = HUAWEI_VENDOR_ID,
|
||||
.bInterfaceClass = USB_CLASS_COMM,
|
||||
.bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET,
|
||||
.bInterfaceProtocol = 255,
|
||||
.driver_info = (unsigned long)&wwan_info,
|
||||
},
|
||||
{ }, // END
|
||||
};
|
||||
|
@@ -690,7 +690,7 @@ static int smsc95xx_phy_initialize(struct usbnet *dev)
|
||||
msleep(10);
|
||||
bmcr = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR);
|
||||
timeout++;
|
||||
} while ((bmcr & MII_BMCR) && (timeout < 100));
|
||||
} while ((bmcr & BMCR_RESET) && (timeout < 100));
|
||||
|
||||
if (timeout >= 100) {
|
||||
netdev_warn(dev->net, "timeout on PHY Reset");
|
||||
|
@@ -645,6 +645,7 @@ int usbnet_stop (struct net_device *net)
|
||||
struct driver_info *info = dev->driver_info;
|
||||
int retval;
|
||||
|
||||
clear_bit(EVENT_DEV_OPEN, &dev->flags);
|
||||
netif_stop_queue (net);
|
||||
|
||||
netif_info(dev, ifdown, dev->net,
|
||||
@@ -736,6 +737,7 @@ int usbnet_open (struct net_device *net)
|
||||
}
|
||||
}
|
||||
|
||||
set_bit(EVENT_DEV_OPEN, &dev->flags);
|
||||
netif_start_queue (net);
|
||||
netif_info(dev, ifup, dev->net,
|
||||
"open: enable queueing (rx %d, tx %d) mtu %d %s framing\n",
|
||||
@@ -1259,6 +1261,9 @@ void usbnet_disconnect (struct usb_interface *intf)
|
||||
if (dev->driver_info->unbind)
|
||||
dev->driver_info->unbind (dev, intf);
|
||||
|
||||
usb_kill_urb(dev->interrupt);
|
||||
usb_free_urb(dev->interrupt);
|
||||
|
||||
free_netdev(net);
|
||||
usb_put_dev (xdev);
|
||||
}
|
||||
@@ -1498,6 +1503,10 @@ int usbnet_resume (struct usb_interface *intf)
|
||||
int retval;
|
||||
|
||||
if (!--dev->suspend_count) {
|
||||
/* resume interrupt URBs */
|
||||
if (dev->interrupt && test_bit(EVENT_DEV_OPEN, &dev->flags))
|
||||
usb_submit_urb(dev->interrupt, GFP_NOIO);
|
||||
|
||||
spin_lock_irq(&dev->txq.lock);
|
||||
while ((res = usb_get_from_anchor(&dev->deferred))) {
|
||||
|
||||
@@ -1516,9 +1525,12 @@ int usbnet_resume (struct usb_interface *intf)
|
||||
smp_mb();
|
||||
clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
|
||||
spin_unlock_irq(&dev->txq.lock);
|
||||
if (!(dev->txq.qlen >= TX_QLEN(dev)))
|
||||
netif_start_queue(dev->net);
|
||||
tasklet_schedule (&dev->bh);
|
||||
|
||||
if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
|
||||
if (!(dev->txq.qlen >= TX_QLEN(dev)))
|
||||
netif_start_queue(dev->net);
|
||||
tasklet_schedule (&dev->bh);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user