diff options
Diffstat (limited to 'drivers/usb/core')
-rw-r--r-- | drivers/usb/core/Kconfig | 7 | ||||
-rw-r--r-- | drivers/usb/core/hcd-pci.c | 7 | ||||
-rw-r--r-- | drivers/usb/core/hub.c | 8 | ||||
-rw-r--r-- | drivers/usb/core/usb.c | 2 |
4 files changed, 17 insertions, 7 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 | |||
99 | normal Linux-USB hosts do (other than the warning), and is | 99 | normal Linux-USB hosts do (other than the warning), and is |
100 | convenient for many stages of product development. | 100 | convenient for many stages of product development. |
101 | 101 | ||
102 | config USB_OTG_BLACKLIST_HUB | ||
103 | bool "Disable external hubs" | ||
104 | depends on USB_OTG | ||
105 | help | ||
106 | If you say Y here, then Linux will refuse to enumerate | ||
107 | external hubs. OTG hosts are allowed to reduce hardware | ||
108 | and software costs by not supporting external hubs. | ||
102 | 109 | ||
diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c index 0d2193b69235..66b78404ab34 100644 --- a/drivers/usb/core/hcd-pci.c +++ b/drivers/usb/core/hcd-pci.c | |||
@@ -213,11 +213,9 @@ int usb_hcd_pci_suspend (struct pci_dev *dev, pm_message_t message) | |||
213 | 213 | ||
214 | if (hcd->driver->suspend) { | 214 | if (hcd->driver->suspend) { |
215 | retval = hcd->driver->suspend(hcd, message); | 215 | retval = hcd->driver->suspend(hcd, message); |
216 | if (retval) { | 216 | suspend_report_result(hcd->driver->suspend, retval); |
217 | dev_dbg (&dev->dev, "PCI pre-suspend fail, %d\n", | 217 | if (retval) |
218 | retval); | ||
219 | goto done; | 218 | goto done; |
220 | } | ||
221 | } | 219 | } |
222 | synchronize_irq(dev->irq); | 220 | synchronize_irq(dev->irq); |
223 | 221 | ||
@@ -263,6 +261,7 @@ int usb_hcd_pci_suspend (struct pci_dev *dev, pm_message_t message) | |||
263 | * some device state (e.g. as part of clock reinit). | 261 | * some device state (e.g. as part of clock reinit). |
264 | */ | 262 | */ |
265 | retval = pci_set_power_state (dev, PCI_D3hot); | 263 | retval = pci_set_power_state (dev, PCI_D3hot); |
264 | suspend_report_result(pci_set_power_state, retval); | ||
266 | if (retval == 0) { | 265 | if (retval == 0) { |
267 | int wake = device_can_wakeup(&hcd->self.root_hub->dev); | 266 | int wake = device_can_wakeup(&hcd->self.root_hub->dev); |
268 | 267 | ||
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 8e65f7a237e4..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) | |||
836 | desc = intf->cur_altsetting; | 836 | desc = intf->cur_altsetting; |
837 | hdev = interface_to_usbdev(intf); | 837 | hdev = interface_to_usbdev(intf); |
838 | 838 | ||
839 | #ifdef CONFIG_USB_OTG_BLACKLIST_HUB | ||
840 | if (hdev->parent) { | ||
841 | dev_warn(&intf->dev, "ignoring external hub\n"); | ||
842 | return -ENODEV; | ||
843 | } | ||
844 | #endif | ||
845 | |||
839 | /* Some hubs have a subclass of 1, which AFAICT according to the */ | 846 | /* Some hubs have a subclass of 1, which AFAICT according to the */ |
840 | /* specs is not defined, but it works */ | 847 | /* specs is not defined, but it works */ |
841 | if ((desc->desc.bInterfaceSubClass != 0) && | 848 | if ((desc->desc.bInterfaceSubClass != 0) && |
@@ -1022,7 +1029,6 @@ void usb_set_device_state(struct usb_device *udev, | |||
1022 | recursively_mark_NOTATTACHED(udev); | 1029 | recursively_mark_NOTATTACHED(udev); |
1023 | spin_unlock_irqrestore(&device_state_lock, flags); | 1030 | spin_unlock_irqrestore(&device_state_lock, flags); |
1024 | } | 1031 | } |
1025 | EXPORT_SYMBOL(usb_set_device_state); | ||
1026 | 1032 | ||
1027 | 1033 | ||
1028 | #ifdef CONFIG_PM | 1034 | #ifdef CONFIG_PM |
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index d7352aa73b5e..b7fdc1cd134a 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
@@ -1194,7 +1194,6 @@ EXPORT_SYMBOL(usb_disabled); | |||
1194 | EXPORT_SYMBOL_GPL(usb_get_intf); | 1194 | EXPORT_SYMBOL_GPL(usb_get_intf); |
1195 | EXPORT_SYMBOL_GPL(usb_put_intf); | 1195 | EXPORT_SYMBOL_GPL(usb_put_intf); |
1196 | 1196 | ||
1197 | EXPORT_SYMBOL(usb_alloc_dev); | ||
1198 | EXPORT_SYMBOL(usb_put_dev); | 1197 | EXPORT_SYMBOL(usb_put_dev); |
1199 | EXPORT_SYMBOL(usb_get_dev); | 1198 | EXPORT_SYMBOL(usb_get_dev); |
1200 | EXPORT_SYMBOL(usb_hub_tt_clear_buffer); | 1199 | EXPORT_SYMBOL(usb_hub_tt_clear_buffer); |
@@ -1208,7 +1207,6 @@ EXPORT_SYMBOL(usb_ifnum_to_if); | |||
1208 | EXPORT_SYMBOL(usb_altnum_to_altsetting); | 1207 | EXPORT_SYMBOL(usb_altnum_to_altsetting); |
1209 | 1208 | ||
1210 | EXPORT_SYMBOL(usb_reset_device); | 1209 | EXPORT_SYMBOL(usb_reset_device); |
1211 | EXPORT_SYMBOL(usb_disconnect); | ||
1212 | 1210 | ||
1213 | EXPORT_SYMBOL(__usb_get_extra_descriptor); | 1211 | EXPORT_SYMBOL(__usb_get_extra_descriptor); |
1214 | 1212 | ||