OMAP3+: VP: create VP helper function for updating error gain
authorKevin Hilman <khilman@ti.com>
Tue, 5 Apr 2011 22:15:31 +0000 (15:15 -0700)
committerKevin Hilman <khilman@ti.com>
Thu, 15 Sep 2011 19:09:08 +0000 (12:09 -0700)
Create new helper function in VP layer for updating VP error gain.
Currently used during pre-scale for VP force update and VC bypass.

TODO: determine if this can be removed from the pre-scale path and
moved to VP enable path.

Signed-off-by: Kevin Hilman <khilman@ti.com>
arch/arm/mach-omap2/vc.c
arch/arm/mach-omap2/vp.c
arch/arm/mach-omap2/vp.h

index 7b87ea1..f8bdd51 100644 (file)
@@ -105,9 +105,7 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm,
                      u8 *target_vsel, u8 *current_vsel)
 {
        struct omap_vc_channel *vc = voltdm->vc;
-       struct omap_vdd_info *vdd = voltdm->vdd;
-       struct omap_volt_data *volt_data;
-       u32 vc_cmdval, vp_errgain_val;
+       u32 vc_cmdval;
 
        /* Check if sufficient pmic info is available for this vdd */
        if (!voltdm->pmic) {
@@ -129,11 +127,6 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm,
                return -EINVAL;
        }
 
-       /* Get volt_data corresponding to target_volt */
-       volt_data = omap_voltage_get_voltdata(voltdm, target_volt);
-       if (IS_ERR(volt_data))
-               volt_data = NULL;
-
        *target_vsel = voltdm->pmic->uv_to_vsel(target_volt);
        *current_vsel = voltdm->pmic->uv_to_vsel(vdd->curr_volt);
 
@@ -143,15 +136,7 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm,
        vc_cmdval |= (*target_vsel << vc->common->cmd_on_shift);
        voltdm->write(vc_cmdval, vc->cmdval_reg);
 
-       /* Setting vp errorgain based on the voltage */
-       if (volt_data) {
-               vp_errgain_val = voltdm->read(voltdm->vp->vpconfig);
-               vdd->vp_rt_data.vpconfig_errorgain = volt_data->vp_errgain;
-               vp_errgain_val &= voltdm->vp->common->vpconfig_errorgain_mask;
-               vp_errgain_val |= vdd->vp_rt_data.vpconfig_errorgain <<
-                       __ffs(voltdm->vp->common->vpconfig_errorgain_mask);
-               voltdm->write(vp_errgain_val, voltdm->vp->vpconfig);
-       }
+       omap_vp_update_errorgain(voltdm, target_volt);
 
        return 0;
 }
index ea61a47..f68a6db 100644 (file)
@@ -106,6 +106,25 @@ void __init omap_vp_init(struct voltagedomain *voltdm)
        voltdm->write(vp_val, vp->vlimitto);
 }
 
+int omap_vp_update_errorgain(struct voltagedomain *voltdm,
+                            unsigned long target_volt)
+{
+       struct omap_volt_data *volt_data;
+
+       /* Get volt_data corresponding to target_volt */
+       volt_data = omap_voltage_get_voltdata(voltdm, target_volt);
+       if (IS_ERR(volt_data))
+               return -EINVAL;
+
+       /* Setting vp errorgain based on the voltage */
+       voltdm->rmw(voltdm->vp->common->vpconfig_errorgain_mask,
+                   volt_data->vp_errgain <<
+                   __ffs(voltdm->vp->common->vpconfig_errorgain_mask),
+                   voltdm->vp->vpconfig);
+
+       return 0;
+}
+
 /* VP force update method of voltage scaling */
 int omap_vp_forceupdate_scale(struct voltagedomain *voltdm,
                              unsigned long target_volt)
index 1cfde5a..bb4c78e 100644 (file)
@@ -149,5 +149,7 @@ void omap_vp_disable(struct voltagedomain *voltdm);
 unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm);
 int omap_vp_forceupdate_scale(struct voltagedomain *voltdm,
                              unsigned long target_volt);
+int omap_vp_update_errorgain(struct voltagedomain *voltdm,
+                            unsigned long target_volt);
 
 #endif