diff options
author | Hans de Goede <hdegoede@redhat.com> | 2015-06-17 19:33:50 (GMT) |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-07-21 23:39:35 (GMT) |
commit | c27b329054a42bcfb19d3b192dc44e1182fea264 (patch) | |
tree | cd9b489eeebad9eff7628a6c8fc3a55da70c0beb /common | |
parent | bb52b367f6ca4a3a918e77737f4ff6a1089912d9 (diff) | |
download | u-boot-fsl-qoriq-c27b329054a42bcfb19d3b192dc44e1182fea264.tar.xz |
dm: usb: Fix "usb tree" output
last_child was abused by the old usb code to first store 1 if the
usb_device was not the root of the usb tree, and then later on re-used
to store whether or not the usb_device is actually the last child.
The dm-usb code was always setting it to actually reflect the last-child
status which is wrong for the last child leading to output like this:
USB device tree:
1 Hub (12 Mb/s, 100mA)
| ALCOR USB Hub 2.0
|
| 2 Mass Storage (12 Mb/s, 100mA)
| USB Flash Disk 4C0E960F
|
+-3 Human Interface (1.5 Mb/s, 100mA)
SINO WEALTH USB Composite Device
Instead of this:
USB device tree:
1 Hub (12 Mb/s, 100mA)
| ALCOR USB Hub 2.0
|
+-2 Mass Storage (12 Mb/s, 100mA)
| USB Flash Disk 4C0E960F
|
+-3 Human Interface (1.5 Mb/s, 100mA)
SINO WEALTH USB Composite Device
This commit fixes this by first checking that the device is not root,
and then setting last_child. This commit also updates the old code to not
abuse the last_child variable to store the root check result.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_usb.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/common/cmd_usb.c b/common/cmd_usb.c index eab55cd..ca06826 100644 --- a/common/cmd_usb.c +++ b/common/cmd_usb.c @@ -355,12 +355,12 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre) #endif /* check if we are the last one */ #ifdef CONFIG_DM_USB - last_child = device_is_last_sibling(dev->dev); + /* Not the root of the usb tree? */ + if (device_get_uclass_id(dev->dev->parent) != UCLASS_USB) { + last_child = device_is_last_sibling(dev->dev); #else - last_child = (dev->parent != NULL); -#endif - if (last_child) { -#ifndef CONFIG_DM_USB + if (dev->parent != NULL) { /* not root? */ + last_child = 1; for (i = 0; i < dev->parent->maxchild; i++) { /* search for children */ if (dev->parent->children[i] == dev) { |