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

Merge branch 'regulator-5.7' into regulator-next

+834 -45
+4
Documentation/devicetree/bindings/mfd/qcom-rpm.txt
··· 61 61 "qcom,rpm-pm8901-regulators" 62 62 "qcom,rpm-pm8921-regulators" 63 63 "qcom,rpm-pm8018-regulators" 64 + "qcom,rpm-smb208-regulators" 64 65 65 66 - vdd_l0_l1_lvs-supply: 66 67 - vdd_l2_l11_l12-supply: ··· 171 170 pm8018: 172 171 s1, s2, s3, s4, s5, , l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, 173 172 l12, l14, lvs1 173 + 174 + smb208: 175 + s1a, s1b, s2a, s2b 174 176 175 177 The content of each sub-node is defined by the standard binding for regulators - 176 178 see regulator.txt - with additional custom properties described below:
+27
Documentation/devicetree/bindings/regulator/mp886x.txt
··· 1 + Monolithic Power Systems MP8867/MP8869 voltage regulator 2 + 3 + Required properties: 4 + - compatible: Must be one of the following. 5 + "mps,mp8867" 6 + "mps,mp8869" 7 + - reg: I2C slave address. 8 + - enable-gpios: enable gpios. 9 + - mps,fb-voltage-divider: An array of two integers containing the resistor 10 + values R1 and R2 of the feedback voltage divider in kilo ohms. 11 + 12 + Any property defined as part of the core regulator binding, defined in 13 + ./regulator.txt, can also be used. 14 + 15 + Example: 16 + 17 + vcpu: regulator@62 { 18 + compatible = "mps,mp8869"; 19 + regulator-name = "vcpu"; 20 + regulator-min-microvolt = <700000>; 21 + regulator-max-microvolt = <850000>; 22 + regulator-always-on; 23 + regulator-boot-on; 24 + enable-gpios = <&porta 1 GPIO_ACTIVE_LOW>; 25 + mps,fb-voltage-divider = <80 240>; 26 + reg = <0x62>; 27 + };
+78
Documentation/devicetree/bindings/regulator/mps,mp5416.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/regulator/mps,mp5416.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Monolithic Power System MP5416 PMIC 8 + 9 + maintainers: 10 + - Saravanan Sekar <sravanhome@gmail.com> 11 + 12 + properties: 13 + $nodename: 14 + pattern: "^pmic@[0-9a-f]{1,2}$" 15 + compatible: 16 + enum: 17 + - mps,mp5416 18 + 19 + reg: 20 + maxItems: 1 21 + 22 + regulators: 23 + type: object 24 + description: | 25 + list of regulators provided by this controller, must be named 26 + after their hardware counterparts BUCK[1-4] and LDO[1-4] 27 + 28 + patternProperties: 29 + "^buck[1-4]$": 30 + allOf: 31 + - $ref: "regulator.yaml#" 32 + type: object 33 + 34 + "^ldo[1-4]$": 35 + allOf: 36 + - $ref: "regulator.yaml#" 37 + type: object 38 + 39 + additionalProperties: false 40 + additionalProperties: false 41 + 42 + required: 43 + - compatible 44 + - reg 45 + - regulators 46 + 47 + additionalProperties: false 48 + 49 + examples: 50 + - | 51 + i2c { 52 + #address-cells = <1>; 53 + #size-cells = <0>; 54 + 55 + pmic@69 { 56 + compatible = "mps,mp5416"; 57 + reg = <0x69>; 58 + 59 + regulators { 60 + 61 + buck1 { 62 + regulator-name = "buck1"; 63 + regulator-min-microvolt = <600000>; 64 + regulator-max-microvolt = <2187500>; 65 + regulator-min-microamp = <3800000>; 66 + regulator-max-microamp = <6800000>; 67 + regulator-boot-on; 68 + }; 69 + 70 + ldo2 { 71 + regulator-name = "ldo2"; 72 + regulator-min-microvolt = <800000>; 73 + regulator-max-microvolt = <3975000>; 74 + }; 75 + }; 76 + }; 77 + }; 78 + ...
+13
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
··· 26 26 "qcom,rpm-pm8994-regulators" 27 27 "qcom,rpm-pm8998-regulators" 28 28 "qcom,rpm-pma8084-regulators" 29 + "qcom,rpm-pmi8994-regulators" 29 30 "qcom,rpm-pmi8998-regulators" 30 31 "qcom,rpm-pms405-regulators" 31 32 ··· 147 146 - vdd_s1-supply: 148 147 - vdd_s2-supply: 149 148 - vdd_s3-supply: 149 + - vdd_bst_byp-supply: 150 + Usage: optional (pmi8994 only) 151 + Value type: <phandle> 152 + Definition: reference to regulator supplying the input pin, as 153 + described in the data sheet 154 + 155 + - vdd_s1-supply: 156 + - vdd_s2-supply: 157 + - vdd_s3-supply: 150 158 - vdd_s4-supply: 151 159 - vdd_s5-supply: 152 160 - vdd_s6-supply: ··· 268 258 s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, l1, l2, l3, l4, l5, 269 259 l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, 270 260 l21, l22, l23, l24, l25, l26, l27, lvs1, lvs2, lvs3, lvs4, 5vs1 261 + 262 + pmi8994: 263 + s1, s2, s3, boost-bypass 271 264 272 265 pmi8998: 273 266 bob
+42
Documentation/devicetree/bindings/regulator/vqmmc-ipq4019-regulator.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/regulator/vqmmc-ipq4019-regulator.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Qualcomm IPQ4019 VQMMC SD LDO regulator 8 + 9 + maintainers: 10 + - Robert Marko <robert.marko@sartura.hr> 11 + 12 + description: | 13 + Qualcomm IPQ4019 SoC-s feature a built a build SD/EMMC controller, 14 + in order to support both 1.8 and 3V I/O voltage levels an LDO 15 + controller is also embedded. 16 + 17 + allOf: 18 + - $ref: "regulator.yaml#" 19 + 20 + properties: 21 + compatible: 22 + const: qcom,vqmmc-ipq4019-regulator 23 + 24 + reg: 25 + maxItems: 1 26 + 27 + required: 28 + - compatible 29 + - reg 30 + 31 + examples: 32 + - | 33 + regulator@1948000 { 34 + compatible = "qcom,vqmmc-ipq4019-regulator"; 35 + reg = <0x01948000 0x4>; 36 + regulator-name = "vqmmc"; 37 + regulator-min-microvolt = <1500000>; 38 + regulator-max-microvolt = <3000000>; 39 + regulator-always-on; 40 + status = "disabled"; 41 + }; 42 + ...
+2 -1
MAINTAINERS
··· 11256 11256 MONOLITHIC POWER SYSTEM PMIC DRIVER 11257 11257 M: Saravanan Sekar <sravanhome@gmail.com> 11258 11258 S: Maintained 11259 - F: Documentation/devicetree/bindings/regulator/mpq7920.yaml 11259 + F: Documentation/devicetree/bindings/regulator/mps,mp*.yaml 11260 + F: drivers/regulator/mp5416.c 11260 11261 F: drivers/regulator/mpq7920.c 11261 11262 F: drivers/regulator/mpq7920.h 11262 11263
+18
drivers/regulator/Kconfig
··· 107 107 108 108 config REGULATOR_ANATOP 109 109 tristate "Freescale i.MX on-chip ANATOP LDO regulators" 110 + depends on ARCH_MXC || COMPILE_TEST 110 111 depends on MFD_SYSCON 111 112 help 112 113 Say y here to support Freescale i.MX on-chip ANATOP LDOs ··· 614 613 through the regulator interface. In addition it enables 615 614 suspend-to-ram/standby transition. 616 615 616 + config REGULATOR_MP5416 617 + tristate "Monolithic MP5416 PMIC" 618 + depends on I2C && OF 619 + select REGMAP_I2C 620 + help 621 + Say y here to support the MP5416 PMIC. This will enable supports 622 + the software controllable 4 buck and 4 LDO regulators. 623 + Say M here if you want to include support for the regulator as a 624 + module. 625 + 617 626 config REGULATOR_MP8859 618 627 tristate "MPS MP8859 regulator driver" 619 628 depends on I2C ··· 634 623 interface. 635 624 Say M here if you want to include support for the regulator as a 636 625 module. The module will be named "mp8859". 626 + 627 + config REGULATOR_MP886X 628 + tristate "MPS MP8869 regulator driver" 629 + depends on I2C && (OF || COMPILE_TEST) 630 + select REGMAP_I2C 631 + help 632 + This driver supports the MP8869 voltage regulator. 637 633 638 634 config REGULATOR_MPQ7920 639 635 tristate "Monolithic MPQ7920 PMIC"
+2
drivers/regulator/Makefile
··· 78 78 obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o 79 79 obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o 80 80 obj-$(CONFIG_REGULATOR_MCP16502) += mcp16502.o 81 + obj-$(CONFIG_REGULATOR_MP5416) += mp5416.o 81 82 obj-$(CONFIG_REGULATOR_MP8859) += mp8859.o 83 + obj-$(CONFIG_REGULATOR_MP886X) += mp886x.o 82 84 obj-$(CONFIG_REGULATOR_MPQ7920) += mpq7920.o 83 85 obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o 84 86 obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o
+7 -3
drivers/regulator/anatop-regulator.c
··· 305 305 /* register regulator */ 306 306 rdev = devm_regulator_register(dev, rdesc, &config); 307 307 if (IS_ERR(rdev)) { 308 - dev_err(dev, "failed to register %s\n", 309 - rdesc->name); 310 - return PTR_ERR(rdev); 308 + ret = PTR_ERR(rdev); 309 + if (ret == -EPROBE_DEFER) 310 + dev_dbg(dev, "failed to register %s, deferring...\n", 311 + rdesc->name); 312 + else 313 + dev_err(dev, "failed to register %s\n", rdesc->name); 314 + return ret; 311 315 } 312 316 313 317 platform_set_drvdata(pdev, rdev);
+2 -4
drivers/regulator/axp20x-regulator.c
··· 381 381 mask = AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_RATE_MASK | 382 382 AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN_MASK; 383 383 enable = (ramp > 0) ? 384 - AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN : 385 - !AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN; 384 + AXP20X_DCDC2_LDO3_V_RAMP_DCDC2_EN : 0; 386 385 break; 387 386 } 388 387 ··· 392 393 mask = AXP20X_DCDC2_LDO3_V_RAMP_LDO3_RATE_MASK | 393 394 AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN_MASK; 394 395 enable = (ramp > 0) ? 395 - AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN : 396 - !AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN; 396 + AXP20X_DCDC2_LDO3_V_RAMP_LDO3_EN : 0; 397 397 break; 398 398 } 399 399
+1 -4
drivers/regulator/core.c
··· 1849 1849 { 1850 1850 struct regulator_dev *rdev; 1851 1851 struct regulator *regulator; 1852 - const char *devname = dev ? dev_name(dev) : "deviceless"; 1853 1852 struct device_link *link; 1854 1853 int ret; 1855 1854 ··· 1886 1887 * enabled, even if it isn't hooked up, and just 1887 1888 * provide a dummy. 1888 1889 */ 1889 - dev_warn(dev, 1890 - "%s supply %s not found, using dummy regulator\n", 1891 - devname, id); 1890 + dev_warn(dev, "supply %s not found, using dummy regulator\n", id); 1892 1891 rdev = dummy_regulator_rdev; 1893 1892 get_device(&rdev->dev); 1894 1893 break;
+1 -1
drivers/regulator/da9062-regulator.c
··· 73 73 int irq_ldo_lim; 74 74 unsigned n_regulators; 75 75 /* Array size to be defined during init. Keep at end. */ 76 - struct da9062_regulator regulator[0]; 76 + struct da9062_regulator regulator[]; 77 77 }; 78 78 79 79 /* Regulator operations */
+37 -29
drivers/regulator/da9063-regulator.c
··· 66 66 }; 67 67 68 68 struct da9063_regulators_pdata { 69 - unsigned n_regulators; 69 + unsigned int n_regulators; 70 70 struct da9063_regulator_data *regulator_data; 71 71 }; 72 72 ··· 133 133 /* Defines asignment of regulators info table to chip model */ 134 134 struct da9063_dev_model { 135 135 const struct da9063_regulator_info *regulator_info; 136 - unsigned n_regulators; 136 + unsigned int n_regulators; 137 137 enum da9063_type type; 138 138 }; 139 139 ··· 152 152 153 153 /* Encapsulates all information for the regulators driver */ 154 154 struct da9063_regulators { 155 - unsigned n_regulators; 155 + unsigned int n_regulators; 156 156 /* Array size to be defined during init. Keep at end. */ 157 - struct da9063_regulator regulator[0]; 157 + struct da9063_regulator regulator[]; 158 158 }; 159 159 160 160 /* BUCK modes for DA9063 */ ··· 167 167 168 168 /* Regulator operations */ 169 169 170 - /* Current limits array (in uA) for BCORE1, BCORE2, BPRO. 171 - Entry indexes corresponds to register values. */ 170 + /* 171 + * Current limits array (in uA) for BCORE1, BCORE2, BPRO. 172 + * Entry indexes corresponds to register values. 173 + */ 172 174 static const unsigned int da9063_buck_a_limits[] = { 173 175 500000, 600000, 700000, 800000, 900000, 1000000, 1100000, 1200000, 174 176 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1900000, 2000000 175 177 }; 176 178 177 - /* Current limits array (in uA) for BMEM, BIO, BPERI. 178 - Entry indexes corresponds to register values. */ 179 + /* 180 + * Current limits array (in uA) for BMEM, BIO, BPERI. 181 + * Entry indexes corresponds to register values. 182 + */ 179 183 static const unsigned int da9063_buck_b_limits[] = { 180 184 1500000, 1600000, 1700000, 1800000, 1900000, 2000000, 2100000, 2200000, 181 185 2300000, 2400000, 2500000, 2600000, 2700000, 2800000, 2900000, 3000000 182 186 }; 183 187 184 - /* Current limits array (in uA) for merged BCORE1 and BCORE2. 185 - Entry indexes corresponds to register values. */ 188 + /* 189 + * Current limits array (in uA) for merged BCORE1 and BCORE2. 190 + * Entry indexes corresponds to register values. 191 + */ 186 192 static const unsigned int da9063_bcores_merged_limits[] = { 187 193 1000000, 1200000, 1400000, 1600000, 1800000, 2000000, 2200000, 2400000, 188 194 2600000, 2800000, 3000000, 3200000, 3400000, 3600000, 3800000, 4000000 189 195 }; 190 196 191 - /* Current limits array (in uA) for merged BMEM and BIO. 192 - Entry indexes corresponds to register values. */ 197 + /* 198 + * Current limits array (in uA) for merged BMEM and BIO. 199 + * Entry indexes corresponds to register values. 200 + */ 193 201 static const unsigned int da9063_bmem_bio_merged_limits[] = { 194 202 3000000, 3200000, 3400000, 3600000, 3800000, 4000000, 4200000, 4400000, 195 203 4600000, 4800000, 5000000, 5200000, 5400000, 5600000, 5800000, 6000000 196 204 }; 197 205 198 - static int da9063_buck_set_mode(struct regulator_dev *rdev, unsigned mode) 206 + static int da9063_buck_set_mode(struct regulator_dev *rdev, unsigned int mode) 199 207 { 200 208 struct da9063_regulator *regl = rdev_get_drvdata(rdev); 201 - unsigned val; 209 + unsigned int val; 202 210 203 211 switch (mode) { 204 212 case REGULATOR_MODE_FAST: ··· 231 223 * There are 3 modes to map to: FAST, NORMAL, and STANDBY. 232 224 */ 233 225 234 - static unsigned da9063_buck_get_mode(struct regulator_dev *rdev) 226 + static unsigned int da9063_buck_get_mode(struct regulator_dev *rdev) 235 227 { 236 228 struct da9063_regulator *regl = rdev_get_drvdata(rdev); 237 229 unsigned int val; ··· 269 261 * There are 2 modes to map to: NORMAL and STANDBY (sleep) for each state. 270 262 */ 271 263 272 - static int da9063_ldo_set_mode(struct regulator_dev *rdev, unsigned mode) 264 + static int da9063_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode) 273 265 { 274 266 struct da9063_regulator *regl = rdev_get_drvdata(rdev); 275 - unsigned val; 267 + unsigned int val; 276 268 277 269 switch (mode) { 278 270 case REGULATOR_MODE_NORMAL: ··· 288 280 return regmap_field_write(regl->sleep, val); 289 281 } 290 282 291 - static unsigned da9063_ldo_get_mode(struct regulator_dev *rdev) 283 + static unsigned int da9063_ldo_get_mode(struct regulator_dev *rdev) 292 284 { 293 285 struct da9063_regulator *regl = rdev_get_drvdata(rdev); 294 286 int ret, val; ··· 369 361 return regmap_field_write(regl->suspend, 0); 370 362 } 371 363 372 - static int da9063_buck_set_suspend_mode(struct regulator_dev *rdev, unsigned mode) 364 + static int da9063_buck_set_suspend_mode(struct regulator_dev *rdev, 365 + unsigned int mode) 373 366 { 374 367 struct da9063_regulator *regl = rdev_get_drvdata(rdev); 375 368 int val; ··· 392 383 return regmap_field_write(regl->mode, val); 393 384 } 394 385 395 - static int da9063_ldo_set_suspend_mode(struct regulator_dev *rdev, unsigned mode) 386 + static int da9063_ldo_set_suspend_mode(struct regulator_dev *rdev, 387 + unsigned int mode) 396 388 { 397 389 struct da9063_regulator *regl = rdev_get_drvdata(rdev); 398 - unsigned val; 390 + unsigned int val; 399 391 400 392 switch (mode) { 401 393 case REGULATOR_MODE_NORMAL: ··· 563 553 struct da9063_regulators *regulators = data; 564 554 struct da9063 *hw = regulators->regulator[0].hw; 565 555 struct da9063_regulator *regl; 566 - int bits, i , ret; 556 + int bits, i, ret; 567 557 568 558 ret = regmap_read(hw->regmap, DA9063_REG_STATUS_D, &bits); 569 559 if (ret < 0) ··· 575 565 continue; 576 566 577 567 if (BIT(regl->info->oc_event.lsb) & bits) { 578 - regulator_lock(regl->rdev); 568 + regulator_lock(regl->rdev); 579 569 regulator_notifier_call_chain(regl->rdev, 580 570 REGULATOR_EVENT_OVER_CURRENT, NULL); 581 - regulator_unlock(regl->rdev); 571 + regulator_unlock(regl->rdev); 582 572 } 583 573 } 584 574 ··· 803 793 804 794 if (regl->info->suspend_sleep.reg) { 805 795 regl->suspend_sleep = devm_regmap_field_alloc(&pdev->dev, 806 - da9063->regmap, regl->info->suspend_sleep); 796 + da9063->regmap, regl->info->suspend_sleep); 807 797 if (IS_ERR(regl->suspend_sleep)) 808 798 return PTR_ERR(regl->suspend_sleep); 809 799 } ··· 837 827 NULL, da9063_ldo_lim_event, 838 828 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 839 829 "LDO_LIM", regulators); 840 - if (ret) { 830 + if (ret) 841 831 dev_err(&pdev->dev, "Failed to request LDO_LIM IRQ.\n"); 842 - return ret; 843 - } 844 832 845 - return 0; 833 + return ret; 846 834 } 847 835 848 836 static struct platform_driver da9063_regulator_driver = {
+245
drivers/regulator/mp5416.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + // 3 + // mp5416.c - regulator driver for mps mp5416 4 + // 5 + // Copyright 2020 Monolithic Power Systems, Inc 6 + // 7 + // Author: Saravanan Sekar <sravanhome@gmail.com> 8 + 9 + #include <linux/kernel.h> 10 + #include <linux/module.h> 11 + #include <linux/init.h> 12 + #include <linux/err.h> 13 + #include <linux/platform_device.h> 14 + #include <linux/regmap.h> 15 + #include <linux/regulator/driver.h> 16 + #include <linux/i2c.h> 17 + 18 + #define MP5416_REG_CTL0 0x00 19 + #define MP5416_REG_CTL1 0x01 20 + #define MP5416_REG_CTL2 0x02 21 + #define MP5416_REG_ILIM 0x03 22 + #define MP5416_REG_BUCK1 0x04 23 + #define MP5416_REG_BUCK2 0x05 24 + #define MP5416_REG_BUCK3 0x06 25 + #define MP5416_REG_BUCK4 0x07 26 + #define MP5416_REG_LDO1 0x08 27 + #define MP5416_REG_LDO2 0x09 28 + #define MP5416_REG_LDO3 0x0a 29 + #define MP5416_REG_LDO4 0x0b 30 + 31 + #define MP5416_REGULATOR_EN BIT(7) 32 + #define MP5416_MASK_VSET 0x7f 33 + #define MP5416_MASK_BUCK1_ILIM 0xc0 34 + #define MP5416_MASK_BUCK2_ILIM 0x0c 35 + #define MP5416_MASK_BUCK3_ILIM 0x30 36 + #define MP5416_MASK_BUCK4_ILIM 0x03 37 + #define MP5416_MASK_DVS_SLEWRATE 0xc0 38 + 39 + /* values in uV */ 40 + #define MP5416_VOLT1_MIN 600000 41 + #define MP5416_VOLT1_MAX 2187500 42 + #define MP5416_VOLT1_STEP 12500 43 + #define MP5416_VOLT2_MIN 800000 44 + #define MP5416_VOLT2_MAX 3975000 45 + #define MP5416_VOLT2_STEP 25000 46 + 47 + #define MP5416_VOLT1_RANGE \ 48 + ((MP5416_VOLT1_MAX - MP5416_VOLT1_MIN)/MP5416_VOLT1_STEP + 1) 49 + #define MP5416_VOLT2_RANGE \ 50 + ((MP5416_VOLT2_MAX - MP5416_VOLT2_MIN)/MP5416_VOLT2_STEP + 1) 51 + 52 + #define MP5416BUCK(_name, _id, _ilim, _dreg, _dval, _vsel) \ 53 + [MP5416_BUCK ## _id] = { \ 54 + .id = MP5416_BUCK ## _id, \ 55 + .name = _name, \ 56 + .of_match = _name, \ 57 + .regulators_node = "regulators", \ 58 + .ops = &mp5416_buck_ops, \ 59 + .min_uV = MP5416_VOLT ##_vsel## _MIN, \ 60 + .uV_step = MP5416_VOLT ##_vsel## _STEP, \ 61 + .n_voltages = MP5416_VOLT ##_vsel## _RANGE, \ 62 + .curr_table = _ilim, \ 63 + .n_current_limits = ARRAY_SIZE(_ilim), \ 64 + .csel_reg = MP5416_REG_ILIM, \ 65 + .csel_mask = MP5416_MASK_BUCK ## _id ##_ILIM, \ 66 + .vsel_reg = MP5416_REG_BUCK ## _id, \ 67 + .vsel_mask = MP5416_MASK_VSET, \ 68 + .enable_reg = MP5416_REG_BUCK ## _id, \ 69 + .enable_mask = MP5416_REGULATOR_EN, \ 70 + .active_discharge_on = _dval, \ 71 + .active_discharge_reg = _dreg, \ 72 + .active_discharge_mask = _dval, \ 73 + .owner = THIS_MODULE, \ 74 + } 75 + 76 + #define MP5416LDO(_name, _id, _dval) \ 77 + [MP5416_LDO ## _id] = { \ 78 + .id = MP5416_LDO ## _id, \ 79 + .name = _name, \ 80 + .of_match = _name, \ 81 + .regulators_node = "regulators", \ 82 + .ops = &mp5416_ldo_ops, \ 83 + .min_uV = MP5416_VOLT2_MIN, \ 84 + .uV_step = MP5416_VOLT2_STEP, \ 85 + .n_voltages = MP5416_VOLT2_RANGE, \ 86 + .vsel_reg = MP5416_REG_LDO ##_id, \ 87 + .vsel_mask = MP5416_MASK_VSET, \ 88 + .enable_reg = MP5416_REG_LDO ##_id, \ 89 + .enable_mask = MP5416_REGULATOR_EN, \ 90 + .active_discharge_on = _dval, \ 91 + .active_discharge_reg = MP5416_REG_CTL2, \ 92 + .active_discharge_mask = _dval, \ 93 + .owner = THIS_MODULE, \ 94 + } 95 + 96 + enum mp5416_regulators { 97 + MP5416_BUCK1, 98 + MP5416_BUCK2, 99 + MP5416_BUCK3, 100 + MP5416_BUCK4, 101 + MP5416_LDO1, 102 + MP5416_LDO2, 103 + MP5416_LDO3, 104 + MP5416_LDO4, 105 + MP5416_MAX_REGULATORS, 106 + }; 107 + 108 + static const struct regmap_config mp5416_regmap_config = { 109 + .reg_bits = 8, 110 + .val_bits = 8, 111 + .max_register = 0x0d, 112 + }; 113 + 114 + /* Current limits array (in uA) 115 + * ILIM1 & ILIM3 116 + */ 117 + static const unsigned int mp5416_I_limits1[] = { 118 + 3800000, 4600000, 5600000, 6800000 119 + }; 120 + 121 + /* ILIM2 & ILIM4 */ 122 + static const unsigned int mp5416_I_limits2[] = { 123 + 2200000, 3200000, 4200000, 5200000 124 + }; 125 + 126 + static int mp5416_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay); 127 + 128 + static const struct regulator_ops mp5416_ldo_ops = { 129 + .enable = regulator_enable_regmap, 130 + .disable = regulator_disable_regmap, 131 + .is_enabled = regulator_is_enabled_regmap, 132 + .list_voltage = regulator_list_voltage_linear, 133 + .map_voltage = regulator_map_voltage_linear, 134 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 135 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 136 + .set_active_discharge = regulator_set_active_discharge_regmap, 137 + }; 138 + 139 + static const struct regulator_ops mp5416_buck_ops = { 140 + .enable = regulator_enable_regmap, 141 + .disable = regulator_disable_regmap, 142 + .is_enabled = regulator_is_enabled_regmap, 143 + .list_voltage = regulator_list_voltage_linear, 144 + .map_voltage = regulator_map_voltage_linear, 145 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 146 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 147 + .set_active_discharge = regulator_set_active_discharge_regmap, 148 + .get_current_limit = regulator_get_current_limit_regmap, 149 + .set_current_limit = regulator_set_current_limit_regmap, 150 + .set_ramp_delay = mp5416_set_ramp_delay, 151 + }; 152 + 153 + static struct regulator_desc mp5416_regulators_desc[MP5416_MAX_REGULATORS] = { 154 + MP5416BUCK("buck1", 1, mp5416_I_limits1, MP5416_REG_CTL1, BIT(0), 1), 155 + MP5416BUCK("buck2", 2, mp5416_I_limits2, MP5416_REG_CTL1, BIT(1), 2), 156 + MP5416BUCK("buck3", 3, mp5416_I_limits1, MP5416_REG_CTL1, BIT(2), 1), 157 + MP5416BUCK("buck4", 4, mp5416_I_limits2, MP5416_REG_CTL2, BIT(5), 2), 158 + MP5416LDO("ldo1", 1, BIT(4)), 159 + MP5416LDO("ldo2", 2, BIT(3)), 160 + MP5416LDO("ldo3", 3, BIT(2)), 161 + MP5416LDO("ldo4", 4, BIT(1)), 162 + }; 163 + 164 + /* 165 + * DVS ramp rate BUCK1 to BUCK4 166 + * 00: 32mV/us 167 + * 01: 16mV/us 168 + * 10: 8mV/us 169 + * 11: 4mV/us 170 + */ 171 + static int mp5416_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) 172 + { 173 + unsigned int ramp_val; 174 + 175 + if (ramp_delay > 32000 || ramp_delay < 0) 176 + return -EINVAL; 177 + 178 + if (ramp_delay <= 4000) 179 + ramp_val = 3; 180 + else if (ramp_delay <= 8000) 181 + ramp_val = 2; 182 + else if (ramp_delay <= 16000) 183 + ramp_val = 1; 184 + else 185 + ramp_val = 0; 186 + 187 + return regmap_update_bits(rdev->regmap, MP5416_REG_CTL2, 188 + MP5416_MASK_DVS_SLEWRATE, ramp_val << 6); 189 + } 190 + 191 + static int mp5416_i2c_probe(struct i2c_client *client) 192 + { 193 + struct device *dev = &client->dev; 194 + struct regulator_config config = { NULL, }; 195 + struct regulator_dev *rdev; 196 + struct regmap *regmap; 197 + int i; 198 + 199 + regmap = devm_regmap_init_i2c(client, &mp5416_regmap_config); 200 + if (IS_ERR(regmap)) { 201 + dev_err(dev, "Failed to allocate regmap!\n"); 202 + return PTR_ERR(regmap); 203 + } 204 + 205 + config.dev = dev; 206 + config.regmap = regmap; 207 + 208 + for (i = 0; i < MP5416_MAX_REGULATORS; i++) { 209 + rdev = devm_regulator_register(dev, 210 + &mp5416_regulators_desc[i], 211 + &config); 212 + if (IS_ERR(rdev)) { 213 + dev_err(dev, "Failed to register regulator!\n"); 214 + return PTR_ERR(rdev); 215 + } 216 + } 217 + 218 + return 0; 219 + } 220 + 221 + static const struct of_device_id mp5416_of_match[] = { 222 + { .compatible = "mps,mp5416" }, 223 + {}, 224 + }; 225 + MODULE_DEVICE_TABLE(of, mp5416_of_match); 226 + 227 + static const struct i2c_device_id mp5416_id[] = { 228 + { "mp5416", }, 229 + { }, 230 + }; 231 + MODULE_DEVICE_TABLE(i2c, mp5416_id); 232 + 233 + static struct i2c_driver mp5416_regulator_driver = { 234 + .driver = { 235 + .name = "mp5416", 236 + .of_match_table = of_match_ptr(mp5416_of_match), 237 + }, 238 + .probe_new = mp5416_i2c_probe, 239 + .id_table = mp5416_id, 240 + }; 241 + module_i2c_driver(mp5416_regulator_driver); 242 + 243 + MODULE_AUTHOR("Saravanan Sekar <sravanhome@gmail.com>"); 244 + MODULE_DESCRIPTION("MP5416 PMIC regulator driver"); 245 + MODULE_LICENSE("GPL");
+1
drivers/regulator/mp8859.c
··· 95 95 .id = 0, 96 96 .type = REGULATOR_VOLTAGE, 97 97 .name = "mp8859_dcdc", 98 + .supply_name = "vin", 98 99 .of_match = of_match_ptr("mp8859_dcdc"), 99 100 .n_voltages = VOL_MAX_IDX + 1, 100 101 .linear_ranges = mp8859_dcdc_ranges,
+290
drivers/regulator/mp886x.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + // 3 + // MP8867/MP8869 regulator driver 4 + // 5 + // Copyright (C) 2020 Synaptics Incorporated 6 + // 7 + // Author: Jisheng Zhang <jszhang@kernel.org> 8 + 9 + #include <linux/gpio/consumer.h> 10 + #include <linux/i2c.h> 11 + #include <linux/module.h> 12 + #include <linux/of_device.h> 13 + #include <linux/regmap.h> 14 + #include <linux/regulator/driver.h> 15 + #include <linux/regulator/of_regulator.h> 16 + 17 + #define MP886X_VSEL 0x00 18 + #define MP886X_V_BOOT (1 << 7) 19 + #define MP886X_SYSCNTLREG1 0x01 20 + #define MP886X_MODE (1 << 0) 21 + #define MP886X_GO (1 << 6) 22 + #define MP886X_EN (1 << 7) 23 + 24 + struct mp886x_device_info { 25 + struct device *dev; 26 + struct regulator_desc desc; 27 + struct regulator_init_data *regulator; 28 + struct gpio_desc *en_gpio; 29 + u32 r[2]; 30 + unsigned int sel; 31 + }; 32 + 33 + static int mp886x_set_mode(struct regulator_dev *rdev, unsigned int mode) 34 + { 35 + switch (mode) { 36 + case REGULATOR_MODE_FAST: 37 + regmap_update_bits(rdev->regmap, MP886X_SYSCNTLREG1, 38 + MP886X_MODE, MP886X_MODE); 39 + break; 40 + case REGULATOR_MODE_NORMAL: 41 + regmap_update_bits(rdev->regmap, MP886X_SYSCNTLREG1, 42 + MP886X_MODE, 0); 43 + break; 44 + default: 45 + return -EINVAL; 46 + } 47 + return 0; 48 + } 49 + 50 + static unsigned int mp886x_get_mode(struct regulator_dev *rdev) 51 + { 52 + u32 val; 53 + int ret; 54 + 55 + ret = regmap_read(rdev->regmap, MP886X_SYSCNTLREG1, &val); 56 + if (ret < 0) 57 + return ret; 58 + if (val & MP886X_MODE) 59 + return REGULATOR_MODE_FAST; 60 + else 61 + return REGULATOR_MODE_NORMAL; 62 + } 63 + 64 + static int mp8869_set_voltage_sel(struct regulator_dev *rdev, unsigned int sel) 65 + { 66 + int ret; 67 + 68 + ret = regmap_update_bits(rdev->regmap, MP886X_SYSCNTLREG1, 69 + MP886X_GO, MP886X_GO); 70 + if (ret < 0) 71 + return ret; 72 + 73 + sel <<= ffs(rdev->desc->vsel_mask) - 1; 74 + return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg, 75 + MP886X_V_BOOT | rdev->desc->vsel_mask, sel); 76 + } 77 + 78 + static inline unsigned int mp8869_scale(unsigned int uv, u32 r1, u32 r2) 79 + { 80 + u32 tmp = uv * r1 / r2; 81 + 82 + return uv + tmp; 83 + } 84 + 85 + static int mp8869_get_voltage_sel(struct regulator_dev *rdev) 86 + { 87 + struct mp886x_device_info *di = rdev_get_drvdata(rdev); 88 + int ret, uv; 89 + unsigned int val; 90 + bool fbloop; 91 + 92 + ret = regmap_read(rdev->regmap, rdev->desc->vsel_reg, &val); 93 + if (ret) 94 + return ret; 95 + 96 + fbloop = val & MP886X_V_BOOT; 97 + if (fbloop) { 98 + uv = rdev->desc->min_uV; 99 + uv = mp8869_scale(uv, di->r[0], di->r[1]); 100 + return regulator_map_voltage_linear(rdev, uv, uv); 101 + } 102 + 103 + val &= rdev->desc->vsel_mask; 104 + val >>= ffs(rdev->desc->vsel_mask) - 1; 105 + 106 + return val; 107 + } 108 + 109 + static const struct regulator_ops mp8869_regulator_ops = { 110 + .set_voltage_sel = mp8869_set_voltage_sel, 111 + .get_voltage_sel = mp8869_get_voltage_sel, 112 + .set_voltage_time_sel = regulator_set_voltage_time_sel, 113 + .map_voltage = regulator_map_voltage_linear, 114 + .list_voltage = regulator_list_voltage_linear, 115 + .enable = regulator_enable_regmap, 116 + .disable = regulator_disable_regmap, 117 + .is_enabled = regulator_is_enabled_regmap, 118 + .set_mode = mp886x_set_mode, 119 + .get_mode = mp886x_get_mode, 120 + }; 121 + 122 + static int mp8867_set_voltage_sel(struct regulator_dev *rdev, unsigned int sel) 123 + { 124 + struct mp886x_device_info *di = rdev_get_drvdata(rdev); 125 + int ret, delta; 126 + 127 + ret = mp8869_set_voltage_sel(rdev, sel); 128 + if (ret < 0) 129 + return ret; 130 + 131 + delta = di->sel - sel; 132 + if (abs(delta) <= 5) 133 + ret = regmap_update_bits(rdev->regmap, MP886X_SYSCNTLREG1, 134 + MP886X_GO, 0); 135 + di->sel = sel; 136 + 137 + return ret; 138 + } 139 + 140 + static int mp8867_get_voltage_sel(struct regulator_dev *rdev) 141 + { 142 + struct mp886x_device_info *di = rdev_get_drvdata(rdev); 143 + int ret, uv; 144 + unsigned int val; 145 + bool fbloop; 146 + 147 + ret = regmap_read(rdev->regmap, rdev->desc->vsel_reg, &val); 148 + if (ret) 149 + return ret; 150 + 151 + fbloop = val & MP886X_V_BOOT; 152 + 153 + val &= rdev->desc->vsel_mask; 154 + val >>= ffs(rdev->desc->vsel_mask) - 1; 155 + 156 + if (fbloop) { 157 + uv = regulator_list_voltage_linear(rdev, val); 158 + uv = mp8869_scale(uv, di->r[0], di->r[1]); 159 + return regulator_map_voltage_linear(rdev, uv, uv); 160 + } 161 + 162 + return val; 163 + } 164 + 165 + static const struct regulator_ops mp8867_regulator_ops = { 166 + .set_voltage_sel = mp8867_set_voltage_sel, 167 + .get_voltage_sel = mp8867_get_voltage_sel, 168 + .set_voltage_time_sel = regulator_set_voltage_time_sel, 169 + .map_voltage = regulator_map_voltage_linear, 170 + .list_voltage = regulator_list_voltage_linear, 171 + .enable = regulator_enable_regmap, 172 + .disable = regulator_disable_regmap, 173 + .is_enabled = regulator_is_enabled_regmap, 174 + .set_mode = mp886x_set_mode, 175 + .get_mode = mp886x_get_mode, 176 + }; 177 + 178 + static int mp886x_regulator_register(struct mp886x_device_info *di, 179 + struct regulator_config *config) 180 + { 181 + struct regulator_desc *rdesc = &di->desc; 182 + struct regulator_dev *rdev; 183 + 184 + rdesc->name = "mp886x-reg"; 185 + rdesc->supply_name = "vin"; 186 + rdesc->ops = of_device_get_match_data(di->dev); 187 + rdesc->type = REGULATOR_VOLTAGE; 188 + rdesc->n_voltages = 128; 189 + rdesc->enable_reg = MP886X_SYSCNTLREG1; 190 + rdesc->enable_mask = MP886X_EN; 191 + rdesc->min_uV = 600000; 192 + rdesc->uV_step = 10000; 193 + rdesc->vsel_reg = MP886X_VSEL; 194 + rdesc->vsel_mask = 0x3f; 195 + rdesc->owner = THIS_MODULE; 196 + 197 + rdev = devm_regulator_register(di->dev, &di->desc, config); 198 + if (IS_ERR(rdev)) 199 + return PTR_ERR(rdev); 200 + di->sel = rdesc->ops->get_voltage_sel(rdev); 201 + return 0; 202 + } 203 + 204 + static const struct regmap_config mp886x_regmap_config = { 205 + .reg_bits = 8, 206 + .val_bits = 8, 207 + }; 208 + 209 + static int mp886x_i2c_probe(struct i2c_client *client, 210 + const struct i2c_device_id *id) 211 + { 212 + struct device *dev = &client->dev; 213 + struct device_node *np = dev->of_node; 214 + struct mp886x_device_info *di; 215 + struct regulator_config config = { }; 216 + struct regmap *regmap; 217 + int ret; 218 + 219 + di = devm_kzalloc(dev, sizeof(struct mp886x_device_info), GFP_KERNEL); 220 + if (!di) 221 + return -ENOMEM; 222 + 223 + di->regulator = of_get_regulator_init_data(dev, np, &di->desc); 224 + if (!di->regulator) { 225 + dev_err(dev, "Platform data not found!\n"); 226 + return -EINVAL; 227 + } 228 + 229 + ret = of_property_read_u32_array(np, "mps,fb-voltage-divider", 230 + di->r, 2); 231 + if (ret) 232 + return ret; 233 + 234 + di->en_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_HIGH); 235 + if (IS_ERR(di->en_gpio)) 236 + return PTR_ERR(di->en_gpio); 237 + 238 + di->dev = dev; 239 + 240 + regmap = devm_regmap_init_i2c(client, &mp886x_regmap_config); 241 + if (IS_ERR(regmap)) { 242 + dev_err(dev, "Failed to allocate regmap!\n"); 243 + return PTR_ERR(regmap); 244 + } 245 + i2c_set_clientdata(client, di); 246 + 247 + config.dev = di->dev; 248 + config.init_data = di->regulator; 249 + config.regmap = regmap; 250 + config.driver_data = di; 251 + config.of_node = np; 252 + 253 + ret = mp886x_regulator_register(di, &config); 254 + if (ret < 0) 255 + dev_err(dev, "Failed to register regulator!\n"); 256 + return ret; 257 + } 258 + 259 + static const struct of_device_id mp886x_dt_ids[] = { 260 + { 261 + .compatible = "mps,mp8867", 262 + .data = &mp8867_regulator_ops 263 + }, 264 + { 265 + .compatible = "mps,mp8869", 266 + .data = &mp8869_regulator_ops 267 + }, 268 + { } 269 + }; 270 + MODULE_DEVICE_TABLE(of, mp886x_dt_ids); 271 + 272 + static const struct i2c_device_id mp886x_id[] = { 273 + { "mp886x", }, 274 + { }, 275 + }; 276 + MODULE_DEVICE_TABLE(i2c, mp886x_id); 277 + 278 + static struct i2c_driver mp886x_regulator_driver = { 279 + .driver = { 280 + .name = "mp886x-regulator", 281 + .of_match_table = of_match_ptr(mp886x_dt_ids), 282 + }, 283 + .probe = mp886x_i2c_probe, 284 + .id_table = mp886x_id, 285 + }; 286 + module_i2c_driver(mp886x_regulator_driver); 287 + 288 + MODULE_AUTHOR("Jisheng Zhang <jszhang@kernel.org>"); 289 + MODULE_DESCRIPTION("MP886x regulator driver"); 290 + MODULE_LICENSE("GPL v2");
+5 -1
drivers/regulator/pwm-regulator.c
··· 354 354 drvdata->pwm = devm_pwm_get(&pdev->dev, NULL); 355 355 if (IS_ERR(drvdata->pwm)) { 356 356 ret = PTR_ERR(drvdata->pwm); 357 - dev_err(&pdev->dev, "Failed to get PWM: %d\n", ret); 357 + if (ret == -EPROBE_DEFER) 358 + dev_dbg(&pdev->dev, 359 + "Failed to get PWM, deferring probe\n"); 360 + else 361 + dev_err(&pdev->dev, "Failed to get PWM: %d\n", ret); 358 362 return ret; 359 363 } 360 364
+9
drivers/regulator/qcom_rpm-regulator.c
··· 925 925 { } 926 926 }; 927 927 928 + static const struct rpm_regulator_data rpm_smb208_regulators[] = { 929 + { "s1a", QCOM_RPM_SMB208_S1a, &smb208_smps, "vin_s1a" }, 930 + { "s1b", QCOM_RPM_SMB208_S1b, &smb208_smps, "vin_s1b" }, 931 + { "s2a", QCOM_RPM_SMB208_S2a, &smb208_smps, "vin_s2a" }, 932 + { "s2b", QCOM_RPM_SMB208_S2b, &smb208_smps, "vin_s2b" }, 933 + { } 934 + }; 935 + 928 936 static const struct of_device_id rpm_of_match[] = { 929 937 { .compatible = "qcom,rpm-pm8018-regulators", 930 938 .data = &rpm_pm8018_regulators }, 931 939 { .compatible = "qcom,rpm-pm8058-regulators", .data = &rpm_pm8058_regulators }, 932 940 { .compatible = "qcom,rpm-pm8901-regulators", .data = &rpm_pm8901_regulators }, 933 941 { .compatible = "qcom,rpm-pm8921-regulators", .data = &rpm_pm8921_regulators }, 942 + { .compatible = "qcom,rpm-smb208-regulators", .data = &rpm_smb208_regulators }, 934 943 { } 935 944 }; 936 945 MODULE_DEVICE_TABLE(of, rpm_of_match);
+47
drivers/regulator/qcom_smd-regulator.c
··· 445 445 .ops = &rpm_smps_ldo_ops_fixed, 446 446 }; 447 447 448 + static const struct regulator_desc pmi8994_ftsmps = { 449 + .linear_ranges = (struct regulator_linear_range[]) { 450 + REGULATOR_LINEAR_RANGE(350000, 0, 199, 5000), 451 + REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000), 452 + }, 453 + .n_linear_ranges = 2, 454 + .n_voltages = 350, 455 + .ops = &rpm_smps_ldo_ops, 456 + }; 457 + 458 + static const struct regulator_desc pmi8994_hfsmps = { 459 + .linear_ranges = (struct regulator_linear_range[]) { 460 + REGULATOR_LINEAR_RANGE(350000, 0, 80, 12500), 461 + REGULATOR_LINEAR_RANGE(700000, 81, 141, 25000), 462 + }, 463 + .n_linear_ranges = 2, 464 + .n_voltages = 142, 465 + .ops = &rpm_smps_ldo_ops, 466 + }; 467 + 468 + static const struct regulator_desc pmi8994_bby = { 469 + .linear_ranges = (struct regulator_linear_range[]) { 470 + REGULATOR_LINEAR_RANGE(3000000, 0, 44, 50000), 471 + }, 472 + .n_linear_ranges = 1, 473 + .n_voltages = 45, 474 + .ops = &rpm_bob_ops, 475 + }; 476 + 477 + static const struct regulator_desc pmi8994_boost = { 478 + .linear_ranges = (struct regulator_linear_range[]) { 479 + REGULATOR_LINEAR_RANGE(4000000, 0, 30, 50000), 480 + }, 481 + .n_linear_ranges = 1, 482 + .n_voltages = 31, 483 + .ops = &rpm_smps_ldo_ops, 484 + }; 485 + 448 486 static const struct regulator_desc pm8998_ftsmps = { 449 487 .linear_ranges = (struct regulator_linear_range[]) { 450 488 REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), ··· 818 780 {} 819 781 }; 820 782 783 + static const struct rpm_regulator_data rpm_pmi8994_regulators[] = { 784 + { "s1", QCOM_SMD_RPM_SMPB, 1, &pmi8994_ftsmps, "vdd_s1" }, 785 + { "s2", QCOM_SMD_RPM_SMPB, 2, &pmi8994_hfsmps, "vdd_s2" }, 786 + { "s2", QCOM_SMD_RPM_SMPB, 3, &pmi8994_hfsmps, "vdd_s3" }, 787 + { "boost-bypass", QCOM_SMD_RPM_BBYB, 1, &pmi8994_bby, "vdd_bst_byp" }, 788 + {} 789 + }; 790 + 821 791 static const struct rpm_regulator_data rpm_pm8998_regulators[] = { 822 792 { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8998_ftsmps, "vdd_s1" }, 823 793 { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8998_ftsmps, "vdd_s2" }, ··· 908 862 { .compatible = "qcom,rpm-pm8994-regulators", .data = &rpm_pm8994_regulators }, 909 863 { .compatible = "qcom,rpm-pm8998-regulators", .data = &rpm_pm8998_regulators }, 910 864 { .compatible = "qcom,rpm-pma8084-regulators", .data = &rpm_pma8084_regulators }, 865 + { .compatible = "qcom,rpm-pmi8994-regulators", .data = &rpm_pmi8994_regulators }, 911 866 { .compatible = "qcom,rpm-pmi8998-regulators", .data = &rpm_pmi8998_regulators }, 912 867 { .compatible = "qcom,rpm-pms405-regulators", .data = &rpm_pms405_regulators }, 913 868 {}
+2 -2
include/linux/regulator/driver.h
··· 277 277 * @curr_table: Current limit mapping table (if table based mapping) 278 278 * 279 279 * @vsel_range_reg: Register for range selector when using pickable ranges 280 - * and regulator_regmap_X_voltage_X_pickable functions. 280 + * and ``regulator_map_*_voltage_*_pickable`` functions. 281 281 * @vsel_range_mask: Mask for register bitfield used for range selector 282 - * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_ 282 + * @vsel_reg: Register for selector when using ``regulator_map_*_voltage_*`` 283 283 * @vsel_mask: Mask for register bitfield used for selector 284 284 * @vsel_step: Specify the resolution of selector stepping when setting 285 285 * voltage. If 0, then no stepping is done (requested selector is
+1
include/linux/soc/qcom/smd-rpm.h
··· 10 10 /* 11 11 * Constants used for addressing resources in the RPM. 12 12 */ 13 + #define QCOM_SMD_RPM_BBYB 0x62796262 13 14 #define QCOM_SMD_RPM_BOBB 0x62626f62 14 15 #define QCOM_SMD_RPM_BOOST 0x61747362 15 16 #define QCOM_SMD_RPM_BUS_CLK 0x316b6c63