USB: put claimed interfaces in the "suspended" state
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 9 Apr 2010 20:03:43 +0000 (16:03 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 22 Apr 2010 22:18:28 +0000 (15:18 -0700)
commit571dc79d62a163fd043de47d7d39bae58831e81e
tree08a55158da82af74fdb3696815ad2c7610185fd2
parent0e5f231bc16ff9910882fa5b9d64d80e7691cfab
USB: put claimed interfaces in the "suspended" state

This patch (as1370) fixes a bug in the USB runtime power management
code.  When a driver claims an interface, it doesn't expect to need to
call usb_autopm_get_interface() or usb_autopm_put_interface() for
runtime PM to work.  Runtime PM can be controlled by the driver's
primary interface; the additional interfaces it claims shouldn't
interfere.  As things stand, the claimed interfaces will prevent the
device from autosuspending.

To fix this problem, the patch sets interfaces to the suspended state
when they are claimed.

Also, although in theory this shouldn't matter, the patch changes the
suspend code so that interfaces are suspended in reverse order from
detection and resuming.  This is how the PM core works, and we ought
to use the same approach.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Debugged-and-tested-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/driver.c