• JC Kuo's avatar
    usb: xhci: tegra: Enable ELPG for runtime/system PM · 971ee247
    JC Kuo authored
    This commit implements the complete programming sequence for ELPG
    entry and exit.
    
     1. At ELPG entry, invokes tegra_xusb_padctl_enable_phy_sleepwalk()
        and tegra_xusb_padctl_enable_phy_wake() to configure XUSB PADCTL
        sleepwalk and wake detection circuits to maintain USB lines level
        and respond to wake events (wake-on-connect, wake-on-disconnect,
        device-initiated-wake).
    
     2. At ELPG exit, invokes tegra_xusb_padctl_disable_phy_sleepwalk()
        and tegra_xusb_padctl_disable_phy_wake() to disarm sleepwalk and
        wake detection circuits.
    
    At runtime suspend, XUSB host controller can enter ELPG to reduce
    power consumption. When XUSB PADCTL wake detection circuit detects
    a wake event, an interrupt will be raised. xhci-tegra driver then
    will invoke pm_runtime_resume() for xhci-tegra.
    
    Runtime resume could also be triggered by protocol drivers, this is
    the host-initiated-wake event. At runtime resume, xhci-tegra driver
    brings XUSB host controller out of ELPG to handle the wake events.
    
    The same ELPG enter/exit procedure will be performed for system
    suspend/resume path so USB devices can remain connected across SC7.
    Signed-off-by: default avatarJC Kuo <jckuo@nvidia.com>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    971ee247
xhci-tegra.c 59.1 KB