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>
master
Hans de Goede 10 years ago committed by Simon Glass
parent ad84a42fc5
commit 45b9ea1da2
  1. 3
      common/usb_hub.c
  2. 3
      drivers/usb/host/ehci-hcd.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;
}

@ -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;
}

Loading…
Cancel
Save