Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: Allow drivers to disable hub-initiated LPM.

USB 3.0 Link Power Management (LPM) is designed to allow individual
links in the bus to go into lower power states. There are two ways a
link can enter a lower power state:

1. Device-initiated LPM. When a USB device decides it can go into a
lower power link state, it sends a message to the parent hub, telling it
to go into either U1 or U2. Device-initiated LPM is good for devices
that send data to the host, like communications devices.

2. Hub-initiated LPM. After the link has been idle for a specific
amount of time, the parent hub will request that the child go into a
lower power state. The child can refuse that request. For example, a
USB modem may want to refuse the LPM request if it is in the middle of
receiving a text message. Hub-initiated LPM is good for devices where
only the host initiates the data transfer, like USB printers or USB mass
storage devices.

Links will be automatically placed into higher power states by the USB
hubs and roothubs whenever the host starts a USB transmission.

Introduce a new usb_driver flag, disable_hub_initiated_lpm, that allows
drivers to disable hub-initiated LPM.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: Marcel Holtmann <marcel@holtmann.org>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: Johan Hedberg <johan.hedberg@gmail.com>
Cc: Hansjoerg Lipp <hjlipp@web.de>
Cc: Tilman Schmidt <tilman@imap.cc>
Cc: Karsten Keil <isdn@linux-pingi.de>
Cc: Oliver Neukum <oliver@neukum.name>
Cc: Peter Korsgaard <jacmet@sunsite.dk>
Cc: Jan Dumon <j.dumon@option.com>
Cc: Petko Manolov <petkan@users.sourceforge.net>
Cc: Steve Glendinning <steve.glendinning@smsc.com>
Cc: "John W. Linville" <linville@tuxdriver.com>
Cc: Kalle Valo <kvalo@qca.qualcomm.com>
Cc: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
Cc: Jouni Malinen <jouni@qca.qualcomm.com>
Cc: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
Cc: Senthil Balasubramanian <senthilb@qca.qualcomm.com>
Cc: Christian Lamparter <chunkeey@googlemail.com>
Cc: Brett Rudley <brudley@broadcom.com>
Cc: Roland Vossen <rvossen@broadcom.com>
Cc: Arend van Spriel <arend@broadcom.com>
Cc: "Franky (Zhenhui) Lin" <frankyl@broadcom.com>
Cc: Kan Yan <kanyan@broadcom.com>
Cc: Dan Williams <dcbw@redhat.com>
Cc: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Cc: Ivo van Doorn <IvDoorn@gmail.com>
Cc: Gertjan van Wingerde <gwingerde@gmail.com>
Cc: Helmut Schaa <helmut.schaa@googlemail.com>
Cc: Herton Ronaldo Krzesinski <herton@canonical.com>
Cc: Hin-Tak Leung <htl10@users.sourceforge.net>
Cc: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Chaoming Li <chaoming_li@realsil.com.cn>
Cc: Daniel Drake <dsd@gentoo.org>
Cc: Ulrich Kunitz <kune@deine-taler.de>
Cc: linux-bluetooth@vger.kernel.org
Cc: gigaset307x-common@lists.sourceforge.net
Cc: netdev@vger.kernel.org
Cc: linux-usb@vger.kernel.org
Cc: linux-wireless@vger.kernel.org
Cc: ath9k-devel@lists.ath9k.org
Cc: libertas-dev@lists.infradead.org
Cc: users@rt2x00.serialmonkey.com

+4
+4
include/linux/usb.h
··· 879 879 * for interfaces bound to this driver. 880 880 * @soft_unbind: if set to 1, the USB core will not kill URBs and disable 881 881 * endpoints before calling the driver's disconnect method. 882 + * @disable_hub_initiated_lpm: if set to 0, the USB core will not allow hubs 883 + * to initiate lower power link state transitions when an idle timeout 884 + * occurs. Device-initiated USB 3.0 link PM will still be allowed. 882 885 * 883 886 * USB interface drivers must provide a name, probe() and disconnect() 884 887 * methods, and an id_table. Other driver fields are optional. ··· 922 919 struct usbdrv_wrap drvwrap; 923 920 unsigned int no_dynamic_id:1; 924 921 unsigned int supports_autosuspend:1; 922 + unsigned int disable_hub_initiated_lpm:1; 925 923 unsigned int soft_unbind:1; 926 924 }; 927 925 #define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)