diff options
Diffstat (limited to 'drivers/usb/host/ehci-hcd.c')
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index e0f3e4b6c..445759b9a 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -809,21 +809,23 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,  		break;  	case USB_REQ_CLEAR_FEATURE | ((USB_DIR_OUT | USB_RT_PORT) << 8):  		reg = ehci_readl(status_reg); +		reg &= ~EHCI_PS_CLEAR;  		switch (le16_to_cpu(req->value)) {  		case USB_PORT_FEAT_ENABLE:  			reg &= ~EHCI_PS_PE;  			break;  		case USB_PORT_FEAT_C_ENABLE: -			reg = (reg & ~EHCI_PS_CLEAR) | EHCI_PS_PE; +			reg |= EHCI_PS_PE;  			break;  		case USB_PORT_FEAT_POWER:  			if (HCS_PPC(ehci_readl(&ctrl->hccr->cr_hcsparams))) -				reg = reg & ~(EHCI_PS_CLEAR | EHCI_PS_PP); +				reg &= ~EHCI_PS_PP; +			break;  		case USB_PORT_FEAT_C_CONNECTION: -			reg = (reg & ~EHCI_PS_CLEAR) | EHCI_PS_CSC; +			reg |= EHCI_PS_CSC;  			break;  		case USB_PORT_FEAT_OVER_CURRENT: -			reg = (reg & ~EHCI_PS_CLEAR) | EHCI_PS_OCC; +			reg |= EHCI_PS_OCC;  			break;  		case USB_PORT_FEAT_C_RESET:  			ctrl->portreset &= ~(1 << port); |