From 9a80e714350a959caadfd6e2405cd1f7e8ea86d3 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Sun, 3 Apr 2016 09:18:53 +0200 Subject: usb: kbd: Do not deregister usbkbd twice when using dm The dm usb_kbd_remove function() will deregister the usb keyboard for us on a "usb reset" / "usb stop" so there is no need to manually call usb_kbd_deregister() in the dm case. This commit removes usb_kbd_deregister() in the dm case fixing the following "usb reset" errors: usb_kbd_remove: warning, ret=-6 device_remove: Device 'usb_kbd' failed to remove, but children are gone Signed-off-by: Hans de Goede --- cmd/usb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cmd/usb.c') diff --git a/cmd/usb.c b/cmd/usb.c index 9ed5dc61ea..97dd6f0099 100644 --- a/cmd/usb.c +++ b/cmd/usb.c @@ -541,7 +541,7 @@ static int do_usbboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) static int do_usb_stop_keyboard(int force) { -#ifdef CONFIG_USB_KEYBOARD +#if !defined CONFIG_DM_USB && defined CONFIG_USB_KEYBOARD if (usb_kbd_deregister(force) != 0) { printf("USB not stopped: usbkbd still using USB\n"); return 1; -- cgit v1.2.3 From 192eab9357473e09218e0a4448b220d691d9d886 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Sun, 3 Apr 2016 00:04:39 +0200 Subject: dm: usb: Do not reprobe usb hosts on "usb tree" command Some usb hosts may have failed to probe on "usb start", i.e. an otg host without an otg-host cable plugged in. "usb tree" would cause the probe method of these hosts to get called again, something which should only happen on "usb reset". This commit fixes this. Signed-off-by: Hans de Goede --- cmd/usb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'cmd/usb.c') diff --git a/cmd/usb.c b/cmd/usb.c index 97dd6f0099..f1a7debdf3 100644 --- a/cmd/usb.c +++ b/cmd/usb.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -442,12 +443,15 @@ void usb_show_tree(void) #ifdef CONFIG_DM_USB struct udevice *bus; - for (uclass_first_device(UCLASS_USB, &bus); + for (uclass_find_first_device(UCLASS_USB, &bus); bus; - uclass_next_device(&bus)) { + uclass_find_next_device(&bus)) { struct usb_device *udev; struct udevice *dev; + if (!device_active(bus)) + continue; + device_find_first_child(bus, &dev); if (dev && device_active(dev)) { udev = dev_get_parent_priv(dev); -- cgit v1.2.3