aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Hilman <khilman@ti.com>2011-04-05 15:15:31 -0700
committerKevin Hilman <khilman@ti.com>2011-09-15 12:09:08 -0700
commit76ea7424f80350884b4d70ae54cfa51f7f9b2a48 (patch)
tree933d9d3590c21860fcf02fd594b0a5db46c60252
parent6f56727383ca3233f40af5e792a08bf07b18f5fd (diff)
downloadkernel_samsung_smdk4412-76ea7424f80350884b4d70ae54cfa51f7f9b2a48.zip
kernel_samsung_smdk4412-76ea7424f80350884b4d70ae54cfa51f7f9b2a48.tar.gz
kernel_samsung_smdk4412-76ea7424f80350884b4d70ae54cfa51f7f9b2a48.tar.bz2
OMAP3+: VP: create VP helper function for updating error gain
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>
-rw-r--r--arch/arm/mach-omap2/vc.c19
-rw-r--r--arch/arm/mach-omap2/vp.c19
-rw-r--r--arch/arm/mach-omap2/vp.h2
3 files changed, 23 insertions, 17 deletions
diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index 7b87ea1..f8bdd51 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -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;
}
diff --git a/arch/arm/mach-omap2/vp.c b/arch/arm/mach-omap2/vp.c
index ea61a47..f68a6db 100644
--- a/arch/arm/mach-omap2/vp.c
+++ b/arch/arm/mach-omap2/vp.c
@@ -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)
diff --git a/arch/arm/mach-omap2/vp.h b/arch/arm/mach-omap2/vp.h
index 1cfde5a..bb4c78e 100644
--- a/arch/arm/mach-omap2/vp.h
+++ b/arch/arm/mach-omap2/vp.h
@@ -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