• Alan Stern's avatar
    usbfs: Add ioctls for runtime power management · 7794f486
    Alan Stern authored
    It has been requested that usbfs should implement runtime power
    management, instead of forcing the device to remain at full power as
    long as the device file is open.  This patch introduces that new
    feature.
    
    It does so by adding three new usbfs ioctls:
    
    	USBDEVFS_FORBID_SUSPEND: Prevents the device from going into
    	runtime suspend (and causes a resume if the device is already
    	suspended).
    
    	USBDEVFS_ALLOW_SUSPEND: Allows the device to go into runtime
    	suspend.  Some time may elapse before the device actually is
    	suspended, depending on things like the autosuspend delay.
    
    	USBDEVFS_WAIT_FOR_RESUME: Blocks until the call is interrupted
    	by a signal or at least one runtime resume has occurred since
    	the most recent ALLOW_SUSPEND ioctl call (which may mean
    	immediately, even if the device is currently suspended).  In
    	the latter case, the device is prevented from suspending again
    	just as if FORBID_SUSPEND was called before the ioctl returns.
    
    For backward compatibility, when the device file is first opened
    runtime suspends are forbidden.  The userspace program can then allow
    suspends whenever it wants, and either resume the device directly (by
    forbidding suspends again) or wait for a resume from some other source
    (such as a remote wakeup).  URBs submitted to a suspended device will
    fail or will complete with an appropriate error code.
    
    This combination of ioctls is sufficient for user programs to have
    nearly the same degree of control over a device's runtime power
    behavior as kernel drivers do.
    
    Still lacking is documentation for the new ioctls.  I intend to add it
    later, after the existing documentation for the usbfs userspace API is
    straightened out into a reasonable form.
    Suggested-by: default avatarMayuresh Kulkarni <mkulkarni@opensource.cirrus.com>
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    
    Link: https://lore.kernel.org/r/Pine.LNX.4.44L0.1908071013220.1514-100000@iolanthe.rowland.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7794f486
usb.h 6.74 KB