Nishanth Menon <nm@xxxxxx> writes: > From: Patrick Titiano <p-titiano@xxxxxx> > > 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@xxxxxx: ported to voltdm_c] > Signed-off-by: Nishanth Menon <nm@xxxxxx> > Signed-off-by: Patrick Titiano <p-titiano@xxxxxx> Thanks, adding to voltdm queue. Kevin > --- > arch/arm/mach-omap2/omap_twl.c | 14 +++++++------- > 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 82a91be..78fd985 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) > return 1350000; > > if (smps_offset & 0x8) > - return ((((vsel - 1) * 125) + 7000)) * 100; > + return ((((vsel - 1) * 1266) + 70900)) * 10; > else > - return ((((vsel - 1) * 125) + 6000)) * 100; > + return ((((vsel - 1) * 1266) + 60770)) * 10; > } > > static u8 twl6030_uv_to_vsel(unsigned long uv) > @@ -138,9 +138,9 @@ static u8 twl6030_uv_to_vsel(unsigned long uv) > return 0x3A; > > if (smps_offset & 0x8) > - return DIV_ROUND_UP(uv - 700000, 12500) + 1; > + return DIV_ROUND_UP(uv - 709000, 12660) + 1; > else > - return DIV_ROUND_UP(uv - 600000, 12500) + 1; > + return DIV_ROUND_UP(uv - 607700, 12660) + 1; > } > > static struct omap_voltdm_pmic omap3_mpu_pmic = { > @@ -187,7 +187,7 @@ static struct omap_voltdm_pmic omap3_core_pmic = { > > static struct omap_voltdm_pmic omap4_mpu_pmic = { > .slew_rate = 4000, > - .step_size = 12500, > + .step_size = 12660, > .on_volt = 1350000, > .onlp_volt = 1350000, > .ret_volt = 837500, > @@ -212,7 +212,7 @@ static struct omap_voltdm_pmic omap4_mpu_pmic = { > > static struct omap_voltdm_pmic omap4_iva_pmic = { > .slew_rate = 4000, > - .step_size = 12500, > + .step_size = 12660, > .on_volt = 1100000, > .onlp_volt = 1100000, > .ret_volt = 837500, > @@ -237,7 +237,7 @@ static struct omap_voltdm_pmic omap4_iva_pmic = { > > static struct omap_voltdm_pmic omap4_core_pmic = { > .slew_rate = 4000, > - .step_size = 12500, > + .step_size = 12660, > .on_volt = 1100000, > .onlp_volt = 1100000, > .ret_volt = 837500, -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html