aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Titiano <p-titiano@ti.com>2011-05-18 01:17:30 -0400
committerKevin Hilman <khilman@ti.com>2011-09-15 15:09:36 -0400
commit58e241f7be8dfbb19fa8f5bf8b2e56bb6d655752 (patch)
tree51beb0327c341f11503a0d76d1689a7b62f4f67f
parent42b43945e0f115412dd0b7f0c3609a8b6f24f5e5 (diff)
OMAP4: PM: TWL6030: fix voltage conversion formula
omap_twl_vsel_to_uv() and omap_twl_uv_to_vsel() functions used to convert voltages to TWL6030 SMPS commands (a.k.a "vsel") implement incorrect conversion formula. It uses legacy OMAP3 formula, but OMAP4 Power IC has different offset and voltage step: - Voltage Step is now 12.66mV (instead of 12.5mV) - Offset is either 607.7mV or 709mV depending on TWL6030 chip revision (instead of 600mV) This leads to setting voltages potentially higher than expected, and so potentially some (limited) power overconsumption. For reference, see formula and tables in section 8.5.2.3 "Output Voltage Selection (Standard Mode / Extended Mode with or without offset)" in TWL6030 functional specifications document. [nm@ti.com: ported to voltdm_c] Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Patrick Titiano <p-titiano@ti.com>
-rw-r--r--arch/arm/mach-omap2/omap_twl.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c
index 6b247d183299..a66bf6b9fb05 100644
--- a/arch/arm/mach-omap2/omap_twl.c
+++ b/arch/arm/mach-omap2/omap_twl.c
@@ -106,9 +106,9 @@ static unsigned long twl6030_vsel_to_uv(const u8 vsel)
106 return 1350000; 106 return 1350000;
107 107
108 if (smps_offset & 0x8) 108 if (smps_offset & 0x8)
109 return ((((vsel - 1) * 125) + 7000)) * 100; 109 return ((((vsel - 1) * 1266) + 70900)) * 10;
110 else 110 else
111 return ((((vsel - 1) * 125) + 6000)) * 100; 111 return ((((vsel - 1) * 1266) + 60770)) * 10;
112} 112}
113 113
114static u8 twl6030_uv_to_vsel(unsigned long uv) 114static u8 twl6030_uv_to_vsel(unsigned long uv)
@@ -138,9 +138,9 @@ static u8 twl6030_uv_to_vsel(unsigned long uv)
138 return 0x3A; 138 return 0x3A;
139 139
140 if (smps_offset & 0x8) 140 if (smps_offset & 0x8)
141 return DIV_ROUND_UP(uv - 700000, 12500) + 1; 141 return DIV_ROUND_UP(uv - 709000, 12660) + 1;
142 else 142 else
143 return DIV_ROUND_UP(uv - 600000, 12500) + 1; 143 return DIV_ROUND_UP(uv - 607700, 12660) + 1;
144} 144}
145 145
146static struct omap_voltdm_pmic omap3_mpu_pmic = { 146static struct omap_voltdm_pmic omap3_mpu_pmic = {
@@ -187,7 +187,7 @@ static struct omap_voltdm_pmic omap3_core_pmic = {
187 187
188static struct omap_voltdm_pmic omap4_mpu_pmic = { 188static struct omap_voltdm_pmic omap4_mpu_pmic = {
189 .slew_rate = 4000, 189 .slew_rate = 4000,
190 .step_size = 12500, 190 .step_size = 12660,
191 .on_volt = 1350000, 191 .on_volt = 1350000,
192 .onlp_volt = 1350000, 192 .onlp_volt = 1350000,
193 .ret_volt = 837500, 193 .ret_volt = 837500,
@@ -208,7 +208,7 @@ static struct omap_voltdm_pmic omap4_mpu_pmic = {
208 208
209static struct omap_voltdm_pmic omap4_iva_pmic = { 209static struct omap_voltdm_pmic omap4_iva_pmic = {
210 .slew_rate = 4000, 210 .slew_rate = 4000,
211 .step_size = 12500, 211 .step_size = 12660,
212 .on_volt = 1100000, 212 .on_volt = 1100000,
213 .onlp_volt = 1100000, 213 .onlp_volt = 1100000,
214 .ret_volt = 837500, 214 .ret_volt = 837500,
@@ -229,7 +229,7 @@ static struct omap_voltdm_pmic omap4_iva_pmic = {
229 229
230static struct omap_voltdm_pmic omap4_core_pmic = { 230static struct omap_voltdm_pmic omap4_core_pmic = {
231 .slew_rate = 4000, 231 .slew_rate = 4000,
232 .step_size = 12500, 232 .step_size = 12660,
233 .on_volt = 1100000, 233 .on_volt = 1100000,
234 .onlp_volt = 1100000, 234 .onlp_volt = 1100000,
235 .ret_volt = 837500, 235 .ret_volt = 837500,