• Sarah Sharp's avatar
    USB/xhci: Enable remote wakeup for USB3 devices. · 623bef9e
    Sarah Sharp authored
    When the USB 3.0 hub support went in, I disabled selective suspend for
    all external USB 3.0 hubs because they used a different mechanism to
    enable remote wakeup.  In fact, other USB 3.0 devices that could signal
    remote wakeup would have been prevented from going into suspend because
    they would have stalled the SetFeature Device Remote Wakeup request.
    
    This patch adds support for the USB 3.0 way of enabling remote wake up
    (with a SetFeature Function Suspend request), and enables selective
    suspend for all hubs during hub_probe.  It assumes that all USB 3.0 have
    only one "function" as defined by the interface association descriptor,
    which is true of all the USB 3.0 devices I've seen so far.  FIXME if
    that turns out to change later.
    
    After a device signals a remote wakeup, it is supposed to send a Device
    Notification packet to the host controller, signaling which function
    sent the remote wakeup.  The host can then put any other functions back
    into function suspend.  Since we don't have support for function suspend
    (and no devices currently support it), we'll just assume the hub
    function will resume the device properly when it received the port
    status change notification, and simply ignore any device notification
    events from the xHCI host controller.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    623bef9e
hub.c 117 KB