usb: phy: qusb2: Enable phy auto-resume

phy auto-resume allows phy to automatically drive bus resume right
after device driving bus resume for at least 1ms due to remote wake up,
before host XHCI driver gets a chance to drive bus resume.

Change-Id: Ifbd2d8212fe5ed1bdad32418300ac615091f0226
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
This commit is contained in:
Vijayavardhan Vennapusa 2017-01-03 12:25:36 +05:30
parent 2f817b68f0
commit 4ff07c149c

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@ -47,6 +47,8 @@
#define FREEZIO_N BIT(1)
#define POWER_DOWN BIT(0)
#define QUSB2PHY_PORT_TEST_CTRL 0xB8
#define QUSB2PHY_PWR_CTRL1 0x210
#define PWR_CTRL1_CLAMP_N_EN BIT(1)
#define PWR_CTRL1_POWR_DOWN BIT(0)
@ -688,6 +690,21 @@ static int qusb_phy_set_suspend(struct usb_phy *phy, int suspend)
writel_relaxed(intr_mask,
qphy->base + QUSB2PHY_PORT_INTR_CTRL);
/* enable phy auto-resume */
writel_relaxed(0x0C,
qphy->base + QUSB2PHY_PORT_TEST_CTRL);
/* flush the previous write before next write */
wmb();
writel_relaxed(0x04,
qphy->base + QUSB2PHY_PORT_TEST_CTRL);
dev_dbg(phy->dev, "%s: intr_mask = %x\n",
__func__, intr_mask);
/* Makes sure that above write goes through */
wmb();
qusb_phy_enable_clocks(qphy, false);
} else { /* Disconnect case */
/* Disable all interrupts */