|
@@ -704,6 +704,7 @@ static int ehci_hub_control (
|
|
|
goto error;
|
|
|
wIndex--;
|
|
|
temp = ehci_readl(ehci, status_reg);
|
|
|
+ temp &= ~PORT_RWC_BITS;
|
|
|
|
|
|
/*
|
|
|
* Even if OWNER is set, so the port is owned by the
|
|
@@ -717,8 +718,7 @@ static int ehci_hub_control (
|
|
|
ehci_writel(ehci, temp & ~PORT_PE, status_reg);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_C_ENABLE:
|
|
|
- ehci_writel(ehci, (temp & ~PORT_RWC_BITS) | PORT_PEC,
|
|
|
- status_reg);
|
|
|
+ ehci_writel(ehci, temp | PORT_PEC, status_reg);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_SUSPEND:
|
|
|
if (temp & PORT_RESET)
|
|
@@ -747,7 +747,7 @@ static int ehci_hub_control (
|
|
|
spin_lock_irqsave(&ehci->lock, flags);
|
|
|
}
|
|
|
/* resume signaling for 20 msec */
|
|
|
- temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS);
|
|
|
+ temp &= ~PORT_WAKE_BITS;
|
|
|
ehci_writel(ehci, temp | PORT_RESUME, status_reg);
|
|
|
ehci->reset_done[wIndex] = jiffies
|
|
|
+ msecs_to_jiffies(20);
|
|
@@ -757,9 +757,8 @@ static int ehci_hub_control (
|
|
|
break;
|
|
|
case USB_PORT_FEAT_POWER:
|
|
|
if (HCS_PPC (ehci->hcs_params))
|
|
|
- ehci_writel(ehci,
|
|
|
- temp & ~(PORT_RWC_BITS | PORT_POWER),
|
|
|
- status_reg);
|
|
|
+ ehci_writel(ehci, temp & ~PORT_POWER,
|
|
|
+ status_reg);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_C_CONNECTION:
|
|
|
if (ehci->has_lpm) {
|
|
@@ -767,12 +766,10 @@ static int ehci_hub_control (
|
|
|
temp &= ~PORT_LPM;
|
|
|
temp &= ~PORT_DEV_ADDR;
|
|
|
}
|
|
|
- ehci_writel(ehci, (temp & ~PORT_RWC_BITS) | PORT_CSC,
|
|
|
- status_reg);
|
|
|
+ ehci_writel(ehci, temp | PORT_CSC, status_reg);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_C_OVER_CURRENT:
|
|
|
- ehci_writel(ehci, (temp & ~PORT_RWC_BITS) | PORT_OCC,
|
|
|
- status_reg);
|
|
|
+ ehci_writel(ehci, temp | PORT_OCC, status_reg);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_C_RESET:
|
|
|
/* GetPortStatus clears reset */
|