summaryrefslogtreecommitdiff
path: root/common/cmd_usb.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2015-06-17 21:33:50 +0200
committerSimon Glass <sjg@chromium.org>2015-07-21 17:39:35 -0600
commitc27b329054a42bcfb19d3b192dc44e1182fea264 (patch)
treecd9b489eeebad9eff7628a6c8fc3a55da70c0beb /common/cmd_usb.c
parentbb52b367f6ca4a3a918e77737f4ff6a1089912d9 (diff)
downloadu-boot-imx-c27b329054a42bcfb19d3b192dc44e1182fea264.zip
u-boot-imx-c27b329054a42bcfb19d3b192dc44e1182fea264.tar.gz
u-boot-imx-c27b329054a42bcfb19d3b192dc44e1182fea264.tar.bz2
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/cmd_usb.c')
-rw-r--r--common/cmd_usb.c10
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) {