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

Commit b554e145 authored by Keerthy's avatar Keerthy Committed by Mark Brown
Browse files

regulator: tps65917/palmas: Add bypass ops for LDOs with bypass capability



set/get_bypass ops were missing for ldo1/ldo2 on tps65917 and
ldo9 on palmas/tps659038 which support bypass mode.
Adding the bypass ops helps consumers configure these ldos in
bypass mode or remove bypass mode if need be.

Signed-off-by: default avatarKeerthy <j-keerthy@ti.com>
Reported-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8005c49d
Loading
Loading
Loading
Loading
+39 −0
Original line number Original line Diff line number Diff line
@@ -612,6 +612,18 @@ static struct regulator_ops palmas_ops_ldo = {
	.map_voltage		= regulator_map_voltage_linear,
	.map_voltage		= regulator_map_voltage_linear,
};
};


static struct regulator_ops palmas_ops_ldo9 = {
	.is_enabled		= palmas_is_enabled_ldo,
	.enable			= regulator_enable_regmap,
	.disable		= regulator_disable_regmap,
	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
	.list_voltage		= regulator_list_voltage_linear,
	.map_voltage		= regulator_map_voltage_linear,
	.set_bypass		= regulator_set_bypass_regmap,
	.get_bypass		= regulator_get_bypass_regmap,
};

static struct regulator_ops palmas_ops_ext_control_ldo = {
static struct regulator_ops palmas_ops_ext_control_ldo = {
	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
@@ -639,6 +651,19 @@ static struct regulator_ops tps65917_ops_ldo = {
	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
};
};


static struct regulator_ops tps65917_ops_ldo_1_2 = {
	.is_enabled		= palmas_is_enabled_ldo,
	.enable			= regulator_enable_regmap,
	.disable		= regulator_disable_regmap,
	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
	.list_voltage		= regulator_list_voltage_linear,
	.map_voltage		= regulator_map_voltage_linear,
	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
	.set_bypass		= regulator_set_bypass_regmap,
	.get_bypass		= regulator_get_bypass_regmap,
};

static int palmas_regulator_config_external(struct palmas *palmas, int id,
static int palmas_regulator_config_external(struct palmas *palmas, int id,
		struct palmas_reg_init *reg_init)
		struct palmas_reg_init *reg_init)
{
{
@@ -915,6 +940,13 @@ static int palmas_ldo_registration(struct palmas_pmic *pmic,
			if (pdata && pdata->ldo6_vibrator &&
			if (pdata && pdata->ldo6_vibrator &&
			    (id == PALMAS_REG_LDO6))
			    (id == PALMAS_REG_LDO6))
				desc->enable_time = 2000;
				desc->enable_time = 2000;

			if (id == PALMAS_REG_LDO9) {
				desc->ops = &palmas_ops_ldo9;
				desc->bypass_reg = desc->enable_reg;
				desc->bypass_mask =
						PALMAS_LDO9_CTRL_LDO_BYPASS_EN;
			}
		} else {
		} else {
			if (!ddata->has_regen3 && id == PALMAS_REG_REGEN3)
			if (!ddata->has_regen3 && id == PALMAS_REG_REGEN3)
				continue;
				continue;
@@ -1019,6 +1051,13 @@ static int tps65917_ldo_registration(struct palmas_pmic *pmic,
			 * It is of the order of ~60mV/uS.
			 * It is of the order of ~60mV/uS.
			 */
			 */
			desc->ramp_delay = 2500;
			desc->ramp_delay = 2500;
			if (id == TPS65917_REG_LDO1 ||
			    id == TPS65917_REG_LDO2) {
				desc->ops = &tps65917_ops_ldo_1_2;
				desc->bypass_reg = desc->enable_reg;
				desc->bypass_mask =
						TPS65917_LDO1_CTRL_BYPASS_EN;
			}
		} else {
		} else {
			desc->n_voltages = 1;
			desc->n_voltages = 1;
			if (reg_init && reg_init->roof_floor)
			if (reg_init && reg_init->roof_floor)