summaryrefslogtreecommitdiffstats
path: root/common/usb.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-03-25 12:22:04 -0600
committerSimon Glass <sjg@chromium.org>2015-04-18 11:11:20 -0600
commit862e75c0dbb578ec2e1f374794007048f3dd29c6 (patch)
tree0358873bc0ccfe7219a2aa526f5613d530a335f9 /common/usb.c
parent53d8aa0f612325abb5754b8cbf33170e89f08b1e (diff)
downloadblackbird-obmc-uboot-862e75c0dbb578ec2e1f374794007048f3dd29c6.tar.gz
blackbird-obmc-uboot-862e75c0dbb578ec2e1f374794007048f3dd29c6.zip
dm: usb: Refactor port resets
Move the port reset code into its own function. Rename usb_hub_reset() to indicate that is is now a legacy function. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Marek Vasut <marex@denx.de>
Diffstat (limited to 'common/usb.c')
-rw-r--r--common/usb.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/common/usb.c b/common/usb.c
index df4e172ff8..8a3bb114ec 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -877,6 +877,26 @@ __weak int usb_alloc_device(struct usb_device *udev)
{
return 0;
}
+
+int usb_legacy_port_reset(struct usb_device *hub, int portnr)
+{
+ if (hub) {
+ unsigned short portstatus;
+ int err;
+
+ /* reset the port for the second time */
+ err = legacy_hub_port_reset(hub, portnr - 1, &portstatus);
+ if (err < 0) {
+ printf("\n Couldn't reset port %i\n", portnr);
+ return err;
+ }
+ } else {
+ usb_reset_root_port();
+ }
+
+ return 0;
+}
+
/*
* By the time we get here, the device has gotten a new device ID
* and is in the default state. We need to identify the thing and
@@ -913,9 +933,6 @@ int usb_new_device(struct usb_device *dev)
* http://sourceforge.net/mailarchive/forum.php?
* thread_id=5729457&forum_id=5398
*/
- __maybe_unused struct usb_device_descriptor *desc;
- struct usb_device *parent = dev->parent;
- unsigned short portstatus;
/*
* send 64-byte GET-DEVICE-DESCRIPTOR request. Since the descriptor is
@@ -923,7 +940,6 @@ int usb_new_device(struct usb_device *dev)
* the maxpacket size is 8 or 16 the device may be waiting to transmit
* some more, or keeps on retransmitting the 8 byte header. */
- desc = (struct usb_device_descriptor *)tmpbuf;
dev->descriptor.bMaxPacketSize0 = 64; /* Start off at 64 bytes */
/* Default to 64 byte max packet size */
dev->maxpacketsize = PACKET_SIZE_64;
@@ -937,6 +953,9 @@ int usb_new_device(struct usb_device *dev)
* of that is done for XHCI unlike EHCI.
*/
#ifndef CONFIG_USB_XHCI
+ struct usb_device_descriptor *desc;
+
+ desc = (struct usb_device_descriptor *)tmpbuf;
err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, 64);
/*
* Validate we've received only at least 8 bytes, not that we've
@@ -966,16 +985,9 @@ int usb_new_device(struct usb_device *dev)
dev->descriptor.bDeviceClass = desc->bDeviceClass;
#endif
- if (parent) {
- /* reset the port for the second time */
- err = hub_port_reset(dev->parent, dev->portnr - 1, &portstatus);
- if (err < 0) {
- printf("\n Couldn't reset port %i\n", dev->portnr);
- return -EIO;
- }
- } else {
- usb_reset_root_port();
- }
+ err = usb_legacy_port_reset(dev->parent, dev->portnr);
+ if (err)
+ return err;
dev->epmaxpacketin[0] = dev->descriptor.bMaxPacketSize0;
dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0;
OpenPOWER on IntegriCloud