From 883946e8e7c5dacb5e12f18703e20d49a4886f0e Mon Sep 17 00:00:00 2001 From: Philipp Tomsich Date: Wed, 22 Nov 2017 17:15:17 +0100 Subject: [PATCH] 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 Tested-by: Jakob Unterwurzacher --- board/compulab/cm_t54/cm_t54.c | 2 +- board/ti/omap5_uevm/evm.c | 2 +- common/usb_hub.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/board/compulab/cm_t54/cm_t54.c b/board/compulab/cm_t54/cm_t54.c index 31730a4d1ca..3e6235a3b7e 100644 --- a/board/compulab/cm_t54/cm_t54.c +++ b/board/compulab/cm_t54/cm_t54.c @@ -246,7 +246,7 @@ int ehci_hcd_stop(void) 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. */ if (port == 3) { diff --git a/board/ti/omap5_uevm/evm.c b/board/ti/omap5_uevm/evm.c index 4b25cc2d7c3..67242f5cc83 100644 --- a/board/ti/omap5_uevm/evm.c +++ b/board/ti/omap5_uevm/evm.c @@ -249,7 +249,7 @@ int ehci_hcd_stop(void) 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. */ if (port == 3) { diff --git a/common/usb_hub.c b/common/usb_hub.c index 325d16dfc86..024dadb2774 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -57,7 +57,7 @@ struct usb_device_scan { 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; } @@ -853,7 +853,7 @@ static int usb_hub_configure(struct usb_device *dev) * should occur in the board file of the device. */ 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,