Merge "USB: OTG: msm: Fix wall charger compliance issues" into msm-3.0
This commit is contained in:
committed by
QuIC Gerrit Code Review
commit
0b1780bef9
@@ -608,7 +608,7 @@ static int msm_otg_suspend(struct msm_otg *motg)
|
||||
struct usb_bus *bus = otg->host;
|
||||
struct msm_otg_platform_data *pdata = motg->pdata;
|
||||
int cnt = 0;
|
||||
bool host_bus_suspend;
|
||||
bool host_bus_suspend, dcp;
|
||||
u32 phy_ctrl_val = 0, cmd_val;
|
||||
u32 portsc;
|
||||
|
||||
@@ -617,6 +617,7 @@ static int msm_otg_suspend(struct msm_otg *motg)
|
||||
|
||||
disable_irq(motg->irq);
|
||||
host_bus_suspend = otg->host && !test_bit(ID, &motg->inputs);
|
||||
dcp = motg->chg_type == USB_DCP_CHARGER;
|
||||
/*
|
||||
* Chipidea 45-nm PHY suspend sequence:
|
||||
*
|
||||
@@ -689,7 +690,11 @@ static int msm_otg_suspend(struct msm_otg *motg)
|
||||
cmd_val |= ULPI_STP_CTRL;
|
||||
writel_relaxed(cmd_val, USB_USBCMD);
|
||||
|
||||
if (motg->caps & ALLOW_PHY_RETENTION && !host_bus_suspend) {
|
||||
/*
|
||||
* BC1.2 spec mandates PD to enable VDP_SRC when charging from DCP.
|
||||
* PHY retention and collapse can not happen with VDP_SRC enabled.
|
||||
*/
|
||||
if (motg->caps & ALLOW_PHY_RETENTION && !host_bus_suspend && !dcp) {
|
||||
phy_ctrl_val = readl_relaxed(USB_PHY_CTRL);
|
||||
if (motg->pdata->otg_control == OTG_PHY_CONTROL)
|
||||
/* Enable PHY HV interrupts to wake MPM/Link */
|
||||
@@ -708,7 +713,8 @@ static int msm_otg_suspend(struct msm_otg *motg)
|
||||
/* usb phy no more require TCXO clock, hence vote for TCXO disable */
|
||||
clk_disable_unprepare(motg->xo_handle);
|
||||
|
||||
if (motg->caps & ALLOW_PHY_POWER_COLLAPSE && !host_bus_suspend) {
|
||||
if (motg->caps & ALLOW_PHY_POWER_COLLAPSE &&
|
||||
!host_bus_suspend && !dcp) {
|
||||
msm_hsusb_ldo_enable(motg, 0);
|
||||
motg->lpm_flags |= PHY_PWR_COLLAPSED;
|
||||
}
|
||||
@@ -1433,6 +1439,9 @@ static void msm_chg_enable_secondary_det(struct msm_otg *motg)
|
||||
ulpi_write(otg, chg_det, 0x34);
|
||||
break;
|
||||
case SNPS_28NM_INTEGRATED_PHY:
|
||||
/* Turn off VDP_SRC */
|
||||
ulpi_write(otg, 0x3, 0x86);
|
||||
msleep(20);
|
||||
/*
|
||||
* Configure DM as current source, DP as current sink
|
||||
* and enable battery charging comparators.
|
||||
@@ -1634,8 +1643,8 @@ static const char *chg_to_string(enum usb_chg_type chg_type)
|
||||
|
||||
#define MSM_CHG_DCD_POLL_TIME (100 * HZ/1000) /* 100 msec */
|
||||
#define MSM_CHG_DCD_MAX_RETRIES 6 /* Tdcd_tmout = 6 * 100 msec */
|
||||
#define MSM_CHG_PRIMARY_DET_TIME (40 * HZ/1000) /* TVDPSRC_ON */
|
||||
#define MSM_CHG_SECONDARY_DET_TIME (40 * HZ/1000) /* TVDMSRC_ON */
|
||||
#define MSM_CHG_PRIMARY_DET_TIME (50 * HZ/1000) /* TVDPSRC_ON */
|
||||
#define MSM_CHG_SECONDARY_DET_TIME (50 * HZ/1000) /* TVDMSRC_ON */
|
||||
static void msm_chg_detect_work(struct work_struct *w)
|
||||
{
|
||||
struct msm_otg *motg = container_of(w, struct msm_otg, chg_work.work);
|
||||
@@ -1852,6 +1861,8 @@ static void msm_otg_sm_work(struct work_struct *w)
|
||||
case USB_CHG_STATE_DETECTED:
|
||||
switch (motg->chg_type) {
|
||||
case USB_DCP_CHARGER:
|
||||
/* Enable VDP_SRC */
|
||||
ulpi_write(otg, 0x2, 0x85);
|
||||
msm_otg_notify_charger(motg,
|
||||
IDEV_CHG_MAX);
|
||||
pm_runtime_put_noidle(otg->dev);
|
||||
|
||||
Reference in New Issue
Block a user