diff options
Diffstat (limited to 'drivers/usb/host/ehci-hub.c')
| -rw-r--r-- | drivers/usb/host/ehci-hub.c | 22 | 
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 38fe0762315..fc9e7cc6ac9 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -233,7 +233,6 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)  	/* stop schedules, clean any completed work */  	if (ehci->rh_state == EHCI_RH_RUNNING)  		ehci_quiesce (ehci); -	ehci->command = ehci_readl(ehci, &ehci->regs->command);  	ehci_work(ehci);  	/* Unlike other USB host controller types, EHCI doesn't have @@ -374,6 +373,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd)  	ehci_writel(ehci, (u32) ehci->async->qh_dma, &ehci->regs->async_next);  	/* restore CMD_RUN, framelist size, and irq threshold */ +	ehci->command |= CMD_RUN;  	ehci_writel(ehci, ehci->command, &ehci->regs->command);  	ehci->rh_state = EHCI_RH_RUNNING; @@ -531,7 +531,8 @@ static int check_reset_complete (  		if (ehci->has_amcc_usb23)  			set_ohci_hcfs(ehci, 1);  	} else { -		ehci_dbg (ehci, "port %d high speed\n", index + 1); +		ehci_dbg(ehci, "port %d reset complete, port enabled\n", +			index + 1);  		/* ensure 440EPx ohci controller state is suspended */  		if (ehci->has_amcc_usb23)  			set_ohci_hcfs(ehci, 0); @@ -699,6 +700,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 @@ -712,8 +714,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) @@ -742,7 +743,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); @@ -752,9 +753,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) { @@ -762,12 +762,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 */  |