usb: ehci: vote for lower vddcx voltage during low power mode
usb phy requires vddcx to be at 1.1V when operational. However,
keeping vddcx high all times will cause higher power consumption.
Hence, request for lower vddcx voltage during low power mode.
Change-Id: I13465a65770b91178c82b722de9fb5fd132fe966
Signed-off-by: Vamsi Krishna <vskrishn@codeaurora.org>
diff --git a/drivers/usb/host/ehci-msm-hsic.c b/drivers/usb/host/ehci-msm-hsic.c
index 093a170..350f286 100644
--- a/drivers/usb/host/ehci-msm-hsic.c
+++ b/drivers/usb/host/ehci-msm-hsic.c
@@ -65,9 +65,10 @@
#define ULPI_IO_TIMEOUT_USEC (10 * 1000)
-#define USB_PHY_VDD_DIG_VOL_MIN 1000000 /* uV */
-#define USB_PHY_VDD_DIG_VOL_MAX 1320000 /* uV */
-#define USB_PHY_VDD_DIG_LOAD 49360 /* uA */
+#define USB_PHY_VDD_DIG_VOL_SUSP_MIN 500000 /* uV */
+#define USB_PHY_VDD_DIG_VOL_MIN 1000000 /* uV */
+#define USB_PHY_VDD_DIG_VOL_MAX 1320000 /* uV */
+#define USB_PHY_VDD_DIG_LOAD 49360 /* uA */
static int msm_hsic_init_vddcx(struct msm_hsic_hcd *mehci, int init)
{
@@ -431,6 +432,12 @@
"TCXO D1 buffer%d\n", __func__, ret);
}
+ ret = regulator_set_voltage(mehci->hsic_vddcx,
+ USB_PHY_VDD_DIG_VOL_SUSP_MIN,
+ USB_PHY_VDD_DIG_VOL_MAX);
+ if (ret < 0)
+ dev_err(mehci->dev, "unable to set vddcx voltage: min:0.5v max:1.3v\n");
+
atomic_set(&mehci->in_lpm, 1);
enable_irq(hcd->irq);
wake_unlock(&mehci->wlock);
@@ -454,6 +461,12 @@
wake_lock(&mehci->wlock);
+ ret = regulator_set_voltage(mehci->hsic_vddcx,
+ USB_PHY_VDD_DIG_VOL_MIN,
+ USB_PHY_VDD_DIG_VOL_MAX);
+ if (ret < 0)
+ dev_err(mehci->dev, "unable to set vddcx voltage: min:1v max:1.3v\n");
+
pdata = mehci->dev->platform_data;
if (pdata->hub_reset) {
ret = msm_xo_mode_vote(mehci->xo_handle, MSM_XO_MODE_ON);