diff options
author | Hans de Goede <hdegoede@redhat.com> | 2015-05-10 14:10:16 +0200 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-05-14 18:49:31 -0600 |
commit | 45b9ea1da2f9e5110ced2fe2808aee224183aa54 (patch) | |
tree | 80cd993c0f86e575fbfd22276861a9435211d8b8 | |
parent | ad84a42fc5143ef66a75550d7465b86cbc787f25 (diff) | |
download | u-boot-imx-45b9ea1da2f9e5110ced2fe2808aee224183aa54.zip u-boot-imx-45b9ea1da2f9e5110ced2fe2808aee224183aa54.tar.gz u-boot-imx-45b9ea1da2f9e5110ced2fe2808aee224183aa54.tar.bz2 |
usb: Stop reset procedure when a dev is handed over to a companion hcd
Short circuit the retry loop in legacy_hub_port_reset() by returning an
error from usb_control_msg() when a device was handed over to a companion
by the ehci code. This avoids trying to reset low / fullspeed devices 5
times needlessly. Also do not print an error when a device has been handed
over.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r-- | common/usb_hub.c | 3 | ||||
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/common/usb_hub.c b/common/usb_hub.c index 7aac220..af39c76 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -271,7 +271,8 @@ int usb_hub_port_connect_change(struct usb_device *dev, int port) /* Reset the port */ ret = legacy_hub_port_reset(dev, port, &portstatus); if (ret < 0) { - printf("cannot reset port %i!?\n", port + 1); + if (ret != -ENXIO) + printf("cannot reset port %i!?\n", port + 1); return ret; } diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index ce760d0..e4c462f 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -875,7 +875,7 @@ static int ehci_submit_root(struct usb_device *dev, unsigned long pipe, port - 1); reg |= EHCI_PS_PO; ehci_writel(status_reg, reg); - break; + return -ENXIO; } else { int ret; @@ -905,6 +905,7 @@ static int ehci_submit_root(struct usb_device *dev, unsigned long pipe, reg &= ~EHCI_PS_CLEAR; reg |= EHCI_PS_PO; ehci_writel(status_reg, reg); + return -ENXIO; } else { ctrl->portreset |= 1 << port; } |