--- a/drivers/input/joystick/iforce/iforce-usb.c +++ b/drivers/input/joystick/iforce/iforce-usb.c @@ -32,6 +32,7 @@ static void __iforce_usb_xmit(struct ifo if (iforce->xmit.head == iforce->xmit.tail) { clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); spin_unlock_irqrestore(&iforce->xmit_lock, flags); + wake_up(&iforce->wait); return; } @@ -59,6 +60,7 @@ static void __iforce_usb_xmit(struct ifo if ( (n=usb_submit_urb(iforce_usb->out, GFP_ATOMIC)) ) { clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); + wake_up(&iforce->wait); dev_warn(&iforce_usb->intf->dev, "usb_submit_urb failed %d\n", n); } @@ -178,10 +180,8 @@ static void iforce_usb_out(struct urb *u clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); dev_dbg(&iforce_usb->intf->dev, "urb->status %d, exiting\n", urb->status); - return; - } - - __iforce_usb_xmit(iforce); + } else + __iforce_usb_xmit(iforce); wake_up(&iforce->wait); }