Re: [PATCH v2 1/7] regulator: qcom-labibb: Implement voltage selector ops

From: Bjorn Andersson
Date: Thu Jan 14 2021 - 23:41:38 EST


On Wed 13 Jan 13:42 CST 2021, AngeloGioacchino Del Regno wrote:

> Implement {get,set}_voltage_sel, list_voltage, map_voltage with
> the useful regulator regmap helpers in order to be able to manage
> the voltage of LAB (positive) and IBB (negative) regulators.
>
> In particular, the supported ranges are the following:
> - LAB (pos): 4600mV to 6100mV with 100mV stepping,
> - IBB (neg): -7700mV to -1400mV with 100mV stepping.
>

Reviewed-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx>

Regards,
Bjorn

> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxxx>
> ---
> drivers/regulator/qcom-labibb-regulator.c | 28 +++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/drivers/regulator/qcom-labibb-regulator.c b/drivers/regulator/qcom-labibb-regulator.c
> index 8ccf572394a2..9f51c96f16fb 100644
> --- a/drivers/regulator/qcom-labibb-regulator.c
> +++ b/drivers/regulator/qcom-labibb-regulator.c
> @@ -19,6 +19,12 @@
> #define PMI8998_IBB_REG_BASE 0xdc00
>
> #define REG_LABIBB_STATUS1 0x08
> +
> +#define REG_LABIBB_VOLTAGE 0x41
> + #define LABIBB_VOLTAGE_OVERRIDE_EN BIT(7)
> + #define LAB_VOLTAGE_SET_MASK GENMASK(3, 0)
> + #define IBB_VOLTAGE_SET_MASK GENMASK(5, 0)
> +
> #define REG_LABIBB_ENABLE_CTL 0x46
> #define LABIBB_STATUS1_VREG_OK_BIT BIT(7)
> #define LABIBB_CONTROL_ENABLE BIT(7)
> @@ -51,6 +57,10 @@ static const struct regulator_ops qcom_labibb_ops = {
> .enable = regulator_enable_regmap,
> .disable = regulator_disable_regmap,
> .is_enabled = regulator_is_enabled_regmap,
> + .set_voltage_sel = regulator_set_voltage_sel_regmap,
> + .get_voltage_sel = regulator_get_voltage_sel_regmap,
> + .list_voltage = regulator_list_voltage_linear_range,
> + .map_voltage = regulator_map_voltage_linear_range,
> };
>
> static const struct regulator_desc pmi8998_lab_desc = {
> @@ -59,9 +69,18 @@ static const struct regulator_desc pmi8998_lab_desc = {
> .enable_val = LABIBB_CONTROL_ENABLE,
> .enable_time = LAB_ENABLE_TIME,
> .poll_enabled_time = LABIBB_POLL_ENABLED_TIME,
> + .vsel_reg = (PMI8998_LAB_REG_BASE + REG_LABIBB_VOLTAGE),
> + .vsel_mask = LAB_VOLTAGE_SET_MASK,
> + .apply_reg = (PMI8998_LAB_REG_BASE + REG_LABIBB_VOLTAGE),
> + .apply_bit = LABIBB_VOLTAGE_OVERRIDE_EN,
> .off_on_delay = LABIBB_OFF_ON_DELAY,
> .owner = THIS_MODULE,
> .type = REGULATOR_VOLTAGE,
> + .linear_ranges = (struct linear_range[]) {
> + REGULATOR_LINEAR_RANGE(4600000, 0, 15, 100000),
> + },
> + .n_linear_ranges = 1,
> + .n_voltages = 16,
> .ops = &qcom_labibb_ops,
> };
>
> @@ -71,9 +90,18 @@ static const struct regulator_desc pmi8998_ibb_desc = {
> .enable_val = LABIBB_CONTROL_ENABLE,
> .enable_time = IBB_ENABLE_TIME,
> .poll_enabled_time = LABIBB_POLL_ENABLED_TIME,
> + .vsel_reg = (PMI8998_IBB_REG_BASE + REG_LABIBB_VOLTAGE),
> + .vsel_mask = IBB_VOLTAGE_SET_MASK,
> + .apply_reg = (PMI8998_IBB_REG_BASE + REG_LABIBB_VOLTAGE),
> + .apply_bit = LABIBB_VOLTAGE_OVERRIDE_EN,
> .off_on_delay = LABIBB_OFF_ON_DELAY,
> .owner = THIS_MODULE,
> .type = REGULATOR_VOLTAGE,
> + .linear_ranges = (struct linear_range[]) {
> + REGULATOR_LINEAR_RANGE(1400000, 0, 63, 100000),
> + },
> + .n_linear_ranges = 1,
> + .n_voltages = 64,
> .ops = &qcom_labibb_ops,
> };
>
> --
> 2.29.2
>