diff options
Diffstat (limited to 'drivers/usb/host/xhci-hub.c')
| -rw-r--r-- | drivers/usb/host/xhci-hub.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index aa90ad4d4fd..a686cf4905b 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -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;  |