Re: [U-Boot] [PATCH v2 16/80] dm: usb: Refactor port resets

2015-04-07 Thread Simon Glass
On 25 March 2015 at 12:22, Simon Glass s...@chromium.org wrote:
 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 s...@chromium.org
 ---

 Changes in v2: None

  common/usb.c | 40 ++--
  common/usb_hub.c |  4 ++--
  include/usb.h| 18 +-
  3 files changed, 45 insertions(+), 17 deletions(-)

Applied to u-boot-dm/next.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v2 16/80] dm: usb: Refactor port resets

2015-03-25 Thread Simon Glass
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 s...@chromium.org
---

Changes in v2: None

 common/usb.c | 40 ++--
 common/usb_hub.c |  4 ++--
 include/usb.h| 18 +-
 3 files changed, 45 insertions(+), 17 deletions(-)

diff --git a/common/usb.c b/common/usb.c
index 330e6a2..4ab2213 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -871,6 +871,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
@@ -907,9 +927,6 @@ int usb_new_device(struct usb_device *dev)
 * http://sourceforge.net/mailarchive/forum.php?
 * thread_id=5729457forum_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
@@ -917,7 +934,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;
@@ -931,6 +947,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);
if (err  0) {
debug(usb_new_device: usb_get_descriptor() failed\n);
@@ -945,16 +964,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 1;
-   }
-   } 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;
diff --git a/common/usb_hub.c b/common/usb_hub.c
index 7199e25..49fa5a6 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -141,7 +141,7 @@ static inline char *portspeed(int portstatus)
return speed_str;
 }
 
-int hub_port_reset(struct usb_device *dev, int port,
+int legacy_hub_port_reset(struct usb_device *dev, int port,
unsigned short *portstat)
 {
int tries;
@@ -241,7 +241,7 @@ int usb_hub_port_connect_change(struct usb_device *dev, int 
port)
mdelay(200);
 
/* Reset the port */
-   ret = hub_port_reset(dev, port, portstatus);
+   ret = legacy_hub_port_reset(dev, port, portstatus);
if (ret  0) {
printf(cannot reset port %i!?\n, port + 1);
return ret;
diff --git a/include/usb.h b/include/usb.h
index 11ff5ab..badb287 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -700,9 +700,25 @@ bool usb_device_has_child_on_port(struct usb_device 
*parent, int port);
 
 int usb_hub_probe(struct usb_device *dev, int ifnum);
 void usb_hub_reset(void);
-int hub_port_reset(struct usb_device *dev, int port,
+
+/**
+ * legacy_hub_port_reset() - reset a port given its usb_device pointer
+ *
+ * Reset a hub port and see if a device is present on that port, providing
+ * sufficient time for it to show itself. The port status is returned.
+ *
+ * With driver model this moves to hub_port_reset() and is passed a struct
+ * udevice.
+ *
+ * @dev:   USB device to reset
+ * @port:  Port number to reset (note ports are numbered from 0 here)
+ * @portstat:  Returns port status
+ */
+int legacy_hub_port_reset(struct usb_device *dev, int port,
  unsigned short *portstat);
 
+int