|
@@ -151,9 +151,8 @@ static void xhci_usb3_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
|
|
|
if (portsc & PORT_DEV_REMOVE)
|
|
|
port_removable |= 1 << (i + 1);
|
|
|
}
|
|
|
- memset(&desc->u.ss.DeviceRemovable,
|
|
|
- (__force __u16) cpu_to_le16(port_removable),
|
|
|
- sizeof(__u16));
|
|
|
+
|
|
|
+ desc->u.ss.DeviceRemovable = cpu_to_le16(port_removable);
|
|
|
}
|
|
|
|
|
|
static void xhci_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
|
|
@@ -809,11 +808,13 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
|
|
temp = xhci_readl(xhci, port_array[wIndex]);
|
|
|
xhci_dbg(xhci, "set port power, actual port %d status = 0x%x\n", wIndex, temp);
|
|
|
|
|
|
+ spin_unlock_irqrestore(&xhci->lock, flags);
|
|
|
temp = usb_acpi_power_manageable(hcd->self.root_hub,
|
|
|
wIndex);
|
|
|
if (temp)
|
|
|
usb_acpi_set_power_state(hcd->self.root_hub,
|
|
|
wIndex, true);
|
|
|
+ spin_lock_irqsave(&xhci->lock, flags);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_RESET:
|
|
|
temp = (temp | PORT_RESET);
|
|
@@ -917,11 +918,13 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
|
|
xhci_writel(xhci, temp & ~PORT_POWER,
|
|
|
port_array[wIndex]);
|
|
|
|
|
|
+ spin_unlock_irqrestore(&xhci->lock, flags);
|
|
|
temp = usb_acpi_power_manageable(hcd->self.root_hub,
|
|
|
wIndex);
|
|
|
if (temp)
|
|
|
usb_acpi_set_power_state(hcd->self.root_hub,
|
|
|
wIndex, false);
|
|
|
+ spin_lock_irqsave(&xhci->lock, flags);
|
|
|
break;
|
|
|
default:
|
|
|
goto error;
|