Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9df7942 authored by Alek Du's avatar Alek Du Committed by Greg Kroah-Hartman
Browse files

USB: ehci: phy low power mode bug fixing



1. There are two msleep calls inside two spin lock sections, need to unlock
   and lock again after msleep.
2. Save a extra status reg setting.

Signed-off-by: default avatarAlek Du <alek.du@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 6feb63b6
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -196,7 +196,9 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
			if (hostpc_reg) {
				u32	t3;

				spin_unlock_irq(&ehci->lock);
				msleep(5);/* 5ms for HCD enter low pwr mode */
				spin_lock_irq(&ehci->lock);
				t3 = ehci_readl(ehci, hostpc_reg);
				ehci_writel(ehci, t3 | HOSTPC_PHCD, hostpc_reg);
				t3 = ehci_readl(ehci, hostpc_reg);
@@ -904,17 +906,18 @@ static int ehci_hub_control (
			if ((temp & PORT_PE) == 0
					|| (temp & PORT_RESET) != 0)
				goto error;
			ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);

			/* After above check the port must be connected.
			 * Set appropriate bit thus could put phy into low power
			 * mode if we have hostpc feature
			 */
			if (hostpc_reg) {
			temp &= ~PORT_WKCONN_E;
				temp |= (PORT_WKDISC_E | PORT_WKOC_E);
				ehci_writel(ehci, temp | PORT_SUSPEND,
							status_reg);
			temp |= PORT_WKDISC_E | PORT_WKOC_E;
			ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);
			if (hostpc_reg) {
				spin_unlock_irqrestore(&ehci->lock, flags);
				msleep(5);/* 5ms for HCD enter low pwr mode */
				spin_lock_irqsave(&ehci->lock, flags);
				temp1 = ehci_readl(ehci, hostpc_reg);
				ehci_writel(ehci, temp1 | HOSTPC_PHCD,
					hostpc_reg);