]> git.baikalelectronics.ru Git - kernel.git/commit
USB: don't send Set-Interface after reset
authorAlan Stern <stern@rowland.harvard.edu>
Thu, 26 Feb 2009 15:21:02 +0000 (10:21 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 24 Mar 2009 23:20:38 +0000 (16:20 -0700)
commit7c56ca8fd0273e2d15f7a5464bc8bdfa2ef259fb
treeb86045c34fab6ff5146dd3ca6be70d54514a1359
parent156b951b1a5eabf740594a7302645fe06dcfaac3
USB: don't send Set-Interface after reset

This patch (as1221) changes the way usbcore reinitializes a device
following a reset or a reset-resume.  Currently we call
usb_set_interface() for every interface in the active configuration;
this is to put the interface into the same altsetting as before the
reset and to make sure that the host's endpoint state matches the
device's endpoint state.

However, sending a Set-Interface request is a waste of time if an
interface was already in altsetting 0 before the reset, since it is
certainly in altsetting 0 afterward.  In addition, many devices can't
handle Set-Interface requests -- they crash when they receive them.

So instead, the patch adds code to check each interface.  If the
interface wasn't in altsetting 0 before the reset, we go head with the
Set-Interface request as before.  But if it was then we skip sending
the Set-Interface request, and we clear out the host-side endpoint
state by calling usb_disable_interface() followed by
usb_enable_interface().

The patch also adds a couple of new comments to explain what's going
on.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/hub.c