Nishanth Menon <n...@ti.com> writes:

> From: Patrick Titiano <p-titi...@ti.com>
>
> 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.
>
> [n...@ti.com: ported to voltdm_c]
> Signed-off-by: Nishanth Menon <n...@ti.com>
> Signed-off-by: Patrick Titiano <p-titi...@ti.com>

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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to