The "fixed" LDO regulators found on the MT6358 and MT6366 PMICs have
either no voltage selection register, or only one valid setting.
However these do have a fine voltage calibration setting that can
slightly boost the output voltage from 0 mV to 100 mV, in 10 mV
increments.
Add support for this by changing these into linear range regulators.
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
drivers/regulator/mt6358-regulator.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/regulator/mt6358-regulator.c b/drivers/regulator/mt6358-regulator.c
index 31a16fb28ecd..26060909cf90 100644
--- a/drivers/regulator/mt6358-regulator.c
+++ b/drivers/regulator/mt6358-regulator.c
@@ -123,10 +123,13 @@ struct mt6358_regulator_info {
.type = REGULATOR_VOLTAGE, \
.id = MT6358_ID_##vreg, \
.owner = THIS_MODULE, \
- .n_voltages = 1, \
+ .n_voltages = 11, \
+ .vsel_reg = MT6358_##vreg##_ANA_CON0, \
+ .vsel_mask = GENMASK(3, 0), \
.enable_reg = enreg, \
.enable_mask = BIT(enbit), \
.min_uV = volt, \
+ .uV_step = 10000, \
}, \
.status_reg = MT6358_LDO_##vreg##_CON1, \
.qi = BIT(15), \
@@ -219,10 +222,13 @@ struct mt6358_regulator_info {
.type = REGULATOR_VOLTAGE, \
.id = MT6366_ID_##vreg, \
.owner = THIS_MODULE, \
- .n_voltages = 1, \
+ .n_voltages = 11, \
+ .vsel_reg = MT6358_##vreg##_ANA_CON0, \
+ .vsel_mask = GENMASK(3, 0), \
.enable_reg = enreg, \
.enable_mask = BIT(enbit), \
.min_uV = volt, \
+ .uV_step = 10000, \
}, \
.status_reg = MT6358_LDO_##vreg##_CON1, \
.qi = BIT(15), \
@@ -476,8 +482,13 @@ static const struct regulator_ops mt6358_volt_table_ops = {
.get_status = mt6358_get_status,
};
+/* "Fixed" LDOs with output voltage calibration +0 ~ +10 mV */
static const struct regulator_ops mt6358_volt_fixed_ops = {
.list_voltage = regulator_list_voltage_linear,
+ .map_voltage = regulator_map_voltage_linear,
+ .set_voltage_sel = regulator_set_voltage_sel_regmap,
+ .get_voltage_sel = mt6358_get_buck_voltage_sel,
+ .set_voltage_time_sel = regulator_set_voltage_time_sel,
.enable = regulator_enable_regmap,
.disable = regulator_disable_regmap,
.is_enabled = regulator_is_enabled_regmap,
--
2.41.0.162.gfafddb0af9-goog
On Fri, Jun 09, 2023 at 04:30:04PM +0800, Chen-Yu Tsai wrote: > The "fixed" LDO regulators found on the MT6358 and MT6366 PMICs have > either no voltage selection register, or only one valid setting. > However these do have a fine voltage calibration setting that can > slightly boost the output voltage from 0 mV to 100 mV, in 10 mV > increments. This and the followup patch break the build on both arm64 and x86_64: /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VFE28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VIO28_ANA_CON0’? 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ | ^~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:525:9: note: in expansion of macro ‘MT6358_REG_FIXED’ 525 | MT6358_REG_FIXED("ldo_vfe28", VFE28, MT6358_LDO_VFE28_CON0, 0, 2800000), | ^~~~~~~~~~~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VCN28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VCN18_ANA_CON0’? 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ | ^~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:526:9: note: in expansion of macro ‘MT6358_REG_FIXED’ 526 | MT6358_REG_FIXED("ldo_vcn28", VCN28, MT6358_LDO_VCN28_CON0, 0, 2800000), | ^~~~~~~~~~~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VXO22_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VIO28_ANA_CON0’? 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ | ^~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:527:9: note: in expansion of macro ‘MT6358_REG_FIXED’ 527 | MT6358_REG_FIXED("ldo_vxo22", VXO22, MT6358_LDO_VXO22_CON0, 0, 2200000), | ^~~~~~~~~~~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VAUX18_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VRF18_ANA_CON0’? 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ | ^~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:528:9: note: in expansion of macro ‘MT6358_REG_FIXED’ 528 | MT6358_REG_FIXED("ldo_vaux18", VAUX18, | ^~~~~~~~~~~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VBIF28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VIO28_ANA_CON0’? 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ | ^~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:530:9: note: in expansion of macro ‘MT6358_REG_FIXED’ 530 | MT6358_REG_FIXED("ldo_vbif28", VBIF28, | ^~~~~~~~~~~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VAUD28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VA12_ANA_CON0’? 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ | ^~~~~~~ /build/stage/linux/drivers/regulator/mt6358-regulator.c:535:9: note: in expansion of macro ‘MT6358_REG_FIXED’ 535 | MT6358_REG_FIXED("ldo_vaud28", VAUD28, | ^~~~~~~~~~~~~~~~
On Thu, Jun 15, 2023 at 12:15 AM Mark Brown <broonie@kernel.org> wrote: > > On Fri, Jun 09, 2023 at 04:30:04PM +0800, Chen-Yu Tsai wrote: > > The "fixed" LDO regulators found on the MT6358 and MT6366 PMICs have > > either no voltage selection register, or only one valid setting. > > However these do have a fine voltage calibration setting that can > > slightly boost the output voltage from 0 mV to 100 mV, in 10 mV > > increments. > > This and the followup patch break the build on both arm64 and x86_64: > > /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VFE28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VIO28_ANA_CON0’? > 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ > | ^~~~~~~ Argh, I sequenced the patches in my tree incorrectly. I see you already merged the first six patches. I'll send a new version including a header change that this patch needs, and other fixups that reviewers suggested. ChenYu > /build/stage/linux/drivers/regulator/mt6358-regulator.c:525:9: note: in expansion of macro ‘MT6358_REG_FIXED’ > 525 | MT6358_REG_FIXED("ldo_vfe28", VFE28, MT6358_LDO_VFE28_CON0, 0, 2800000), > | ^~~~~~~~~~~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VCN28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VCN18_ANA_CON0’? > 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ > | ^~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:526:9: note: in expansion of macro ‘MT6358_REG_FIXED’ > 526 | MT6358_REG_FIXED("ldo_vcn28", VCN28, MT6358_LDO_VCN28_CON0, 0, 2800000), > | ^~~~~~~~~~~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VXO22_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VIO28_ANA_CON0’? > 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ > | ^~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:527:9: note: in expansion of macro ‘MT6358_REG_FIXED’ > 527 | MT6358_REG_FIXED("ldo_vxo22", VXO22, MT6358_LDO_VXO22_CON0, 0, 2200000), > | ^~~~~~~~~~~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VAUX18_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VRF18_ANA_CON0’? > 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ > | ^~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:528:9: note: in expansion of macro ‘MT6358_REG_FIXED’ > 528 | MT6358_REG_FIXED("ldo_vaux18", VAUX18, > | ^~~~~~~~~~~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VBIF28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VIO28_ANA_CON0’? > 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ > | ^~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:530:9: note: in expansion of macro ‘MT6358_REG_FIXED’ > 530 | MT6358_REG_FIXED("ldo_vbif28", VBIF28, > | ^~~~~~~~~~~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:127:29: error: ‘MT6358_VAUD28_ANA_CON0’ undeclared here (not in a function); did you mean ‘MT6358_VA12_ANA_CON0’? > 127 | .vsel_reg = MT6358_##vreg##_ANA_CON0, \ > | ^~~~~~~ > /build/stage/linux/drivers/regulator/mt6358-regulator.c:535:9: note: in expansion of macro ‘MT6358_REG_FIXED’ > 535 | MT6358_REG_FIXED("ldo_vaud28", VAUD28, > | ^~~~~~~~~~~~~~~~
Il 09/06/23 10:30, Chen-Yu Tsai ha scritto: > The "fixed" LDO regulators found on the MT6358 and MT6366 PMICs have > either no voltage selection register, or only one valid setting. > However these do have a fine voltage calibration setting that can > slightly boost the output voltage from 0 mV to 100 mV, in 10 mV > increments. > > Add support for this by changing these into linear range regulators. > > Signed-off-by: Chen-Yu Tsai <wenst@chromium.org> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
© 2016 - 2024 Red Hat, Inc.