USB: add reset endpoint operations
Wireless USB endpoint state has a sequence number and a current window and not just a single toggle bit. So allow HCDs to provide a endpoint_reset method and call this or clear the software toggles as required (after a clear halt, set configuration etc.). usb_settoggle() and friends are then HCD internal and are moved into core/hcd.h and all device drivers call usb_reset_endpoint() instead. If the device endpoint state has been reset (with a clear halt) but the host endpoint state has not then subsequent data transfers will not complete. The device will only work again after it is reset or disconnected. Signed-off-by: David Vrabel <david.vrabel@csr.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Dieser Commit ist enthalten in:

committet von
Greg Kroah-Hartman

Ursprung
d45e230bf0
Commit
3444b26afa
@@ -149,14 +149,7 @@ static void usb_ctrl_complete(struct urb *urb)
|
||||
if (ctrl_msg->dr.bRequest == USB_REQ_CLEAR_FEATURE) {
|
||||
/* Special case handling for pipe reset */
|
||||
le16_to_cpus(&ctrl_msg->dr.wIndex);
|
||||
|
||||
/* toggle is reset on clear */
|
||||
usb_settoggle(adapter->usb_dev,
|
||||
ctrl_msg->dr.wIndex & ~USB_DIR_IN,
|
||||
(ctrl_msg->dr.wIndex & USB_DIR_IN) == 0,
|
||||
0);
|
||||
|
||||
|
||||
usb_reset_endpoint(adapter->usb_dev, ctrl_msg->dr.wIndex);
|
||||
}
|
||||
|
||||
if (ctrl_msg->complete)
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren