• Lan Tianyu's avatar
    usb: add usb port auto power off mechanism · ad493e5e
    Lan Tianyu authored
    This patch is to add usb port auto power off mechanism.
    When usb device is suspending, usb core will suspend usb port and
    usb port runtime pm callback will clear PORT_POWER feature to
    power off port if all conditions were met. These conditions are
    remote wakeup disable, pm qos NO_POWER_OFF flag clear and persist
    enable. When it resumes, power on port again.
    
    Add did_runtime_put in the struct usb_port to ensure
    pm_runtime_get/put(portdev) to be called pairedly.  Set did_runtime_put
    to true when call pm_runtime_put(portdev) during suspending. The
    pm_runtime_get(portdev) only will be called when did_runtime_put
    is set to true during resuming. Set did_runtime_put to false after
    calling pm_runtime_get(portdev).
    
    Make clear_port_feature() and hdev_to_hub() as global symbol.
    Rename clear_port_feature() to usb_clear_port_feature() and
    hdev_to_hub() to usb_hub_to_struct_hub().
    
    Extend hub_port_debounce() with the fuction of debouncing to
    be connected. Add two wraps: hub_port_debounce_be_connected()
    and hub_port_debouce_be_stable().
    
    Increase HUB_DEBOUNCE_TIMEOUT to 2000 because some usb ssds
    needs around 1.5 or more to make the hub port status to be
    connected steadily after being powered off and powered on.
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ad493e5e
port.c 4.83 KB