diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2009-11-04 10:29:52 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-10 23:54:40 -0500 |
commit | 37e8273cd30592d3a82bcb70cbb1bdc4eaeb6b71 (patch) | |
tree | 079b4bc5a6450e06b6310c083fcb4ab5ee543452 /drivers/net/usb | |
parent | 8cbd9623da7e7a99c6bd0f0b7d21d17c233c6abb (diff) |
usbnet: Set link down initially for drivers that update link state
Some usbnet drivers update link state while others do not due to
hardware limitations. Add a flag to distinguish those that do, and
set the link down initially for their devices.
This is intended to fix this bug: http://bugs.debian.org/444043
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/usb')
-rw-r--r-- | drivers/net/usb/asix.c | 12 | ||||
-rw-r--r-- | drivers/net/usb/cdc_ether.c | 2 | ||||
-rw-r--r-- | drivers/net/usb/dm9601.c | 2 | ||||
-rw-r--r-- | drivers/net/usb/usbnet.c | 4 |
4 files changed, 11 insertions, 9 deletions
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index 6ce7f775bb74..1bef39a60a62 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c | |||
@@ -1327,7 +1327,7 @@ static const struct driver_info ax8817x_info = { | |||
1327 | .status = asix_status, | 1327 | .status = asix_status, |
1328 | .link_reset = ax88172_link_reset, | 1328 | .link_reset = ax88172_link_reset, |
1329 | .reset = ax88172_link_reset, | 1329 | .reset = ax88172_link_reset, |
1330 | .flags = FLAG_ETHER, | 1330 | .flags = FLAG_ETHER | FLAG_LINK_INTR, |
1331 | .data = 0x00130103, | 1331 | .data = 0x00130103, |
1332 | }; | 1332 | }; |
1333 | 1333 | ||
@@ -1337,7 +1337,7 @@ static const struct driver_info dlink_dub_e100_info = { | |||
1337 | .status = asix_status, | 1337 | .status = asix_status, |
1338 | .link_reset = ax88172_link_reset, | 1338 | .link_reset = ax88172_link_reset, |
1339 | .reset = ax88172_link_reset, | 1339 | .reset = ax88172_link_reset, |
1340 | .flags = FLAG_ETHER, | 1340 | .flags = FLAG_ETHER | FLAG_LINK_INTR, |
1341 | .data = 0x009f9d9f, | 1341 | .data = 0x009f9d9f, |
1342 | }; | 1342 | }; |
1343 | 1343 | ||
@@ -1347,7 +1347,7 @@ static const struct driver_info netgear_fa120_info = { | |||
1347 | .status = asix_status, | 1347 | .status = asix_status, |
1348 | .link_reset = ax88172_link_reset, | 1348 | .link_reset = ax88172_link_reset, |
1349 | .reset = ax88172_link_reset, | 1349 | .reset = ax88172_link_reset, |
1350 | .flags = FLAG_ETHER, | 1350 | .flags = FLAG_ETHER | FLAG_LINK_INTR, |
1351 | .data = 0x00130103, | 1351 | .data = 0x00130103, |
1352 | }; | 1352 | }; |
1353 | 1353 | ||
@@ -1357,7 +1357,7 @@ static const struct driver_info hawking_uf200_info = { | |||
1357 | .status = asix_status, | 1357 | .status = asix_status, |
1358 | .link_reset = ax88172_link_reset, | 1358 | .link_reset = ax88172_link_reset, |
1359 | .reset = ax88172_link_reset, | 1359 | .reset = ax88172_link_reset, |
1360 | .flags = FLAG_ETHER, | 1360 | .flags = FLAG_ETHER | FLAG_LINK_INTR, |
1361 | .data = 0x001f1d1f, | 1361 | .data = 0x001f1d1f, |
1362 | }; | 1362 | }; |
1363 | 1363 | ||
@@ -1367,7 +1367,7 @@ static const struct driver_info ax88772_info = { | |||
1367 | .status = asix_status, | 1367 | .status = asix_status, |
1368 | .link_reset = ax88772_link_reset, | 1368 | .link_reset = ax88772_link_reset, |
1369 | .reset = ax88772_link_reset, | 1369 | .reset = ax88772_link_reset, |
1370 | .flags = FLAG_ETHER | FLAG_FRAMING_AX, | 1370 | .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_LINK_INTR, |
1371 | .rx_fixup = asix_rx_fixup, | 1371 | .rx_fixup = asix_rx_fixup, |
1372 | .tx_fixup = asix_tx_fixup, | 1372 | .tx_fixup = asix_tx_fixup, |
1373 | }; | 1373 | }; |
@@ -1378,7 +1378,7 @@ static const struct driver_info ax88178_info = { | |||
1378 | .status = asix_status, | 1378 | .status = asix_status, |
1379 | .link_reset = ax88178_link_reset, | 1379 | .link_reset = ax88178_link_reset, |
1380 | .reset = ax88178_link_reset, | 1380 | .reset = ax88178_link_reset, |
1381 | .flags = FLAG_ETHER | FLAG_FRAMING_AX, | 1381 | .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_LINK_INTR, |
1382 | .rx_fixup = asix_rx_fixup, | 1382 | .rx_fixup = asix_rx_fixup, |
1383 | .tx_fixup = asix_tx_fixup, | 1383 | .tx_fixup = asix_tx_fixup, |
1384 | }; | 1384 | }; |
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 71d7ff3de99f..7ec24c9b2535 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c | |||
@@ -413,7 +413,7 @@ static int cdc_bind(struct usbnet *dev, struct usb_interface *intf) | |||
413 | 413 | ||
414 | static const struct driver_info cdc_info = { | 414 | static const struct driver_info cdc_info = { |
415 | .description = "CDC Ethernet Device", | 415 | .description = "CDC Ethernet Device", |
416 | .flags = FLAG_ETHER, | 416 | .flags = FLAG_ETHER | FLAG_LINK_INTR, |
417 | // .check_connect = cdc_check_connect, | 417 | // .check_connect = cdc_check_connect, |
418 | .bind = cdc_bind, | 418 | .bind = cdc_bind, |
419 | .unbind = usbnet_cdc_unbind, | 419 | .unbind = usbnet_cdc_unbind, |
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c index a2b30a10064f..3d406f9b2f29 100644 --- a/drivers/net/usb/dm9601.c +++ b/drivers/net/usb/dm9601.c | |||
@@ -611,7 +611,7 @@ static int dm9601_link_reset(struct usbnet *dev) | |||
611 | 611 | ||
612 | static const struct driver_info dm9601_info = { | 612 | static const struct driver_info dm9601_info = { |
613 | .description = "Davicom DM9601 USB Ethernet", | 613 | .description = "Davicom DM9601 USB Ethernet", |
614 | .flags = FLAG_ETHER, | 614 | .flags = FLAG_ETHER | FLAG_LINK_INTR, |
615 | .bind = dm9601_bind, | 615 | .bind = dm9601_bind, |
616 | .rx_fixup = dm9601_rx_fixup, | 616 | .rx_fixup = dm9601_rx_fixup, |
617 | .tx_fixup = dm9601_tx_fixup, | 617 | .tx_fixup = dm9601_tx_fixup, |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 378da8c938fe..04f3f289e87c 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
@@ -1352,9 +1352,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) | |||
1352 | // ok, it's ready to go. | 1352 | // ok, it's ready to go. |
1353 | usb_set_intfdata (udev, dev); | 1353 | usb_set_intfdata (udev, dev); |
1354 | 1354 | ||
1355 | // start as if the link is up | ||
1356 | netif_device_attach (net); | 1355 | netif_device_attach (net); |
1357 | 1356 | ||
1357 | if (dev->driver_info->flags & FLAG_LINK_INTR) | ||
1358 | netif_carrier_off(net); | ||
1359 | |||
1358 | return 0; | 1360 | return 0; |
1359 | 1361 | ||
1360 | out3: | 1362 | out3: |