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

Merge remote-tracking branch 'regulator/topic/tps6586x' into regulator-next

+64 -10
+4
drivers/mfd/tps6586x.c
··· 495 495 case TPS658623: 496 496 name = "TPS658623"; 497 497 break; 498 + case TPS658640: 499 + case TPS658640v2: 500 + name = "TPS658640"; 501 + break; 498 502 case TPS658643: 499 503 name = "TPS658643"; 500 504 break;
+58 -10
drivers/regulator/tps6586x-regulator.c
··· 63 63 int enable_reg[2]; 64 64 }; 65 65 66 - static inline struct device *to_tps6586x_dev(struct regulator_dev *rdev) 67 - { 68 - return rdev_get_dev(rdev)->parent; 69 - } 70 - 71 - static struct regulator_ops tps6586x_regulator_ops = { 66 + static struct regulator_ops tps6586x_rw_regulator_ops = { 72 67 .list_voltage = regulator_list_voltage_table, 73 68 .map_voltage = regulator_map_voltage_ascend, 74 69 .get_voltage_sel = regulator_get_voltage_sel_regmap, 75 70 .set_voltage_sel = regulator_set_voltage_sel_regmap, 71 + 72 + .is_enabled = regulator_is_enabled_regmap, 73 + .enable = regulator_enable_regmap, 74 + .disable = regulator_disable_regmap, 75 + }; 76 + 77 + static struct regulator_ops tps6586x_ro_regulator_ops = { 78 + .list_voltage = regulator_list_voltage_table, 79 + .map_voltage = regulator_map_voltage_ascend, 80 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 76 81 77 82 .is_enabled = regulator_is_enabled_regmap, 78 83 .enable = regulator_enable_regmap, ··· 111 106 4200000, 4250000, 4300000, 4350000, 4400000, 4450000, 4500000, 4550000, 112 107 }; 113 108 109 + static int tps658640_sm2_voltages[] = { 110 + 2150000, 2200000, 2250000, 2300000, 2350000, 2400000, 2450000, 2500000, 111 + 2550000, 2600000, 2650000, 2700000, 2750000, 2800000, 2850000, 2900000, 112 + 2950000, 3000000, 3050000, 3100000, 3150000, 3200000, 3250000, 3300000, 113 + 3350000, 3400000, 3450000, 3500000, 3550000, 3600000, 3650000, 3700000, 114 + }; 115 + 114 116 static const unsigned int tps658643_sm2_voltages[] = { 115 117 1025000, 1050000, 1075000, 1100000, 1125000, 1150000, 1175000, 1200000, 116 118 1225000, 1250000, 1275000, 1300000, 1325000, 1350000, 1375000, 1400000, ··· 132 120 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000, 133 121 }; 134 122 135 - #define TPS6586X_REGULATOR(_id, _pin_name, vdata, vreg, shift, nbits, \ 123 + static int tps658640_rtc_voltages[] = { 124 + 2500000, 2850000, 3100000, 3300000, 125 + }; 126 + 127 + #define TPS6586X_REGULATOR(_id, _ops, _pin_name, vdata, vreg, shift, nbits, \ 136 128 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 137 129 .desc = { \ 138 130 .supply_name = _pin_name, \ 139 131 .name = "REG-" #_id, \ 140 - .ops = &tps6586x_regulator_ops, \ 132 + .ops = &tps6586x_## _ops ## _regulator_ops, \ 141 133 .type = REGULATOR_VOLTAGE, \ 142 134 .id = TPS6586X_ID_##_id, \ 143 135 .n_voltages = ARRAY_SIZE(vdata##_voltages), \ ··· 162 146 #define TPS6586X_LDO(_id, _pname, vdata, vreg, shift, nbits, \ 163 147 ereg0, ebit0, ereg1, ebit1) \ 164 148 { \ 165 - TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \ 149 + TPS6586X_REGULATOR(_id, rw, _pname, vdata, vreg, shift, nbits, \ 150 + ereg0, ebit0, ereg1, ebit1, 0, 0) \ 151 + } 152 + 153 + #define TPS6586X_FIXED_LDO(_id, _pname, vdata, vreg, shift, nbits, \ 154 + ereg0, ebit0, ereg1, ebit1) \ 155 + { \ 156 + TPS6586X_REGULATOR(_id, ro, _pname, vdata, vreg, shift, nbits, \ 166 157 ereg0, ebit0, ereg1, ebit1, 0, 0) \ 167 158 } 168 159 169 160 #define TPS6586X_DVM(_id, _pname, vdata, vreg, shift, nbits, \ 170 161 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 171 162 { \ 172 - TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \ 163 + TPS6586X_REGULATOR(_id, rw, _pname, vdata, vreg, shift, nbits, \ 173 164 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 174 165 } 175 166 ··· 228 205 static struct tps6586x_regulator tps658623_regulator[] = { 229 206 TPS6586X_LDO(SM_2, "vin-sm2", tps658623_sm2, SUPPLYV2, 0, 5, ENC, 7, 230 207 END, 7), 208 + }; 209 + 210 + static struct tps6586x_regulator tps658640_regulator[] = { 211 + TPS6586X_LDO(LDO_3, "vinldo23", tps6586x_ldo0, SUPPLYV4, 0, 3, 212 + ENC, 2, END, 2), 213 + TPS6586X_LDO(LDO_5, "REG-SYS", tps6586x_ldo0, SUPPLYV6, 0, 3, 214 + ENE, 6, ENE, 6), 215 + TPS6586X_LDO(LDO_6, "vinldo678", tps6586x_ldo0, SUPPLYV3, 0, 3, 216 + ENC, 4, END, 4), 217 + TPS6586X_LDO(LDO_7, "vinldo678", tps6586x_ldo0, SUPPLYV3, 3, 3, 218 + ENC, 5, END, 5), 219 + TPS6586X_LDO(LDO_8, "vinldo678", tps6586x_ldo0, SUPPLYV2, 5, 3, 220 + ENC, 6, END, 6), 221 + TPS6586X_LDO(LDO_9, "vinldo9", tps6586x_ldo0, SUPPLYV6, 3, 3, 222 + ENE, 7, ENE, 7), 223 + TPS6586X_LDO(SM_2, "vin-sm2", tps658640_sm2, SUPPLYV2, 0, 5, 224 + ENC, 7, END, 7), 225 + 226 + TPS6586X_FIXED_LDO(LDO_RTC, "REG-SYS", tps658640_rtc, SUPPLYV4, 3, 2, 227 + V4, 7, V4, 7), 231 228 }; 232 229 233 230 static struct tps6586x_regulator tps658643_regulator[] = { ··· 337 294 case TPS658623: 338 295 table = tps658623_regulator; 339 296 num = ARRAY_SIZE(tps658623_regulator); 297 + break; 298 + case TPS658640: 299 + case TPS658640v2: 300 + table = tps658640_regulator; 301 + num = ARRAY_SIZE(tps658640_regulator); 340 302 break; 341 303 case TPS658643: 342 304 table = tps658643_regulator;
+2
include/linux/mfd/tps6586x.h
··· 17 17 #define TPS658621A 0x15 18 18 #define TPS658621CD 0x2c 19 19 #define TPS658623 0x1b 20 + #define TPS658640 0x01 21 + #define TPS658640v2 0x02 20 22 #define TPS658643 0x03 21 23 22 24 enum {