Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: tps6586x: Use apply_[reg|bit] with regmap based voltage_sel operations

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

authored by

Axel Lin and committed by
Mark Brown
d645d591 68f75060

+10 -44
+10 -44
drivers/regulator/tps6586x-regulator.c
··· 61 61 62 62 int enable_bit[2]; 63 63 int enable_reg[2]; 64 - 65 - /* for DVM regulators */ 66 - int go_reg; 67 - int go_bit; 68 64 }; 69 65 70 66 static inline struct device *to_tps6586x_dev(struct regulator_dev *rdev) ··· 68 72 return rdev_get_dev(rdev)->parent; 69 73 } 70 74 71 - static int tps6586x_set_voltage_sel(struct regulator_dev *rdev, 72 - unsigned selector) 73 - { 74 - struct tps6586x_regulator *ri = rdev_get_drvdata(rdev); 75 - struct device *parent = to_tps6586x_dev(rdev); 76 - int ret, val, rid = rdev_get_id(rdev); 77 - uint8_t mask; 78 - 79 - val = selector << (ffs(rdev->desc->vsel_mask) - 1); 80 - mask = rdev->desc->vsel_mask; 81 - 82 - ret = tps6586x_update(parent, rdev->desc->vsel_reg, val, mask); 83 - if (ret) 84 - return ret; 85 - 86 - /* Update go bit for DVM regulators */ 87 - switch (rid) { 88 - case TPS6586X_ID_LDO_2: 89 - case TPS6586X_ID_LDO_4: 90 - case TPS6586X_ID_SM_0: 91 - case TPS6586X_ID_SM_1: 92 - ret = tps6586x_set_bits(parent, ri->go_reg, 1 << ri->go_bit); 93 - break; 94 - } 95 - return ret; 96 - } 97 - 98 75 static struct regulator_ops tps6586x_regulator_ops = { 99 76 .list_voltage = regulator_list_voltage_table, 100 77 .get_voltage_sel = regulator_get_voltage_sel_regmap, 101 - .set_voltage_sel = tps6586x_set_voltage_sel, 78 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 102 79 103 80 .is_enabled = regulator_is_enabled_regmap, 104 81 .enable = regulator_enable_regmap, ··· 111 142 }; 112 143 113 144 #define TPS6586X_REGULATOR(_id, _pin_name, vdata, vreg, shift, nbits, \ 114 - ereg0, ebit0, ereg1, ebit1) \ 145 + ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 115 146 .desc = { \ 116 147 .supply_name = _pin_name, \ 117 148 .name = "REG-" #_id, \ ··· 125 156 .enable_mask = 1 << (ebit0), \ 126 157 .vsel_reg = TPS6586X_##vreg, \ 127 158 .vsel_mask = ((1 << (nbits)) - 1) << (shift), \ 159 + .apply_reg = (goreg), \ 160 + .apply_bit = (gobit), \ 128 161 }, \ 129 162 .enable_reg[0] = TPS6586X_SUPPLY##ereg0, \ 130 163 .enable_bit[0] = (ebit0), \ 131 164 .enable_reg[1] = TPS6586X_SUPPLY##ereg1, \ 132 165 .enable_bit[1] = (ebit1), 133 166 134 - #define TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \ 135 - .go_reg = TPS6586X_##goreg, \ 136 - .go_bit = (gobit), 137 - 138 167 #define TPS6586X_LDO(_id, _pname, vdata, vreg, shift, nbits, \ 139 168 ereg0, ebit0, ereg1, ebit1) \ 140 169 { \ 141 170 TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \ 142 - ereg0, ebit0, ereg1, ebit1) \ 171 + ereg0, ebit0, ereg1, ebit1, 0, 0) \ 143 172 } 144 173 145 174 #define TPS6586X_DVM(_id, _pname, vdata, vreg, shift, nbits, \ 146 175 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 147 176 { \ 148 177 TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \ 149 - ereg0, ebit0, ereg1, ebit1) \ 150 - TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \ 178 + ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 151 179 } 152 180 153 181 #define TPS6586X_SYS_REGULATOR() \ ··· 173 207 TPS6586X_LDO(SM_2, "vin-sm2", sm2, SUPPLYV2, 0, 5, ENC, 7, END, 7), 174 208 175 209 TPS6586X_DVM(LDO_2, "vinldo23", dvm, LDO2BV1, 0, 5, ENA, 3, 176 - ENB, 3, VCC2, 6), 210 + ENB, 3, TPS6586X_VCC2, BIT(6)), 177 211 TPS6586X_DVM(LDO_4, "vinldo4", ldo4, LDO4V1, 0, 5, ENC, 3, 178 - END, 3, VCC1, 6), 212 + END, 3, TPS6586X_VCC1, BIT(6)), 179 213 TPS6586X_DVM(SM_0, "vin-sm0", dvm, SM0V1, 0, 5, ENA, 1, 180 - ENB, 1, VCC1, 2), 214 + ENB, 1, TPS6586X_VCC1, BIT(2)), 181 215 TPS6586X_DVM(SM_1, "vin-sm1", dvm, SM1V1, 0, 5, ENA, 0, 182 - ENB, 0, VCC1, 0), 216 + ENB, 0, TPS6586X_VCC1, BIT(0)), 183 217 }; 184 218 185 219 /*