diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2009-01-15 17:03:33 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@kvm.kroah.org> | 2009-01-27 16:15:32 -0800 |
commit | ddeac4e75f2527a340f9dc655bde49bb2429b39b (patch) | |
tree | 2bde5ee81d30cb6010de9262f97ba07b9cb8969b /drivers/usb/core/driver.c | |
parent | 95bec45d2051227ef037f1080d7cef003b88d852 (diff) | |
download | kernel_samsung_smdk4412-ddeac4e75f2527a340f9dc655bde49bb2429b39b.zip kernel_samsung_smdk4412-ddeac4e75f2527a340f9dc655bde49bb2429b39b.tar.gz kernel_samsung_smdk4412-ddeac4e75f2527a340f9dc655bde49bb2429b39b.tar.bz2 |
USB: fix toggle mismatch in disable_endpoint paths
This patch (as1200) finishes some fixes that were left incomplete by
an earlier patch.
Although nobody has addressed this issue in the past, it turns out
that we need to distinguish between two different modes of disabling
and enabling endpoints. In one mode only the data structures in
usbcore are affected, and in the other mode the host controller and
device hardware states are affected as well.
The earlier patch added an extra argument to the routines in the
enable_endpoint pathways to reflect this difference. This patch adds
corresponding arguments to the disable_endpoint pathways. Without
this change, the endpoint toggle state can get out of sync between
the host and the device. The exact mechanism depends on the details
of the host controller (whether or not it stores its own copy of the
toggle values).
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-by: Dan Streetman <ddstreet@ieee.org>
Tested-by: Dan Streetman <ddstreet@ieee.org>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/driver.c')
-rw-r--r-- | drivers/usb/core/driver.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 9876055..d0a21a5 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -284,7 +284,7 @@ static int usb_unbind_interface(struct device *dev) * supports "soft" unbinding. */ if (!driver->soft_unbind) - usb_disable_interface(udev, intf); + usb_disable_interface(udev, intf, false); driver->disconnect(intf); usb_cancel_queued_reset(intf); |