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

Commit df367931 authored by Mark Brown's avatar Mark Brown
Browse files

regulator: core: Provide regmap get/set bypass operations

parent f59c8f9f
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -2698,6 +2698,47 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load)
}
EXPORT_SYMBOL_GPL(regulator_set_optimum_mode);

/**
 * regulator_set_bypass_regmap - Default set_bypass() using regmap
 *
 * @rdev: device to operate on.
 * @enable: state to set.
 */
int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable)
{
	unsigned int val;

	if (enable)
		val = rdev->desc->bypass_mask;
	else
		val = 0;

	return regmap_update_bits(rdev->regmap, rdev->desc->bypass_reg,
				  rdev->desc->bypass_mask, val);
}
EXPORT_SYMBOL_GPL(regulator_set_bypass_regmap);

/**
 * regulator_get_bypass_regmap - Default get_bypass() using regmap
 *
 * @rdev: device to operate on.
 * @enable: current state.
 */
int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable)
{
	unsigned int val;
	int ret;

	ret = regmap_read(rdev->regmap, rdev->desc->bypass_reg, &val);
	if (ret != 0)
		return ret;

	*enable = val & rdev->desc->bypass_mask;

	return 0;
}
EXPORT_SYMBOL_GPL(regulator_get_bypass_regmap);

/**
 * regulator_allow_bypass - allow the regulator to go into bypass mode
 *
+4 −0
Original line number Diff line number Diff line
@@ -214,6 +214,8 @@ struct regulator_desc {
	unsigned int vsel_mask;
	unsigned int enable_reg;
	unsigned int enable_mask;
	unsigned int bypass_reg;
	unsigned int bypass_mask;

	unsigned int enable_time;
};
@@ -320,6 +322,8 @@ int regulator_disable_regmap(struct regulator_dev *rdev);
int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
				   unsigned int old_selector,
				   unsigned int new_selector);
int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable);
int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable);

void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);