usb: hub: identify the hub-device to usb_hub_reset_devices

When usb_hub_reset_devices is called, it should be passed both an
indicator which hub it should operate on and what port number (local
to that hub) should be reset.

Previously, the usb_hub.c code did not include such context and
always started resets from port number 1, performing multiple
reset-requests for the same devices:

       /*
        * Reset any devices that may be in a bad state when applying
        * the power.  This is a __weak function.  Resetting of the devices
        * should occur in the board file of the device.
        */
       for (i = 0; i < dev->maxchild; i++)
              usb_hub_reset_devices(i + 1);

This adds an additional 'hub' parameter to usb_hub_reset_devices
that provides the context to fully qualify the port-number in.

Existing implementations are changed to accept and ignore the new
parameter.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Tested-by: Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>
This commit is contained in:
Philipp Tomsich 2017-11-22 17:15:17 +01:00 committed by Marek Vasut
parent b3cbcd902d
commit 883946e8e7
3 changed files with 4 additions and 4 deletions

View File

@ -246,7 +246,7 @@ int ehci_hcd_stop(void)
return ret; return ret;
} }
void usb_hub_reset_devices(int port) void usb_hub_reset_devices(struct usb_hub_device *hub, int port)
{ {
/* The LAN9730 needs to be reset after the port power has been set. */ /* The LAN9730 needs to be reset after the port power has been set. */
if (port == 3) { if (port == 3) {

View File

@ -249,7 +249,7 @@ int ehci_hcd_stop(void)
return omap_ehci_hcd_stop(); return omap_ehci_hcd_stop();
} }
void usb_hub_reset_devices(int port) void usb_hub_reset_devices(struct usb_hub_device *hub, int port)
{ {
/* The LAN9730 needs to be reset after the port power has been set. */ /* The LAN9730 needs to be reset after the port power has been set. */
if (port == 3) { if (port == 3) {

View File

@ -57,7 +57,7 @@ struct usb_device_scan {
static LIST_HEAD(usb_scan_list); static LIST_HEAD(usb_scan_list);
__weak void usb_hub_reset_devices(int port) __weak void usb_hub_reset_devices(struct usb_hub_device *hub, int port)
{ {
return; return;
} }
@ -853,7 +853,7 @@ static int usb_hub_configure(struct usb_device *dev)
* should occur in the board file of the device. * should occur in the board file of the device.
*/ */
for (i = 0; i < dev->maxchild; i++) for (i = 0; i < dev->maxchild; i++)
usb_hub_reset_devices(i + 1); usb_hub_reset_devices(hub, i + 1);
/* /*
* Only add the connected USB devices, including potential hubs, * Only add the connected USB devices, including potential hubs,