[PATCH v3 3/3] regulator: mt6358: Add output voltage fine tuning to variable LDOs

Bret Joseph bretjoseph at gmail.com
Mon Dec 11 21:04:51 PST 2023


For the LDO regulators that were not probing, I changed the pickable
regmap to just a regmap function.
In static int mt6358_get_buck_voltage_sel(struct regulator_dev *rdev){}

For LDO1
        ret = (regval & info->da_vsel_mask) >> (ffs(info->da_vsel_mask) - 1);
returns
[    3.470672] shift exponent -1 is negative
[    3.470910] CPU: 7 PID: 63 Comm: kworker/u16:2 Not tainted 6.7.0-rc5 #3
[    3.471278] Hardware name: MT6769H (DT)
[    3.471521] Workqueue: events_unbound async_run_entry_fn

fixed by adding
        .da_vsel_shift = 8

--- linux-6.7.0-rc5/drivers/regulator/mt6358-regulator.c 2023-12-12
05:32:19.703310500 +0200
+++ linux/drivers/regulator/mt6358-regulator.c 2023-12-12
06:25:06.855132318 +0200
@@ -27,6 +27,7 @@
  u32 qi;
  u32 da_vsel_reg;
  u32 da_vsel_mask;
+ u32 da_vsel_shift;
  u32 modeset_reg;
  u32 modeset_mask;
 };
@@ -108,6 +109,7 @@
  }, \
  .da_vsel_reg = _da_vsel_reg, \
  .da_vsel_mask = _da_vsel_mask, \
+ .da_vsel_shift = 8, \
  .status_reg = MT6358_LDO_##vreg##_DBG1, \
  .qi = BIT(0), \
 }
@@ -209,6 +211,7 @@
  }, \
  .da_vsel_reg = _da_vsel_reg, \
  .da_vsel_mask = _da_vsel_mask, \
+ .da_vsel_shift = 8, \
  .status_reg = MT6358_LDO_##vreg##_DBG1, \
  .qi = BIT(0), \
 }
@@ -381,7 +384,7 @@
  return ret;
  }

- ret = (regval & info->da_vsel_mask) >> (ffs(info->da_vsel_mask) - 1);
+ ret = (regval >> info->da_vsel_shift) & info->da_vsel_mask;

  return ret;
 }
@@ -478,8 +481,8 @@
 static const struct regulator_ops mt6358_volt_table_ops = {
  .list_voltage = regulator_list_voltage_pickable_linear_range,
  .map_voltage = regulator_map_voltage_pickable_linear_range,
- .set_voltage_sel = regulator_set_voltage_sel_pickable_regmap,
- .get_voltage_sel = regulator_get_voltage_sel_pickable_regmap,
+ .set_voltage_sel = regulator_set_voltage_sel_regmap,
+ .get_voltage_sel = regulator_get_voltage_sel_regmap,
  .set_voltage_time_sel = regulator_set_voltage_time_sel,
  .enable = regulator_enable_regmap,
  .disable = regulator_disable_regmap,



More information about the Linux-mediatek mailing list