aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTilman Schmidt <tilman@imap.cc>2010-09-30 09:35:21 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-01 03:33:35 -0400
commit60798c68bebf6009df9da634e79ebdd8c8227238 (patch)
tree892d763f41e4be9257a97f009c8b70d39b4cf53b
parent1d5a9edcd5f1fe6483afca33294ed0ebab793ebf (diff)
isdn/gigaset: try USB reset for bas_gigaset error recovery
In error_reset(), if sending HD_RESET_INTERRUPT_PIPE to the device fails, try performing an USB reset. Also correct an error in the leading comment. Signed-off-by: Tilman Schmidt <tilman@imap.cc> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/isdn/gigaset/bas-gigaset.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
index e865c5dc0282..7520bc6f3871 100644
--- a/drivers/isdn/gigaset/bas-gigaset.c
+++ b/drivers/isdn/gigaset/bas-gigaset.c
@@ -350,7 +350,7 @@ static inline void error_hangup(struct bc_state *bcs)
350 * reset Gigaset device because of an unrecoverable error 350 * reset Gigaset device because of an unrecoverable error
351 * This function may be called from any context, and takes care of 351 * This function may be called from any context, and takes care of
352 * scheduling the necessary actions for execution outside of interrupt context. 352 * scheduling the necessary actions for execution outside of interrupt context.
353 * cs->lock must not be held. 353 * cs->hw.bas->lock must not be held.
354 * argument: 354 * argument:
355 * controller state structure 355 * controller state structure
356 */ 356 */
@@ -358,7 +358,9 @@ static inline void error_reset(struct cardstate *cs)
358{ 358{
359 /* reset interrupt pipe to recover (ignore errors) */ 359 /* reset interrupt pipe to recover (ignore errors) */
360 update_basstate(cs->hw.bas, BS_RESETTING, 0); 360 update_basstate(cs->hw.bas, BS_RESETTING, 0);
361 req_submit(cs->bcs, HD_RESET_INTERRUPT_PIPE, 0, BAS_TIMEOUT); 361 if (req_submit(cs->bcs, HD_RESET_INTERRUPT_PIPE, 0, BAS_TIMEOUT))
362 /* submission failed, escalate to USB port reset */
363 usb_queue_reset_device(cs->hw.bas->interface);
362} 364}
363 365
364/* check_pending 366/* check_pending