aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator
diff options
context:
space:
mode:
authorJan Remmet <j.remmet@phytec.de>2016-09-23 04:52:00 -0400
committerMark Brown <broonie@kernel.org>2016-09-24 14:04:36 -0400
commit8f9165c981fed187bb483de84caf9adf835aefda (patch)
treeb1abe78be6f559cc7b2ed736fef64a79b107de99 /drivers/regulator
parent29b4817d4018df78086157ea3a55c1d9424a7cfc (diff)
regulator: tps65910: Work around silicon erratum SWCZ010
http://www.ti.com/lit/pdf/SWCZ010: DCDC o/p voltage can go higher than programmed value Impact: VDDI, VDD2, and VIO output programmed voltage level can go higher than expected or crash, when coming out of PFM to PWM mode or using DVFS. Description: When DCDC CLK SYNC bits are 11/01: * VIO 3-MHz oscillator is the source clock of the digital core and input clock of VDD1 and VDD2 * Turn-on of VDD1 and VDD2 HSD PFETis synchronized or at a constant phase shift * Current pulled though VCC1+VCC2 is Iload(VDD1) + Iload(VDD2) * The 3 HSD PFET will be turned-on at the same time, causing the highest possible switching noise on the application. This noise level depends on the layout, the VBAT level, and the load current. The noise level increases with improper layout. When DCDC CLK SYNC bits are 00: * VIO 3-MHz oscillator is the source clock of digital core * VDD1 and VDD2 are running on their own 3-MHz oscillator * Current pulled though VCC1+VCC2 average of Iload(VDD1) + Iload(VDD2) * The switching noise of the 3 SMPS will be randomly spread over time, causing lower overall switching noise. Workaround: Set DCDCCTRL_REG[1:0]= 00. Signed-off-by: Jan Remmet <j.remmet@phytec.de> Signed-off-by: Mark Brown <broonie@kernel.org> Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/tps65910-regulator.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index fb991ec76423..696116ebdf50 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -1111,6 +1111,12 @@ static int tps65910_probe(struct platform_device *pdev)
1111 pmic->num_regulators = ARRAY_SIZE(tps65910_regs); 1111 pmic->num_regulators = ARRAY_SIZE(tps65910_regs);
1112 pmic->ext_sleep_control = tps65910_ext_sleep_control; 1112 pmic->ext_sleep_control = tps65910_ext_sleep_control;
1113 info = tps65910_regs; 1113 info = tps65910_regs;
1114 /* Work around silicon erratum SWCZ010: output programmed
1115 * voltage level can go higher than expected or crash
1116 * Workaround: use no synchronization of DCDC clocks
1117 */
1118 tps65910_reg_clear_bits(pmic->mfd, TPS65910_DCDCCTRL,
1119 DCDCCTRL_DCDCCKSYNC_MASK);
1114 break; 1120 break;
1115 case TPS65911: 1121 case TPS65911:
1116 pmic->get_ctrl_reg = &tps65911_get_ctrl_register; 1122 pmic->get_ctrl_reg = &tps65911_get_ctrl_register;