diff options
author | David Brownell <david-b@pacbell.net> | 2006-04-02 20:18:09 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-04-14 20:12:23 +0200 |
commit | 89ccbdc91bc5a433fa256c0136fbe181d7c5d474 (patch) | |
tree | 7c0e78a7d908534db7d423d20cb8e6eea4ec62e4 /drivers/usb | |
parent | [PATCH] USB: UEAGLE : memory leack fix (diff) | |
download | linux-89ccbdc91bc5a433fa256c0136fbe181d7c5d474.tar.xz linux-89ccbdc91bc5a433fa256c0136fbe181d7c5d474.zip |
[PATCH] USB: otg hub support is optional
USB OTG devices are not required to support external hubs. This adds a
configuration option to disable that support.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/core/Kconfig | 7 | ||||
-rw-r--r-- | drivers/usb/core/hub.c | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/usb/core/Kconfig b/drivers/usb/core/Kconfig index ff03184da403..a08787e253aa 100644 --- a/drivers/usb/core/Kconfig +++ b/drivers/usb/core/Kconfig @@ -99,4 +99,11 @@ config USB_OTG_WHITELIST normal Linux-USB hosts do (other than the warning), and is convenient for many stages of product development. +config USB_OTG_BLACKLIST_HUB + bool "Disable external hubs" + depends on USB_OTG + help + If you say Y here, then Linux will refuse to enumerate + external hubs. OTG hosts are allowed to reduce hardware + and software costs by not supporting external hubs. diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 3c76f7e17c0c..0c87f73f2933 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -836,6 +836,13 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) desc = intf->cur_altsetting; hdev = interface_to_usbdev(intf); +#ifdef CONFIG_USB_OTG_BLACKLIST_HUB + if (hdev->parent) { + dev_warn(&intf->dev, "ignoring external hub\n"); + return -ENODEV; + } +#endif + /* Some hubs have a subclass of 1, which AFAICT according to the */ /* specs is not defined, but it works */ if ((desc->desc.bInterfaceSubClass != 0) && |