On 18/9/19 12:53 am, Mathias Nyman wrote:
> If host/hub initiated link pm is prevented by a driver flag we still must
> ensure that periodic endpoints have longer service intervals than link pm
> exit latency before allowing device initiated link pm.
>
> Fix this by continue walking and checking endpoint service interval if
> xhci_get_timeout_no_hub_lpm() returns anything else than USB3_LPM_DISABLED
>
> While at it fix the split line error message
>
> Signed-off-by: Mathias Nyman <mathias.ny...@linux.intel.com>
I tested by forcing the driver->disable_hub_initiated_lpm check and
confirm a) Other USB devices still work as I expect them to b) without
this patch, I'm back to only 1 working Oculus Rift Sensor. With it, I
can capture 3 simultaneously.
Tested-by: Jan Schmidt <j...@centricular.com>
- Jan
> ---
> drivers/usb/host/xhci.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index 447c29bbad48..8892dfbb2af7 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -4809,10 +4809,12 @@ static u16 xhci_calculate_lpm_timeout(struct usb_hcd
> *hcd,
> if (intf->dev.driver) {
> driver = to_usb_driver(intf->dev.driver);
> if (driver && driver->disable_hub_initiated_lpm) {
> - dev_dbg(&udev->dev, "Hub-initiated %s disabled "
> - "at request of driver %s\n",
> - state_name, driver->name);
> - return xhci_get_timeout_no_hub_lpm(udev, state);
> + dev_dbg(&udev->dev, "Hub-initiated %s disabled
> at request of driver %s\n",
> + state_name, driver->name);
> + timeout = xhci_get_timeout_no_hub_lpm(udev,
> + state);
> + if (timeout == USB3_LPM_DISABLED)
> + return timeout;
> }
> }
>
>
--
Jan Schmidt, Centricular Ltd - https://centricular.com/