]> git.kernelconcepts.de Git - karo-tx-uboot.git/commit
dm: usb: Use device_unbind_children to clean up usb devs on stop
authorHans de Goede <hdegoede@redhat.com>
Wed, 1 Jul 2015 18:53:00 +0000 (20:53 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Wed, 9 Sep 2015 11:48:57 +0000 (13:48 +0200)
commit5deb9a4414ef6d01c3c532f53b789435a9ba5473
tree6f3a2991b1631267d98e2da802d7c33a07cc80d1
parente36a7a85502ea776885d8016b613a4affb31646a
dm: usb: Use device_unbind_children to clean up usb devs on stop

On an usb stop instead of leaving orphan usb devices behind simply remove
them.

The result of this commit is best seen in the output of "dm tree" after
plugging out an usb hub with 2 devices plugges in and plugging in a keyb.
instead, before this commit the output would be:

 usb         [ + ]    `-- sunxi-musb
 usb_hub     [   ]        |-- usb_hub
 usb_mass_st [   ]        |   |-- usb_mass_storage
 usb_dev_gen [   ]        |   `-- generic_bus_0_dev_3
 usb_dev_gen [ + ]        `-- generic_bus_0_dev_1

Notice the non active usb_hub child and its 2 non active children. The
first child being non-active as in this example also causes usb_get_dev_index
to return NULL when probing the first child, which results in the usb kbd
code not binding to the keyboard.

With this commit in place the output after swapping and "usb reset" is:

 usb         [ + ]    `-- sunxi-musb
 usb_dev_gen [ + ]        `-- generic_bus_0_dev_1

As expected, and usb_get_dev_index works properly and the keyboard works.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
drivers/usb/host/usb-uclass.c