diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2013-02-10 01:06:38 +0530 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2013-02-11 05:13:10 -0800 |
commit | c234ec797037e4168a0ce1f87b19347e71d6b909 (patch) | |
tree | e8753be6794e03c77ef618ff5feb1548561ec92a /drivers | |
parent | 4aae1b8da409ec83b0edff1e7d9d34bdb4b5ede9 (diff) |
regulator: palmas: implement errata for ES1.0,ES2.0 and ES2.1
The device has the errata and sw need to implement the WAR for
proper functioning of the device.
The errata are:
1. SMPS- slew rate (TSTEP) is slower than expected
-----------------------------------------------
when output voltage target is close to previous one
IMPACT: The settling time is greater than specified slew rate in
register map and datasheet for voltage scaling of the SMPS.
DESCRIPTION: Measurement done on WCSP ES2.0, SMPS8, SMPS6, SMPS12
for TSTEP=0x02(5mV/us)
- step from VOUT= 0.5v to 1.65V ==>slew rate is around 5mV/us
- step from VOUT= 0.96v to 1.04V ==>slew rate is around 2.5mV/us
for TSTEP=0x03(2.5mV/us)
- step from VOUT= 0.5v to 1.65V ==>slew rate is around 2.5mV/us
- step from VOUT= 0.96v to 1.04V ==>slew rate is around 1.6mV/us
WORKAROUND: Adapt wait time using above value.
REVISION IMPACTED: ES1.0/ES2.0/ES2.1
2. LDO8_TRACKING: PD in tracking mode
-------------------------------------
IMPACT: Higher consumption and performance impact when LDO8 is set in
tracking mode and LDO is set to have its pull down enabled in OFF mode.
DESCRIPTION: When LDO8 is set in tracking mode and the LDO is set to have
its pull down enabled in OFF, the pull down is also enabled in ACTIVE mode.
WORKAROUND: In tracking mode, bit7 of LDO_PD_CTRL1 register must be set to 0.
When LDO8 is disabled, to have the pull down, bit7 of LDO_PD_CTRL1 register must
then be set to 1.
In LDO8 regulation mode, behavior is the same as the other LDOs.
REVISION IMPACTED: ES 2.1 ES2.0 ES1.0
bug 1228386
bug 1195226
Change-Id: Ib19a21cb722b1bc07d93a0cf866c134672ef8735
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/199132
Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/regulator/palmas-regulator.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index 7ac6fdb20639..5c233bfef779 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c @@ -457,7 +457,9 @@ static int palma_smps_set_voltage_smps_time_sel(struct regulator_dev *rdev, unsigned int ramp_delay = pmic->ramp_delay[id]; /* ES2.1, have the 1.5X slower slew rate than configured */ - ramp_delay = (ramp_delay * 15)/10; + if (palmas_is_es_version_or_less(pmic->palmas, 2, 1)) + ramp_delay = (ramp_delay * 15)/10; + if (!ramp_delay) return 0; @@ -1060,20 +1062,25 @@ static void palmas_enable_ldo8_track(struct palmas *palmas) } /* + * Errata ES1.0, 2,0 and 2.1 * When Tracking is enbled, it need to disable Pull-Down for LDO8 and * when tracking is disabled, SW has to enabe Pull-Down. */ - addr = PALMAS_LDO_PD_CTRL1; - ret = palmas_ldo_read(palmas, addr, ®); - if (ret < 0) { - dev_err(palmas->dev, "Error in reading pulldown control reg\n"); - return; - } - reg &= ~PALMAS_LDO_PD_CTRL1_LDO8; - ret = palmas_ldo_write(palmas, addr, reg); - if (ret < 0) { - dev_err(palmas->dev, "Error in setting pulldown control reg\n"); - return; + if (palmas_is_es_version_or_less(palmas, 2, 1)) { + addr = PALMAS_LDO_PD_CTRL1; + ret = palmas_ldo_read(palmas, addr, ®); + if (ret < 0) { + dev_err(palmas->dev, + "Error in reading pulldown control reg\n"); + return; + } + reg &= ~PALMAS_LDO_PD_CTRL1_LDO8; + ret = palmas_ldo_write(palmas, addr, reg); + if (ret < 0) { + dev_err(palmas->dev, + "Error in setting pulldown control reg\n"); + return; + } } return; @@ -1119,20 +1126,25 @@ static void palmas_disable_ldo8_track(struct palmas *palmas) } /* + * Errata ES1.0, 2,0 and 2.1 * When Tracking is enbled, it need to disable Pull-Down for LDO8 and * when tracking is disabled, SW has to enabe Pull-Down. */ - addr = PALMAS_LDO_PD_CTRL1; - ret = palmas_ldo_read(palmas, addr, ®); - if (ret < 0) { - dev_err(palmas->dev, "Error in reading pulldown control reg\n"); - return; - } - reg |= PALMAS_LDO_PD_CTRL1_LDO8; - ret = palmas_ldo_write(palmas, addr, reg); - if (ret < 0) { - dev_err(palmas->dev, "Error in setting pulldown control reg\n"); - return; + if (palmas_is_es_version_or_less(palmas, 2, 1)) { + addr = PALMAS_LDO_PD_CTRL1; + ret = palmas_ldo_read(palmas, addr, ®); + if (ret < 0) { + dev_err(palmas->dev, + "Error in reading pulldown control reg\n"); + return; + } + reg |= PALMAS_LDO_PD_CTRL1_LDO8; + ret = palmas_ldo_write(palmas, addr, reg); + if (ret < 0) { + dev_err(palmas->dev, + "Error in setting pulldown control reg\n"); + return; + } } return; |