regulator: mt6358: split ops for buck and linear range LDO regulators
authorChen-Yu Tsai <wenst@chromium.org>
Wed, 20 Sep 2023 08:53:34 +0000 (16:53 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 10 Oct 2023 20:00:40 +0000 (22:00 +0200)
[ Upstream commit 7e37c851374eca2d1f6128de03195c9f7b4baaf2 ]

The buck and linear range LDO (VSRAM_*) regulators share one set of ops.
This set includes support for get/set mode. However this only makes
sense for buck regulators, not LDOs. The callbacks were not checking
whether the register offset and/or mask for mode setting was valid or
not. This ends up making the kernel report "normal" mode operation for
the LDOs.

Create a new set of ops without the get/set mode callbacks for the
linear range LDO regulators.

Fixes: f67ff1bd58f0 ("regulator: mt6358: Add support for MT6358 regulator")
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Link: https://lore.kernel.org/r/20230920085336.136238-1-wenst@chromium.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/regulator/mt6358-regulator.c

index 56b5fc9f62c949cf902bde48a9ed24399cabd964..a0441b8086712f0aacbfecb53d0099767b7c57ff 100644 (file)
@@ -41,7 +41,7 @@ struct mt6358_regulator_info {
        .desc = {       \
                .name = #vreg,  \
                .of_match = of_match_ptr(match),        \
-               .ops = &mt6358_volt_range_ops,  \
+               .ops = &mt6358_buck_ops,        \
                .type = REGULATOR_VOLTAGE,      \
                .id = MT6358_ID_##vreg,         \
                .owner = THIS_MODULE,           \
@@ -137,7 +137,7 @@ struct mt6358_regulator_info {
        .desc = {       \
                .name = #vreg,  \
                .of_match = of_match_ptr(match),        \
-               .ops = &mt6358_volt_range_ops,  \
+               .ops = &mt6358_buck_ops,        \
                .type = REGULATOR_VOLTAGE,      \
                .id = MT6366_ID_##vreg,         \
                .owner = THIS_MODULE,           \
@@ -448,7 +448,7 @@ static unsigned int mt6358_regulator_get_mode(struct regulator_dev *rdev)
        }
 }
 
-static const struct regulator_ops mt6358_volt_range_ops = {
+static const struct regulator_ops mt6358_buck_ops = {
        .list_voltage = regulator_list_voltage_linear,
        .map_voltage = regulator_map_voltage_linear,
        .set_voltage_sel = regulator_set_voltage_sel_regmap,
@@ -462,6 +462,18 @@ static const struct regulator_ops mt6358_volt_range_ops = {
        .get_mode = mt6358_regulator_get_mode,
 };
 
+static const struct regulator_ops mt6358_volt_range_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,
+       .get_status = mt6358_get_status,
+};
+
 static const struct regulator_ops mt6358_volt_table_ops = {
        .list_voltage = regulator_list_voltage_table,
        .map_voltage = regulator_map_voltage_iterate,