Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76ea7424 authored by Kevin Hilman's avatar Kevin Hilman
Browse files

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: default avatarKevin Hilman <khilman@ti.com>
parent 6f567273
Loading
Loading
Loading
Loading
+2 −17
Original line number Diff line number Diff line
@@ -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;
}
+19 −0
Original line number Diff line number Diff line
@@ -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)
+2 −0
Original line number Diff line number Diff line
@@ -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