diff options
Diffstat (limited to 'drivers/usb/net/pegasus.c')
| -rw-r--r-- | drivers/usb/net/pegasus.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c index 2deb4c01539e..7683926a1b6f 100644 --- a/drivers/usb/net/pegasus.c +++ b/drivers/usb/net/pegasus.c | |||
| @@ -318,6 +318,8 @@ static int read_mii_word(pegasus_t * pegasus, __u8 phy, __u8 indx, __u16 * regd) | |||
| 318 | set_register(pegasus, PhyCtrl, (indx | PHY_READ)); | 318 | set_register(pegasus, PhyCtrl, (indx | PHY_READ)); |
| 319 | for (i = 0; i < REG_TIMEOUT; i++) { | 319 | for (i = 0; i < REG_TIMEOUT; i++) { |
| 320 | ret = get_registers(pegasus, PhyCtrl, 1, data); | 320 | ret = get_registers(pegasus, PhyCtrl, 1, data); |
| 321 | if (ret == -ESHUTDOWN) | ||
| 322 | goto fail; | ||
| 321 | if (data[0] & PHY_DONE) | 323 | if (data[0] & PHY_DONE) |
| 322 | break; | 324 | break; |
| 323 | } | 325 | } |
| @@ -326,6 +328,7 @@ static int read_mii_word(pegasus_t * pegasus, __u8 phy, __u8 indx, __u16 * regd) | |||
| 326 | *regd = le16_to_cpu(regdi); | 328 | *regd = le16_to_cpu(regdi); |
| 327 | return ret; | 329 | return ret; |
| 328 | } | 330 | } |
| 331 | fail: | ||
| 329 | if (netif_msg_drv(pegasus)) | 332 | if (netif_msg_drv(pegasus)) |
| 330 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); | 333 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); |
| 331 | 334 | ||
| @@ -354,12 +357,15 @@ static int write_mii_word(pegasus_t * pegasus, __u8 phy, __u8 indx, __u16 regd) | |||
| 354 | set_register(pegasus, PhyCtrl, (indx | PHY_WRITE)); | 357 | set_register(pegasus, PhyCtrl, (indx | PHY_WRITE)); |
| 355 | for (i = 0; i < REG_TIMEOUT; i++) { | 358 | for (i = 0; i < REG_TIMEOUT; i++) { |
| 356 | ret = get_registers(pegasus, PhyCtrl, 1, data); | 359 | ret = get_registers(pegasus, PhyCtrl, 1, data); |
| 360 | if (ret == -ESHUTDOWN) | ||
| 361 | goto fail; | ||
| 357 | if (data[0] & PHY_DONE) | 362 | if (data[0] & PHY_DONE) |
| 358 | break; | 363 | break; |
| 359 | } | 364 | } |
| 360 | if (i < REG_TIMEOUT) | 365 | if (i < REG_TIMEOUT) |
| 361 | return ret; | 366 | return ret; |
| 362 | 367 | ||
| 368 | fail: | ||
| 363 | if (netif_msg_drv(pegasus)) | 369 | if (netif_msg_drv(pegasus)) |
| 364 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); | 370 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); |
| 365 | return -ETIMEDOUT; | 371 | return -ETIMEDOUT; |
| @@ -387,6 +393,8 @@ static int read_eprom_word(pegasus_t * pegasus, __u8 index, __u16 * retdata) | |||
| 387 | ret = get_registers(pegasus, EpromCtrl, 1, &tmp); | 393 | ret = get_registers(pegasus, EpromCtrl, 1, &tmp); |
| 388 | if (tmp & EPROM_DONE) | 394 | if (tmp & EPROM_DONE) |
| 389 | break; | 395 | break; |
| 396 | if (ret == -ESHUTDOWN) | ||
| 397 | goto fail; | ||
| 390 | } | 398 | } |
| 391 | if (i < REG_TIMEOUT) { | 399 | if (i < REG_TIMEOUT) { |
| 392 | ret = get_registers(pegasus, EpromData, 2, &retdatai); | 400 | ret = get_registers(pegasus, EpromData, 2, &retdatai); |
| @@ -394,6 +402,7 @@ static int read_eprom_word(pegasus_t * pegasus, __u8 index, __u16 * retdata) | |||
| 394 | return ret; | 402 | return ret; |
| 395 | } | 403 | } |
| 396 | 404 | ||
| 405 | fail: | ||
| 397 | if (netif_msg_drv(pegasus)) | 406 | if (netif_msg_drv(pegasus)) |
| 398 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); | 407 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); |
| 399 | return -ETIMEDOUT; | 408 | return -ETIMEDOUT; |
| @@ -433,12 +442,15 @@ static int write_eprom_word(pegasus_t * pegasus, __u8 index, __u16 data) | |||
| 433 | 442 | ||
| 434 | for (i = 0; i < REG_TIMEOUT; i++) { | 443 | for (i = 0; i < REG_TIMEOUT; i++) { |
| 435 | ret = get_registers(pegasus, EpromCtrl, 1, &tmp); | 444 | ret = get_registers(pegasus, EpromCtrl, 1, &tmp); |
| 445 | if (ret == -ESHUTDOWN) | ||
| 446 | goto fail; | ||
| 436 | if (tmp & EPROM_DONE) | 447 | if (tmp & EPROM_DONE) |
| 437 | break; | 448 | break; |
| 438 | } | 449 | } |
| 439 | disable_eprom_write(pegasus); | 450 | disable_eprom_write(pegasus); |
| 440 | if (i < REG_TIMEOUT) | 451 | if (i < REG_TIMEOUT) |
| 441 | return ret; | 452 | return ret; |
| 453 | fail: | ||
| 442 | if (netif_msg_drv(pegasus)) | 454 | if (netif_msg_drv(pegasus)) |
| 443 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); | 455 | dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__); |
| 444 | return -ETIMEDOUT; | 456 | return -ETIMEDOUT; |
| @@ -1378,9 +1390,8 @@ static int pegasus_suspend (struct usb_interface *intf, pm_message_t message) | |||
| 1378 | struct pegasus *pegasus = usb_get_intfdata(intf); | 1390 | struct pegasus *pegasus = usb_get_intfdata(intf); |
| 1379 | 1391 | ||
| 1380 | netif_device_detach (pegasus->net); | 1392 | netif_device_detach (pegasus->net); |
| 1393 | cancel_delayed_work(&pegasus->carrier_check); | ||
| 1381 | if (netif_running(pegasus->net)) { | 1394 | if (netif_running(pegasus->net)) { |
| 1382 | cancel_delayed_work(&pegasus->carrier_check); | ||
| 1383 | |||
| 1384 | usb_kill_urb(pegasus->rx_urb); | 1395 | usb_kill_urb(pegasus->rx_urb); |
| 1385 | usb_kill_urb(pegasus->intr_urb); | 1396 | usb_kill_urb(pegasus->intr_urb); |
| 1386 | } | 1397 | } |
| @@ -1400,10 +1411,9 @@ static int pegasus_resume (struct usb_interface *intf) | |||
| 1400 | pegasus->intr_urb->status = 0; | 1411 | pegasus->intr_urb->status = 0; |
| 1401 | pegasus->intr_urb->actual_length = 0; | 1412 | pegasus->intr_urb->actual_length = 0; |
| 1402 | intr_callback(pegasus->intr_urb, NULL); | 1413 | intr_callback(pegasus->intr_urb, NULL); |
| 1403 | |||
| 1404 | queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check, | ||
| 1405 | CARRIER_CHECK_DELAY); | ||
| 1406 | } | 1414 | } |
| 1415 | queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check, | ||
| 1416 | CARRIER_CHECK_DELAY); | ||
| 1407 | return 0; | 1417 | return 0; |
| 1408 | } | 1418 | } |
| 1409 | 1419 | ||
