aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wimax/i2400m/usb-fw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wimax/i2400m/usb-fw.c')
-rw-r--r--drivers/net/wimax/i2400m/usb-fw.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/wimax/i2400m/usb-fw.c b/drivers/net/wimax/i2400m/usb-fw.c
index 8ec8b6d56a1..d8f6ce29eff 100644
--- a/drivers/net/wimax/i2400m/usb-fw.c
+++ b/drivers/net/wimax/i2400m/usb-fw.c
@@ -113,6 +113,28 @@ retry:
113 } 113 }
114 result = len; 114 result = len;
115 break; 115 break;
116 case -EPIPE:
117 /*
118 * Stall -- maybe the device is choking with our
119 * requests. Clear it and give it some time. If they
120 * happen to often, it might be another symptom, so we
121 * reset.
122 *
123 * No error handling for usb_clear_halt(0; if it
124 * works, the retry works; if it fails, this switch
125 * does the error handling for us.
126 */
127 if (edc_inc(&i2400mu->urb_edc,
128 10 * EDC_MAX_ERRORS, EDC_ERROR_TIMEFRAME)) {
129 dev_err(dev, "BM-CMD: too many stalls in "
130 "URB; resetting device\n");
131 usb_queue_reset_device(i2400mu->usb_iface);
132 /* fallthrough */
133 } else {
134 usb_clear_halt(i2400mu->usb_dev, pipe);
135 msleep(10); /* give the device some time */
136 goto retry;
137 }
116 case -EINVAL: /* while removing driver */ 138 case -EINVAL: /* while removing driver */
117 case -ENODEV: /* dev disconnect ... */ 139 case -ENODEV: /* dev disconnect ... */
118 case -ENOENT: /* just ignore it */ 140 case -ENOENT: /* just ignore it */