sawsd wang <[email protected]> writes:

> From 803cbdcd8df3d6f931089979c2dbad8942512cb4 Mon Sep 17 00:00:00 2001
> From: Chunqiu Wang <[email protected]>
> Date: Wed, 24 Jun 2009 07:57:17 +0800
> Subject: [PATCH] OMAP3: Implement separate function to send bypass
> command through VC
>
> Some system may need use OMAP VC to configure their Power IC,
> so make the common code to send bypass command using SR VC
>
> Signed-off-by: Chunqiu Wang <[email protected]>

Are there any plans to update this patch to fix line-wrapping and
patch apply issues?

If not, I will drop it from my incoming queue.

Kevin

> ---
>  arch/arm/mach-omap2/pm.h          |    1 +
>  arch/arm/mach-omap2/pm34xx.c      |   36 ++++++++++++++++++++++
>  arch/arm/mach-omap2/smartreflex.c |   59 +++---------------------------------
>  3 files changed, 42 insertions(+), 54 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
> index ddc9453..fa118cd 100644
> --- a/arch/arm/mach-omap2/pm.h
> +++ b/arch/arm/mach-omap2/pm.h
> @@ -44,6 +44,7 @@ extern int set_pwrdm_state(struct powerdomain
> *pwrdm, u32 state);
>  extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
>  extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
>  extern void omap3_set_prm_setup_vc(struct prm_setup_vc *setup_vc);
> +extern int omap3_vc_bypass_cmd(u8 slave_addr, u8 reg_addr, u8 cmd);
>
>  #ifdef CONFIG_CPU_IDLE
>  int omap3_idle_init(void);
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index 7a4a525..85b0944 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -26,6 +26,7 @@
>  #include <linux/err.h>
>  #include <linux/gpio.h>
>  #include <linux/clk.h>
> +#include <linux/delay.h>
>
>  #include <mach/sram.h>
>  #include <mach/prcm.h>
> @@ -1135,6 +1136,41 @@ err2:
>       return ret;
>  }
>
> +/* Program Power IC via OMAP3 voltage controller bypass interface */
> +int omap3_vc_bypass_cmd(u8 slave_addr, u8 reg_addr, u8 cmd)
> +{
> +     u32 vc_bypass_value;
> +     u32 loop_cnt = 0, retries_cnt = 0;
> +
> +     vc_bypass_value = (cmd << OMAP3430_DATA_SHIFT) |
> +                     (reg_addr << OMAP3430_REGADDR_SHIFT) |
> +                     (slave_addr << OMAP3430_SLAVEADDR_SHIFT);
> +
> +     prm_write_mod_reg(vc_bypass_value, OMAP3430_GR_MOD,
> +                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> +
> +     vc_bypass_value = prm_set_mod_reg_bits(OMAP3430_VALID, OMAP3430_GR_MOD,
> +                                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> +
> +     while ((vc_bypass_value & OMAP3430_VALID) != 0x0) {
> +             loop_cnt++;
> +             if (retries_cnt > 10) {
> +                     printk(KERN_ERR"Loop count exceeded in check SR I2C"
> +                                                             "write\n");
> +                     return 1;
> +             }
> +             if (loop_cnt > 50) {
> +                     retries_cnt++;
> +                     loop_cnt = 0;
> +                     udelay(10);
> +             }
> +             vc_bypass_value = prm_read_mod_reg(OMAP3430_GR_MOD,
> +                                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> +     }
> +
> +     return 0;
> +}
> +
>  static void __init configure_vc(void)
>  {
>
> diff --git a/arch/arm/mach-omap2/smartreflex.c
> b/arch/arm/mach-omap2/smartreflex.c
> index bacf602..2158b5c 100644
> --- a/arch/arm/mach-omap2/smartreflex.c
> +++ b/arch/arm/mach-omap2/smartreflex.c
> @@ -35,6 +35,7 @@
>  #include "prm.h"
>  #include "smartreflex.h"
>  #include "prm-regbits-34xx.h"
> +#include "pm.h"
>
>  struct omap_sr {
>       int             srid;
> @@ -449,8 +450,6 @@ static int sr_reset_voltage(int srid)
>  {
>       u32 target_opp_no, vsel = 0;
>       u32 reg_addr = 0;
> -     u32 loop_cnt = 0, retries_cnt = 0;
> -     u32 vc_bypass_value;
>       u32 t2_smps_steps = 0;
>       u32 t2_smps_delay = 0;
>       u32 prm_vp1_voltage, prm_vp2_voltage;
> @@ -479,31 +478,8 @@ static int sr_reset_voltage(int srid)
>               t2_smps_steps = abs(vsel - prm_vp2_voltage);
>       }
>
> -     vc_bypass_value = (vsel << OMAP3430_DATA_SHIFT) |
> -                     (reg_addr << OMAP3430_REGADDR_SHIFT) |
> -                     (R_SRI2C_SLAVE_ADDR << OMAP3430_SLAVEADDR_SHIFT);
> -
> -     prm_write_mod_reg(vc_bypass_value, OMAP3430_GR_MOD,
> -                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> -
> -     vc_bypass_value = prm_set_mod_reg_bits(OMAP3430_VALID, OMAP3430_GR_MOD,
> -                                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> -
> -     while ((vc_bypass_value & OMAP3430_VALID) != 0x0) {
> -             loop_cnt++;
> -             if (retries_cnt > 10) {
> -                     pr_info("Loop count exceeded in check SR I2C"
> -                                                             "write\n");
> -                     return 1;
> -             }
> -             if (loop_cnt > 50) {
> -                     retries_cnt++;
> -                     loop_cnt = 0;
> -                     udelay(10);
> -             }
> -             vc_bypass_value = prm_read_mod_reg(OMAP3430_GR_MOD,
> -                                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> -     }
> +     if (omap3_vc_bypass_cmd(R_SRI2C_SLAVE_ADDR, reg_addr, vsel))
> +             return 1;
>
>       /*
>        *  T2 SMPS slew rate (min) 4mV/uS, step size 12.5mV,
> @@ -780,9 +756,7 @@ int sr_voltagescale_vcbypass(u32 target_opp, u32
> current_opp,
>  {
>       int sr_status = 0;
>       u32 vdd, target_opp_no, current_opp_no;
> -     u32 vc_bypass_value;
>       u32 reg_addr = 0;
> -     u32 loop_cnt = 0, retries_cnt = 0;
>       u32 t2_smps_steps = 0;
>       u32 t2_smps_delay = 0;
>
> @@ -815,31 +789,8 @@ int sr_voltagescale_vcbypass(u32 target_opp, u32
> current_opp,
>               reg_addr = R_VDD2_SR_CONTROL;
>       }
>
> -     vc_bypass_value = (target_vsel << OMAP3430_DATA_SHIFT) |
> -                     (reg_addr << OMAP3430_REGADDR_SHIFT) |
> -                     (R_SRI2C_SLAVE_ADDR << OMAP3430_SLAVEADDR_SHIFT);
> -
> -     prm_write_mod_reg(vc_bypass_value, OMAP3430_GR_MOD,
> -                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> -
> -     vc_bypass_value = prm_set_mod_reg_bits(OMAP3430_VALID, OMAP3430_GR_MOD,
> -                                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> -
> -     while ((vc_bypass_value & OMAP3430_VALID) != 0x0) {
> -             loop_cnt++;
> -             if (retries_cnt > 10) {
> -                     pr_info("Loop count exceeded in check SR I2C"
> -                                                             "write\n");
> -                     return 1;
> -             }
> -             if (loop_cnt > 50) {
> -                     retries_cnt++;
> -                     loop_cnt = 0;
> -                     udelay(10);
> -             }
> -             vc_bypass_value = prm_read_mod_reg(OMAP3430_GR_MOD,
> -                                     OMAP3_PRM_VC_BYPASS_VAL_OFFSET);
> -     }
> +     if (omap3_vc_bypass_cmd(R_SRI2C_SLAVE_ADDR, reg_addr, target_vsel))
> +             return 1;
>
>       /*
>        *  T2 SMPS slew rate (min) 4mV/uS, step size 12.5mV,
> -- 
> 1.5.4.3
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to