regulator: ti-abb: Fix bias voltage glitch in transition to bypass mode
As documented in Application Note SWPA117 v2.1(NDA), LDO override has a requirement that when switching from Bias active + override active mode(FBB/RBB) to Bypass(nominal) mode, LDO reset must be performed *after* LDO transitions to Bypass(nominal) mode. The same rule in reverse applies when switching from a ABB bypass mode to ABB enabled - LDO override *must* be performed prior to transition to required ABB mode, if we do not do that, the same glitch takes place. Currently while transitioning to ABB bypass, we reset the LDO overide prior to the transition which causes a few milliseconds where ABB LDO voltage could go all the way to 800mV(based on SoC process node), during this period, the delta voltage between VDD rail and VBB rail could cause the system to improperly function. Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Mark Brown <broonie@linaro.org> Cc: stable@vger.kernel.org
This commit is contained in:
parent
4a10c2ac2f
commit
bf00ca35ce
1 changed files with 14 additions and 2 deletions
|
@ -279,8 +279,12 @@ static int ti_abb_set_opp(struct regulator_dev *rdev, struct ti_abb *abb,
|
|||
ti_abb_rmw(regs->opp_sel_mask, info->opp_sel, regs->control_reg,
|
||||
abb->base);
|
||||
|
||||
/* program LDO VBB vset override if needed */
|
||||
if (abb->ldo_base)
|
||||
/*
|
||||
* program LDO VBB vset override if needed for !bypass mode
|
||||
* XXX: Do not switch sequence - for !bypass, LDO override reset *must*
|
||||
* be performed *before* switch to bias mode else VBB glitches.
|
||||
*/
|
||||
if (abb->ldo_base && info->opp_sel != TI_ABB_NOMINAL_OPP)
|
||||
ti_abb_program_ldovbb(dev, abb, info);
|
||||
|
||||
/* Initiate ABB ldo change */
|
||||
|
@ -295,6 +299,14 @@ static int ti_abb_set_opp(struct regulator_dev *rdev, struct ti_abb *abb,
|
|||
if (ret)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Reset LDO VBB vset override bypass mode
|
||||
* XXX: Do not switch sequence - for bypass, LDO override reset *must*
|
||||
* be performed *after* switch to bypass else VBB glitches.
|
||||
*/
|
||||
if (abb->ldo_base && info->opp_sel == TI_ABB_NOMINAL_OPP)
|
||||
ti_abb_program_ldovbb(dev, abb, info);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue