regulator: mt6358: Add output voltage fine tuning to fixed regulators
authorChen-Yu Tsai <wenst@chromium.org>
Wed, 13 Sep 2023 08:29:17 +0000 (16:29 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 25 Sep 2023 12:19:49 +0000 (14:19 +0200)
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.
Some register definitions that are missing are also added.

Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Acked-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230913082919.1631287-3-wenst@chromium.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/mt6358-regulator.c
include/linux/mfd/mt6358/registers.h

index a1eae45f5fee5eaa983caf9bdc967a3ec9698050..b34ad85db771b2d29596973b418fde4ea9d05cc6 100644 (file)
@@ -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,
index 3d33517f178c622f2fefbc59f7fe15605ff06120..5ea2590be71083ddd1db259013f1a2de635d372f 100644 (file)
 #define MT6358_LDO_VBIF28_CON3                0x1db0
 #define MT6358_VCAMA1_ANA_CON0                0x1e08
 #define MT6358_VCAMA2_ANA_CON0                0x1e0c
+#define MT6358_VFE28_ANA_CON0                 0x1e10
+#define MT6358_VCN28_ANA_CON0                 0x1e14
+#define MT6358_VBIF28_ANA_CON0                0x1e18
+#define MT6358_VAUD28_ANA_CON0                0x1e1c
+#define MT6358_VAUX18_ANA_CON0                0x1e20
+#define MT6358_VXO22_ANA_CON0                 0x1e24
 #define MT6358_VCN33_ANA_CON0                 0x1e28
 #define MT6358_VSIM1_ANA_CON0                 0x1e2c
 #define MT6358_VSIM2_ANA_CON0                 0x1e30