|
@@ -4655,9 +4655,13 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
|
|
|
if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
|
|
|
test_bit(port1, hub->removed_bits)) {
|
|
|
|
|
|
- /* maybe switch power back on (e.g. root hub was reset) */
|
|
|
+ /*
|
|
|
+ * maybe switch power back on (e.g. root hub was reset)
|
|
|
+ * but only if the port isn't owned by someone else.
|
|
|
+ */
|
|
|
if (hub_is_port_power_switchable(hub)
|
|
|
- && !port_is_power_on(hub, portstatus))
|
|
|
+ && !port_is_power_on(hub, portstatus)
|
|
|
+ && !port_dev->port_owner)
|
|
|
set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
|
|
|
|
|
|
if (portstatus & USB_PORT_STAT_ENABLE)
|