summaryrefslogtreecommitdiff
path: root/drivers/usb/core/hcd.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-04-17 13:53:00 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-17 13:53:00 -0700
commitdd26bf6d95f050c42cc8f15e750b09851e1fd30b (patch)
tree22d0a6f223297754bd1ca9f4de4e6daf1f0f6430 /drivers/usb/core/hcd.c
parent7217fa9851c99ffe43cee9e3ba4b81a34ce7bac4 (diff)
parentfca10c81d99ff9956179058460dfddc0418f3902 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (22 commits) WUSB: correct format of wusb_chid sysfs file WUSB: fix oops when completing URBs for disconnected devices WUSB: disconnect all devices when stopping a WUSB HCD USB: whci-hcd: check return value of usb_hcd_link_urb_to_ep() USB: whci-hcd: provide a endpoint_reset method USB: add reset endpoint operations USB device codes for Motorola phone. usb-storage: fix mistake in Makefile USB: usb-serial ch341: support for DTR/RTS/CTS Revert USB: usb-serial ch341: support for DTR/RTS/CTS USB: musb: fix possible panic while resuming USB: musb: fix isochronous TXDMA (take 2) USB: musb: sanitize clearing TXCSR DMA bits (take 2) USB: musb: bugfixes for multi-packet TXDMA support USB: musb_host, fix ep0 fifo flushing USB: usb-storage: augment unusual_devs entry for Simple Tech/Datafab USB: musb_host, minor enqueue locking fix (v2) USB: fix oops in cdc-wdm in case of malformed descriptors USB: qcserial: Add extra device IDs USB: option: Add ids for D-Link DWM-652 3.5G modem ...
Diffstat (limited to 'drivers/usb/core/hcd.c')
-rw-r--r--drivers/usb/core/hcd.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 81fa8506825d..42b93da1085d 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1539,6 +1539,32 @@ void usb_hcd_disable_endpoint(struct usb_device *udev,
hcd->driver->endpoint_disable(hcd, ep);
}
+/**
+ * usb_hcd_reset_endpoint - reset host endpoint state
+ * @udev: USB device.
+ * @ep: the endpoint to reset.
+ *
+ * Resets any host endpoint state such as the toggle bit, sequence
+ * number and current window.
+ */
+void usb_hcd_reset_endpoint(struct usb_device *udev,
+ struct usb_host_endpoint *ep)
+{
+ struct usb_hcd *hcd = bus_to_hcd(udev->bus);
+
+ if (hcd->driver->endpoint_reset)
+ hcd->driver->endpoint_reset(hcd, ep);
+ else {
+ int epnum = usb_endpoint_num(&ep->desc);
+ int is_out = usb_endpoint_dir_out(&ep->desc);
+ int is_control = usb_endpoint_xfer_control(&ep->desc);
+
+ usb_settoggle(udev, epnum, is_out, 0);
+ if (is_control)
+ usb_settoggle(udev, epnum, !is_out, 0);
+ }
+}
+
/* Protect against drivers that try to unlink URBs after the device
* is gone, by waiting until all unlinks for @udev are finished.
* Since we don't currently track URBs by device, simply wait until