summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/usb_hub.c
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2012-10-01 05:42:43 +0000
committerhselasky <hselasky@FreeBSD.org>2012-10-01 05:42:43 +0000
commitc081610de9c447caf8b6eb3137c7529f871ba3cb (patch)
treed1865f2fe48b18b7e4afe4cd5abe6f41cfde18ba /sys/dev/usb/usb_hub.c
parentc5105a1581548a5e5614be938eeee28e123a0b4a (diff)
downloadFreeBSD-src-c081610de9c447caf8b6eb3137c7529f871ba3cb.zip
FreeBSD-src-c081610de9c447caf8b6eb3137c7529f871ba3cb.tar.gz
Inherit USB mode from RootHUB port where the USB device is connected.
Only RootHUB ports can be dual mode. Disallow OTG ports on external HUBs. This simplifies some checks in the USB controller drivers. MFC after: 1 week
Diffstat (limited to 'sys/dev/usb/usb_hub.c')
-rw-r--r--sys/dev/usb/usb_hub.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/dev/usb/usb_hub.c b/sys/dev/usb/usb_hub.c
index 2f3dbe5..0686bdf 100644
--- a/sys/dev/usb/usb_hub.c
+++ b/sys/dev/usb/usb_hub.c
@@ -518,7 +518,10 @@ repeat:
*
* NOTE: This part is currently FreeBSD specific.
*/
- if (sc->sc_st.port_status & UPS_PORT_MODE_DEVICE)
+ if (udev->parent_hub != NULL) {
+ /* inherit mode from the parent HUB */
+ mode = udev->parent_hub->flags.usb_mode;
+ } else if (sc->sc_st.port_status & UPS_PORT_MODE_DEVICE)
mode = USB_MODE_DEVICE;
else
mode = USB_MODE_HOST;
OpenPOWER on IntegriCloud