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

Merge remote-tracking branches 'regulator/topic/tps65217', 'regulator/topic/tps65218', 'regulator/topic/tps6586x' and 'regulator/topic/twl' into regulator-next

+119 -100
+23
Documentation/devicetree/bindings/regulator/tps65218.txt
··· 1 + TPS65218 family of regulators 2 + 3 + Required properties: 4 + For tps65218 regulators/LDOs 5 + - compatible: 6 + - "ti,tps65218-dcdc1" for DCDC1 7 + - "ti,tps65218-dcdc2" for DCDC2 8 + - "ti,tps65218-dcdc3" for DCDC3 9 + - "ti,tps65218-dcdc4" for DCDC4 10 + - "ti,tps65218-dcdc5" for DCDC5 11 + - "ti,tps65218-dcdc6" for DCDC6 12 + - "ti,tps65218-ldo1" for LDO1 13 + 14 + Optional properties: 15 + - Any optional property defined in bindings/regulator/regulator.txt 16 + 17 + Example: 18 + 19 + xyz: regulator@0 { 20 + compatible = "ti,tps65218-dcdc1"; 21 + regulator-min-microvolt = <1000000>; 22 + regulator-max-microvolt = <3000000>; 23 + };
+2 -2
drivers/regulator/tps65217-regulator.c
··· 68 68 static int tps65217_pmic_enable(struct regulator_dev *dev) 69 69 { 70 70 struct tps65217 *tps = rdev_get_drvdata(dev); 71 - unsigned int rid = rdev_get_id(dev); 71 + int rid = rdev_get_id(dev); 72 72 73 73 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4) 74 74 return -EINVAL; ··· 82 82 static int tps65217_pmic_disable(struct regulator_dev *dev) 83 83 { 84 84 struct tps65217 *tps = rdev_get_drvdata(dev); 85 - unsigned int rid = rdev_get_id(dev); 85 + int rid = rdev_get_id(dev); 86 86 87 87 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4) 88 88 return -EINVAL;
+25 -25
drivers/regulator/tps65218-regulator.c
··· 29 29 30 30 enum tps65218_regulators { DCDC1, DCDC2, DCDC3, DCDC4, DCDC5, DCDC6, LDO1 }; 31 31 32 - #define TPS65218_REGULATOR(_name, _id, _ops, _n, _vr, _vm, _er, _em, _t, \ 33 - _lr, _nlr, _delay) \ 32 + #define TPS65218_REGULATOR(_name, _id, _ops, _n, _vr, _vm, _er, _em, \ 33 + _lr, _nlr, _delay, _fuv) \ 34 34 { \ 35 35 .name = _name, \ 36 36 .id = _id, \ ··· 42 42 .vsel_mask = _vm, \ 43 43 .enable_reg = _er, \ 44 44 .enable_mask = _em, \ 45 - .volt_table = _t, \ 45 + .volt_table = NULL, \ 46 46 .linear_ranges = _lr, \ 47 47 .n_linear_ranges = _nlr, \ 48 48 .ramp_delay = _delay, \ 49 + .fixed_uV = _fuv \ 49 50 } \ 50 51 51 52 #define TPS65218_INFO(_id, _nm, _min, _max) \ 52 - { \ 53 + [_id] = { \ 53 54 .id = _id, \ 54 55 .name = _nm, \ 55 56 .min_uV = _min, \ ··· 73 72 }; 74 73 75 74 static struct tps_info tps65218_pmic_regs[] = { 76 - TPS65218_INFO(0, "DCDC1", 850000, 167500), 77 - TPS65218_INFO(1, "DCDC2", 850000, 1675000), 78 - TPS65218_INFO(2, "DCDC3", 900000, 3400000), 79 - TPS65218_INFO(3, "DCDC4", 1175000, 3400000), 80 - TPS65218_INFO(4, "DCDC5", 1000000, 1000000), 81 - TPS65218_INFO(5, "DCDC6", 1800000, 1800000), 82 - TPS65218_INFO(6, "LDO1", 900000, 3400000), 75 + TPS65218_INFO(DCDC1, "DCDC1", 850000, 167500), 76 + TPS65218_INFO(DCDC2, "DCDC2", 850000, 1675000), 77 + TPS65218_INFO(DCDC3, "DCDC3", 900000, 3400000), 78 + TPS65218_INFO(DCDC4, "DCDC4", 1175000, 3400000), 79 + TPS65218_INFO(DCDC5, "DCDC5", 1000000, 1000000), 80 + TPS65218_INFO(DCDC6, "DCDC6", 1800000, 1800000), 81 + TPS65218_INFO(LDO1, "LDO1", 900000, 3400000), 83 82 }; 84 83 85 84 #define TPS65218_OF_MATCH(comp, label) \ ··· 128 127 static int tps65218_pmic_enable(struct regulator_dev *dev) 129 128 { 130 129 struct tps65218 *tps = rdev_get_drvdata(dev); 131 - unsigned int rid = rdev_get_id(dev); 130 + int rid = rdev_get_id(dev); 132 131 133 132 if (rid < TPS65218_DCDC_1 || rid > TPS65218_LDO_1) 134 133 return -EINVAL; ··· 142 141 static int tps65218_pmic_disable(struct regulator_dev *dev) 143 142 { 144 143 struct tps65218 *tps = rdev_get_drvdata(dev); 145 - unsigned int rid = rdev_get_id(dev); 144 + int rid = rdev_get_id(dev); 146 145 147 146 if (rid < TPS65218_DCDC_1 || rid > TPS65218_LDO_1) 148 147 return -EINVAL; ··· 186 185 TPS65218_REGULATOR("DCDC1", TPS65218_DCDC_1, tps65218_dcdc12_ops, 64, 187 186 TPS65218_REG_CONTROL_DCDC1, 188 187 TPS65218_CONTROL_DCDC1_MASK, 189 - TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC1_EN, NULL, 190 - dcdc1_dcdc2_ranges, 2, 4000), 188 + TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC1_EN, 189 + dcdc1_dcdc2_ranges, 2, 4000, 0), 191 190 TPS65218_REGULATOR("DCDC2", TPS65218_DCDC_2, tps65218_dcdc12_ops, 64, 192 191 TPS65218_REG_CONTROL_DCDC2, 193 192 TPS65218_CONTROL_DCDC2_MASK, 194 - TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC2_EN, NULL, 195 - dcdc1_dcdc2_ranges, 2, 4000), 193 + TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC2_EN, 194 + dcdc1_dcdc2_ranges, 2, 4000, 0), 196 195 TPS65218_REGULATOR("DCDC3", TPS65218_DCDC_3, tps65218_ldo1_dcdc34_ops, 197 196 64, TPS65218_REG_CONTROL_DCDC3, 198 197 TPS65218_CONTROL_DCDC3_MASK, TPS65218_REG_ENABLE1, 199 - TPS65218_ENABLE1_DC3_EN, NULL, 200 - ldo1_dcdc3_ranges, 2, 0), 198 + TPS65218_ENABLE1_DC3_EN, ldo1_dcdc3_ranges, 2, 0, 0), 201 199 TPS65218_REGULATOR("DCDC4", TPS65218_DCDC_4, tps65218_ldo1_dcdc34_ops, 202 200 53, TPS65218_REG_CONTROL_DCDC4, 203 201 TPS65218_CONTROL_DCDC4_MASK, 204 - TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC4_EN, NULL, 205 - dcdc4_ranges, 2, 0), 202 + TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC4_EN, 203 + dcdc4_ranges, 2, 0, 0), 206 204 TPS65218_REGULATOR("DCDC5", TPS65218_DCDC_5, tps65218_dcdc56_pmic_ops, 207 205 1, -1, -1, TPS65218_REG_ENABLE1, 208 - TPS65218_ENABLE1_DC5_EN, NULL, NULL, 0, 0), 206 + TPS65218_ENABLE1_DC5_EN, NULL, 0, 0, 1000000), 209 207 TPS65218_REGULATOR("DCDC6", TPS65218_DCDC_6, tps65218_dcdc56_pmic_ops, 210 208 1, -1, -1, TPS65218_REG_ENABLE1, 211 - TPS65218_ENABLE1_DC6_EN, NULL, NULL, 0, 0), 209 + TPS65218_ENABLE1_DC6_EN, NULL, 0, 0, 1800000), 212 210 TPS65218_REGULATOR("LDO1", TPS65218_LDO_1, tps65218_ldo1_dcdc34_ops, 64, 213 211 TPS65218_REG_CONTROL_LDO1, 214 212 TPS65218_CONTROL_LDO1_MASK, TPS65218_REG_ENABLE2, 215 - TPS65218_ENABLE2_LDO1_EN, NULL, ldo1_dcdc3_ranges, 216 - 2, 0), 213 + TPS65218_ENABLE2_LDO1_EN, ldo1_dcdc3_ranges, 214 + 2, 0, 0), 217 215 }; 218 216 219 217 static int tps65218_regulator_probe(struct platform_device *pdev)
+68 -61
drivers/regulator/tps6586x-regulator.c
··· 74 74 .disable = regulator_disable_regmap, 75 75 }; 76 76 77 + static struct regulator_ops tps6586x_rw_linear_regulator_ops = { 78 + .list_voltage = regulator_list_voltage_linear, 79 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 80 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 81 + 82 + .is_enabled = regulator_is_enabled_regmap, 83 + .enable = regulator_enable_regmap, 84 + .disable = regulator_disable_regmap, 85 + }; 86 + 77 87 static struct regulator_ops tps6586x_ro_regulator_ops = { 78 88 .list_voltage = regulator_list_voltage_table, 79 89 .map_voltage = regulator_map_voltage_ascend, ··· 101 91 1200000, 1500000, 1800000, 2500000, 2700000, 2850000, 3100000, 3300000, 102 92 }; 103 93 104 - static const unsigned int tps6586x_ldo4_voltages[] = { 105 - 1700000, 1725000, 1750000, 1775000, 1800000, 1825000, 1850000, 1875000, 106 - 1900000, 1925000, 1950000, 1975000, 2000000, 2025000, 2050000, 2075000, 107 - 2100000, 2125000, 2150000, 2175000, 2200000, 2225000, 2250000, 2275000, 108 - 2300000, 2325000, 2350000, 2375000, 2400000, 2425000, 2450000, 2475000, 109 - }; 110 - 111 - #define tps658623_sm2_voltages tps6586x_ldo4_voltages 112 - 113 94 static const unsigned int tps6586x_ldo_voltages[] = { 114 95 1250000, 1500000, 1800000, 2500000, 2700000, 2850000, 3100000, 3300000, 115 96 }; 116 97 117 - static const unsigned int tps6586x_sm2_voltages[] = { 118 - 3000000, 3050000, 3100000, 3150000, 3200000, 3250000, 3300000, 3350000, 119 - 3400000, 3450000, 3500000, 3550000, 3600000, 3650000, 3700000, 3750000, 120 - 3800000, 3850000, 3900000, 3950000, 4000000, 4050000, 4100000, 4150000, 121 - 4200000, 4250000, 4300000, 4350000, 4400000, 4450000, 4500000, 4550000, 122 - }; 123 - 124 - static int tps658640_sm2_voltages[] = { 125 - 2150000, 2200000, 2250000, 2300000, 2350000, 2400000, 2450000, 2500000, 126 - 2550000, 2600000, 2650000, 2700000, 2750000, 2800000, 2850000, 2900000, 127 - 2950000, 3000000, 3050000, 3100000, 3150000, 3200000, 3250000, 3300000, 128 - 3350000, 3400000, 3450000, 3500000, 3550000, 3600000, 3650000, 3700000, 129 - }; 130 - 131 - static const unsigned int tps658643_sm2_voltages[] = { 132 - 1025000, 1050000, 1075000, 1100000, 1125000, 1150000, 1175000, 1200000, 133 - 1225000, 1250000, 1275000, 1300000, 1325000, 1350000, 1375000, 1400000, 134 - 1425000, 1450000, 1475000, 1500000, 1525000, 1550000, 1575000, 1600000, 135 - 1625000, 1650000, 1675000, 1700000, 1725000, 1750000, 1775000, 1800000, 136 - }; 137 - 138 - static const unsigned int tps6586x_dvm_voltages[] = { 139 - 725000, 750000, 775000, 800000, 825000, 850000, 875000, 900000, 140 - 925000, 950000, 975000, 1000000, 1025000, 1050000, 1075000, 1100000, 141 - 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000, 142 - 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000, 143 - }; 144 - 145 - static int tps658640_rtc_voltages[] = { 98 + static const unsigned int tps658640_rtc_voltages[] = { 146 99 2500000, 2850000, 3100000, 3300000, 147 100 }; 148 101 ··· 132 159 .enable_reg[1] = TPS6586X_SUPPLY##ereg1, \ 133 160 .enable_bit[1] = (ebit1), 134 161 162 + #define TPS6586X_REGULATOR_LINEAR(_id, _ops, _pin_name, n_volt, min_uv, \ 163 + uv_step, vreg, shift, nbits, ereg0, \ 164 + ebit0, ereg1, ebit1, goreg, gobit) \ 165 + .desc = { \ 166 + .supply_name = _pin_name, \ 167 + .name = "REG-" #_id, \ 168 + .ops = &tps6586x_## _ops ## _regulator_ops, \ 169 + .type = REGULATOR_VOLTAGE, \ 170 + .id = TPS6586X_ID_##_id, \ 171 + .n_voltages = n_volt, \ 172 + .min_uV = min_uv, \ 173 + .uV_step = uv_step, \ 174 + .owner = THIS_MODULE, \ 175 + .enable_reg = TPS6586X_SUPPLY##ereg0, \ 176 + .enable_mask = 1 << (ebit0), \ 177 + .vsel_reg = TPS6586X_##vreg, \ 178 + .vsel_mask = ((1 << (nbits)) - 1) << (shift), \ 179 + .apply_reg = (goreg), \ 180 + .apply_bit = (gobit), \ 181 + }, \ 182 + .enable_reg[0] = TPS6586X_SUPPLY##ereg0, \ 183 + .enable_bit[0] = (ebit0), \ 184 + .enable_reg[1] = TPS6586X_SUPPLY##ereg1, \ 185 + .enable_bit[1] = (ebit1), 186 + 135 187 #define TPS6586X_LDO(_id, _pname, vdata, vreg, shift, nbits, \ 136 188 ereg0, ebit0, ereg1, ebit1) \ 137 189 { \ 138 190 TPS6586X_REGULATOR(_id, rw, _pname, vdata, vreg, shift, nbits, \ 139 191 ereg0, ebit0, ereg1, ebit1, 0, 0) \ 192 + } 193 + 194 + #define TPS6586X_LDO_LINEAR(_id, _pname, n_volt, min_uv, uv_step, vreg, \ 195 + shift, nbits, ereg0, ebit0, ereg1, ebit1) \ 196 + { \ 197 + TPS6586X_REGULATOR_LINEAR(_id, rw_linear, _pname, n_volt, \ 198 + min_uv, uv_step, vreg, shift, nbits, \ 199 + ereg0, ebit0, ereg1, ebit1, 0, 0) \ 140 200 } 141 201 142 202 #define TPS6586X_FIXED_LDO(_id, _pname, vdata, vreg, shift, nbits, \ ··· 179 173 ereg0, ebit0, ereg1, ebit1, 0, 0) \ 180 174 } 181 175 182 - #define TPS6586X_DVM(_id, _pname, vdata, vreg, shift, nbits, \ 183 - ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 176 + #define TPS6586X_DVM(_id, _pname, n_volt, min_uv, uv_step, vreg, shift, \ 177 + nbits, ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 184 178 { \ 185 - TPS6586X_REGULATOR(_id, rw, _pname, vdata, vreg, shift, nbits, \ 186 - ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 179 + TPS6586X_REGULATOR_LINEAR(_id, rw_linear, _pname, n_volt, \ 180 + min_uv, uv_step, vreg, shift, nbits, \ 181 + ereg0, ebit0, ereg1, ebit1, goreg, \ 182 + gobit) \ 187 183 } 188 184 189 185 #define TPS6586X_SYS_REGULATOR() \ ··· 218 210 ENE, 7), 219 211 TPS6586X_LDO(LDO_RTC, "REG-SYS", tps6586x_ldo, SUPPLYV4, 3, 3, V4, 7, 220 212 V4, 7), 221 - TPS6586X_LDO(LDO_1, "vinldo01", tps6586x_dvm, SUPPLYV1, 0, 5, ENC, 1, 222 - END, 1), 223 - TPS6586X_LDO(SM_2, "vin-sm2", tps6586x_sm2, SUPPLYV2, 0, 5, ENC, 7, 224 - END, 7), 225 - 226 - TPS6586X_DVM(LDO_2, "vinldo23", tps6586x_dvm, LDO2BV1, 0, 5, ENA, 3, 227 - ENB, 3, TPS6586X_VCC2, BIT(6)), 228 - TPS6586X_DVM(LDO_4, "vinldo4", tps6586x_ldo4, LDO4V1, 0, 5, ENC, 3, 229 - END, 3, TPS6586X_VCC1, BIT(6)), 230 - TPS6586X_DVM(SM_0, "vin-sm0", tps6586x_dvm, SM0V1, 0, 5, ENA, 1, 231 - ENB, 1, TPS6586X_VCC1, BIT(2)), 232 - TPS6586X_DVM(SM_1, "vin-sm1", tps6586x_dvm, SM1V1, 0, 5, ENA, 0, 233 - ENB, 0, TPS6586X_VCC1, BIT(0)), 213 + TPS6586X_LDO_LINEAR(LDO_1, "vinldo01", 32, 725000, 25000, SUPPLYV1, 214 + 0, 5, ENC, 1, END, 1), 215 + TPS6586X_LDO_LINEAR(SM_2, "vin-sm2", 32, 3000000, 50000, SUPPLYV2, 216 + 0, 5, ENC, 7, END, 7), 217 + TPS6586X_DVM(LDO_2, "vinldo23", 32, 725000, 25000, LDO2BV1, 0, 5, 218 + ENA, 3, ENB, 3, TPS6586X_VCC2, BIT(6)), 219 + TPS6586X_DVM(LDO_4, "vinldo4", 32, 1700000, 25000, LDO4V1, 0, 5, 220 + ENC, 3, END, 3, TPS6586X_VCC1, BIT(6)), 221 + TPS6586X_DVM(SM_0, "vin-sm0", 32, 725000, 25000, SM0V1, 0, 5, 222 + ENA, 1, ENB, 1, TPS6586X_VCC1, BIT(2)), 223 + TPS6586X_DVM(SM_1, "vin-sm1", 32, 725000, 25000, SM1V1, 0, 5, 224 + ENA, 0, ENB, 0, TPS6586X_VCC1, BIT(0)), 234 225 }; 235 226 236 227 static struct tps6586x_regulator tps658623_regulator[] = { 237 - TPS6586X_LDO(SM_2, "vin-sm2", tps658623_sm2, SUPPLYV2, 0, 5, ENC, 7, 238 - END, 7), 228 + TPS6586X_LDO_LINEAR(SM_2, "vin-sm2", 32, 1700000, 25000, SUPPLYV2, 229 + 0, 5, ENC, 7, END, 7), 239 230 }; 240 231 241 232 static struct tps6586x_regulator tps658640_regulator[] = { ··· 250 243 ENC, 6, END, 6), 251 244 TPS6586X_LDO(LDO_9, "vinldo9", tps6586x_ldo0, SUPPLYV6, 3, 3, 252 245 ENE, 7, ENE, 7), 253 - TPS6586X_LDO(SM_2, "vin-sm2", tps658640_sm2, SUPPLYV2, 0, 5, 254 - ENC, 7, END, 7), 246 + TPS6586X_LDO_LINEAR(SM_2, "vin-sm2", 32, 2150000, 50000, SUPPLYV2, 247 + 0, 5, ENC, 7, END, 7), 255 248 256 249 TPS6586X_FIXED_LDO(LDO_RTC, "REG-SYS", tps658640_rtc, SUPPLYV4, 3, 2, 257 250 V4, 7, V4, 7), 258 251 }; 259 252 260 253 static struct tps6586x_regulator tps658643_regulator[] = { 261 - TPS6586X_LDO(SM_2, "vin-sm2", tps658643_sm2, SUPPLYV2, 0, 5, ENC, 7, 262 - END, 7), 254 + TPS6586X_LDO_LINEAR(SM_2, "vin-sm2", 32, 1025000, 25000, SUPPLYV2, 255 + 0, 5, ENC, 7, END, 7), 263 256 }; 264 257 265 258 /*
+1 -12
drivers/regulator/twl-regulator.c
··· 1128 1128 if (!initdata) 1129 1129 return -EINVAL; 1130 1130 1131 - info = kmemdup(template, sizeof(*info), GFP_KERNEL); 1131 + info = devm_kmemdup(&pdev->dev, template, sizeof(*info), GFP_KERNEL); 1132 1132 if (!info) 1133 1133 return -ENOMEM; 1134 1134 ··· 1192 1192 if (IS_ERR(rdev)) { 1193 1193 dev_err(&pdev->dev, "can't register %s, %ld\n", 1194 1194 info->desc.name, PTR_ERR(rdev)); 1195 - kfree(info); 1196 1195 return PTR_ERR(rdev); 1197 1196 } 1198 1197 platform_set_drvdata(pdev, rdev); ··· 1211 1212 return 0; 1212 1213 } 1213 1214 1214 - static int twlreg_remove(struct platform_device *pdev) 1215 - { 1216 - struct regulator_dev *rdev = platform_get_drvdata(pdev); 1217 - struct twlreg_info *info = rdev->reg_data; 1218 - 1219 - kfree(info); 1220 - return 0; 1221 - } 1222 - 1223 1215 MODULE_ALIAS("platform:twl_reg"); 1224 1216 1225 1217 static struct platform_driver twlreg_driver = { 1226 1218 .probe = twlreg_probe, 1227 - .remove = twlreg_remove, 1228 1219 /* NOTE: short name, to work around driver model truncation of 1229 1220 * "twl_regulator.12" (and friends) to "twl_regulator.1". 1230 1221 */