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

Merge branches 'ib-mfd-input-leds-power-6.15', 'ib-mfd-power-6.15' and 'ib-mfd-regulator-6.15' into ibs-for-mfd-merged

+416 -3
+47
Documentation/devicetree/bindings/regulator/samsung,s2mpu05.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/samsung,s2mpu05.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung S2MPU05 Power Management IC regulators 8 + 9 + maintainers: 10 + - Kaustabh Chakraborty <kauschluss@disroot.org> 11 + 12 + description: | 13 + This is a part of device tree bindings for S2M and S5M family of Power 14 + Management IC (PMIC). 15 + 16 + The S2MPU05 provides buck and LDO regulators. 17 + 18 + See also Documentation/devicetree/bindings/mfd/samsung,s2mps11.yaml for 19 + additional information and example. 20 + 21 + patternProperties: 22 + # 21 LDOs 23 + "^ldo([1-9]|10|2[5-9]|3[0-5])$": 24 + type: object 25 + $ref: regulator.yaml# 26 + unevaluatedProperties: false 27 + description: 28 + Properties for single LDO regulator. 29 + 30 + LDOs 11-24 are used for CP, and they're left unimplemented due to lack 31 + of documentation on these regulators. 32 + 33 + required: 34 + - regulator-name 35 + 36 + # 5 bucks 37 + "^buck[1-5]$": 38 + type: object 39 + $ref: regulator.yaml# 40 + unevaluatedProperties: false 41 + description: 42 + Properties for single buck regulator. 43 + 44 + required: 45 + - regulator-name 46 + 47 + additionalProperties: false
+1
drivers/mfd/axp20x.c
··· 224 224 regmap_reg_range(AXP717_VSYS_V_POWEROFF, AXP717_VSYS_V_POWEROFF), 225 225 regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN), 226 226 regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE), 227 + regmap_reg_range(AXP717_TS_PIN_CFG, AXP717_TS_PIN_CFG), 227 228 regmap_reg_range(AXP717_ICC_CHG_SET, AXP717_CV_CHG_SET), 228 229 regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL), 229 230 regmap_reg_range(AXP717_ADC_CH_EN_CONTROL, AXP717_ADC_CH_EN_CONTROL),
+12
drivers/mfd/sec-core.c
··· 83 83 { .name = "s2mpu02-regulator", }, 84 84 }; 85 85 86 + static const struct mfd_cell s2mpu05_devs[] = { 87 + { .name = "s2mpu05-regulator", }, 88 + { .name = "s2mps15-rtc", }, 89 + }; 90 + 86 91 static const struct of_device_id sec_dt_match[] = { 87 92 { 88 93 .compatible = "samsung,s5m8767-pmic", ··· 113 108 }, { 114 109 .compatible = "samsung,s2mpu02-pmic", 115 110 .data = (void *)S2MPU02, 111 + }, { 112 + .compatible = "samsung,s2mpu05-pmic", 113 + .data = (void *)S2MPU05, 116 114 }, { 117 115 /* Sentinel */ 118 116 }, ··· 381 373 case S2MPU02: 382 374 sec_devs = s2mpu02_devs; 383 375 num_sec_devs = ARRAY_SIZE(s2mpu02_devs); 376 + break; 377 + case S2MPU05: 378 + sec_devs = s2mpu05_devs; 379 + num_sec_devs = ARRAY_SIZE(s2mpu05_devs); 384 380 break; 385 381 default: 386 382 dev_err(&i2c->dev, "Unsupported device type (%lu)\n",
+34
drivers/mfd/sec-irq.c
··· 14 14 #include <linux/mfd/samsung/s2mps11.h> 15 15 #include <linux/mfd/samsung/s2mps14.h> 16 16 #include <linux/mfd/samsung/s2mpu02.h> 17 + #include <linux/mfd/samsung/s2mpu05.h> 17 18 #include <linux/mfd/samsung/s5m8767.h> 18 19 19 20 static const struct regmap_irq s2mps11_irqs[] = { ··· 226 225 }, 227 226 }; 228 227 228 + static const struct regmap_irq s2mpu05_irqs[] = { 229 + REGMAP_IRQ_REG(S2MPU05_IRQ_PWRONF, 0, S2MPU05_IRQ_PWRONF_MASK), 230 + REGMAP_IRQ_REG(S2MPU05_IRQ_PWRONR, 0, S2MPU05_IRQ_PWRONR_MASK), 231 + REGMAP_IRQ_REG(S2MPU05_IRQ_JIGONBF, 0, S2MPU05_IRQ_JIGONBF_MASK), 232 + REGMAP_IRQ_REG(S2MPU05_IRQ_JIGONBR, 0, S2MPU05_IRQ_JIGONBR_MASK), 233 + REGMAP_IRQ_REG(S2MPU05_IRQ_ACOKF, 0, S2MPU05_IRQ_ACOKF_MASK), 234 + REGMAP_IRQ_REG(S2MPU05_IRQ_ACOKR, 0, S2MPU05_IRQ_ACOKR_MASK), 235 + REGMAP_IRQ_REG(S2MPU05_IRQ_PWRON1S, 0, S2MPU05_IRQ_PWRON1S_MASK), 236 + REGMAP_IRQ_REG(S2MPU05_IRQ_MRB, 0, S2MPU05_IRQ_MRB_MASK), 237 + REGMAP_IRQ_REG(S2MPU05_IRQ_RTC60S, 1, S2MPU05_IRQ_RTC60S_MASK), 238 + REGMAP_IRQ_REG(S2MPU05_IRQ_RTCA1, 1, S2MPU05_IRQ_RTCA1_MASK), 239 + REGMAP_IRQ_REG(S2MPU05_IRQ_RTCA0, 1, S2MPU05_IRQ_RTCA0_MASK), 240 + REGMAP_IRQ_REG(S2MPU05_IRQ_SMPL, 1, S2MPU05_IRQ_SMPL_MASK), 241 + REGMAP_IRQ_REG(S2MPU05_IRQ_RTC1S, 1, S2MPU05_IRQ_RTC1S_MASK), 242 + REGMAP_IRQ_REG(S2MPU05_IRQ_WTSR, 1, S2MPU05_IRQ_WTSR_MASK), 243 + REGMAP_IRQ_REG(S2MPU05_IRQ_INT120C, 2, S2MPU05_IRQ_INT120C_MASK), 244 + REGMAP_IRQ_REG(S2MPU05_IRQ_INT140C, 2, S2MPU05_IRQ_INT140C_MASK), 245 + REGMAP_IRQ_REG(S2MPU05_IRQ_TSD, 2, S2MPU05_IRQ_TSD_MASK), 246 + }; 247 + 229 248 static const struct regmap_irq s5m8767_irqs[] = { 230 249 [S5M8767_IRQ_PWRR] = { 231 250 .reg_offset = 0, ··· 360 339 .ack_base = S2MPU02_REG_INT1, 361 340 }; 362 341 342 + static const struct regmap_irq_chip s2mpu05_irq_chip = { 343 + .name = "s2mpu05", 344 + .irqs = s2mpu05_irqs, 345 + .num_irqs = ARRAY_SIZE(s2mpu05_irqs), 346 + .num_regs = 3, 347 + .status_base = S2MPU05_REG_INT1, 348 + .mask_base = S2MPU05_REG_INT1M, 349 + .ack_base = S2MPU05_REG_INT1, 350 + }; 351 + 363 352 static const struct regmap_irq_chip s5m8767_irq_chip = { 364 353 .name = "s5m8767", 365 354 .irqs = s5m8767_irqs, ··· 413 382 break; 414 383 case S2MPU02: 415 384 sec_irq_chip = &s2mpu02_irq_chip; 385 + break; 386 + case S2MPU05: 387 + sec_irq_chip = &s2mpu05_irq_chip; 416 388 break; 417 389 default: 418 390 dev_err(sec_pmic->dev, "Unknown device type %lu\n",
+2 -2
drivers/regulator/Kconfig
··· 1330 1330 via I2C bus. S2MPA01 has 10 Bucks and 26 LDO outputs. 1331 1331 1332 1332 config REGULATOR_S2MPS11 1333 - tristate "Samsung S2MPS11/13/14/15/S2MPU02 voltage regulator" 1333 + tristate "Samsung S2MPS11/13/14/15/S2MPU02/05 voltage regulator" 1334 1334 depends on MFD_SEC_CORE || COMPILE_TEST 1335 1335 help 1336 - This driver supports a Samsung S2MPS11/13/14/15/S2MPU02 voltage 1336 + This driver supports a Samsung S2MPS11/13/14/15/S2MPU02/05 voltage 1337 1337 output regulator via I2C bus. The chip is comprised of high efficient 1338 1338 Buck converters including Dual-Phase Buck converter, Buck-Boost 1339 1339 converter, various LDOs.
+91 -1
drivers/regulator/s2mps11.c
··· 21 21 #include <linux/mfd/samsung/s2mps14.h> 22 22 #include <linux/mfd/samsung/s2mps15.h> 23 23 #include <linux/mfd/samsung/s2mpu02.h> 24 + #include <linux/mfd/samsung/s2mpu05.h> 24 25 25 26 /* The highest number of possible regulators for supported devices. */ 26 27 #define S2MPS_REGULATOR_MAX S2MPS13_REGULATOR_MAX ··· 254 253 val = S2MPU02_ENABLE_SUSPEND; 255 254 else 256 255 val = rdev->desc->enable_mask; 256 + break; 257 + case S2MPU05: 258 + val = rdev->desc->enable_mask; 257 259 break; 258 260 default: 259 261 return -EINVAL; ··· 1122 1118 regulator_desc_s2mpu02_buck7(7), 1123 1119 }; 1124 1120 1121 + #define regulator_desc_s2mpu05_ldo_reg(num, min, step, reg) { \ 1122 + .name = "ldo"#num, \ 1123 + .id = S2MPU05_LDO##num, \ 1124 + .ops = &s2mpu02_ldo_ops, \ 1125 + .type = REGULATOR_VOLTAGE, \ 1126 + .owner = THIS_MODULE, \ 1127 + .min_uV = min, \ 1128 + .uV_step = step, \ 1129 + .n_voltages = S2MPU05_LDO_N_VOLTAGES, \ 1130 + .vsel_reg = reg, \ 1131 + .vsel_mask = S2MPU05_LDO_VSEL_MASK, \ 1132 + .enable_reg = reg, \ 1133 + .enable_mask = S2MPU05_ENABLE_MASK, \ 1134 + .enable_time = S2MPU05_ENABLE_TIME_LDO \ 1135 + } 1136 + 1137 + #define regulator_desc_s2mpu05_ldo(num, reg, min, step) \ 1138 + regulator_desc_s2mpu05_ldo_reg(num, min, step, S2MPU05_REG_L##num##reg) 1139 + 1140 + #define regulator_desc_s2mpu05_ldo1(num, reg) \ 1141 + regulator_desc_s2mpu05_ldo(num, reg, S2MPU05_LDO_MIN1, S2MPU05_LDO_STEP1) 1142 + 1143 + #define regulator_desc_s2mpu05_ldo2(num, reg) \ 1144 + regulator_desc_s2mpu05_ldo(num, reg, S2MPU05_LDO_MIN1, S2MPU05_LDO_STEP2) 1145 + 1146 + #define regulator_desc_s2mpu05_ldo3(num, reg) \ 1147 + regulator_desc_s2mpu05_ldo(num, reg, S2MPU05_LDO_MIN2, S2MPU05_LDO_STEP2) 1148 + 1149 + #define regulator_desc_s2mpu05_ldo4(num, reg) \ 1150 + regulator_desc_s2mpu05_ldo(num, reg, S2MPU05_LDO_MIN3, S2MPU05_LDO_STEP2) 1151 + 1152 + #define regulator_desc_s2mpu05_buck(num, which) { \ 1153 + .name = "buck"#num, \ 1154 + .id = S2MPU05_BUCK##num, \ 1155 + .ops = &s2mpu02_buck_ops, \ 1156 + .type = REGULATOR_VOLTAGE, \ 1157 + .owner = THIS_MODULE, \ 1158 + .min_uV = S2MPU05_BUCK_MIN##which, \ 1159 + .uV_step = S2MPU05_BUCK_STEP##which, \ 1160 + .n_voltages = S2MPU05_BUCK_N_VOLTAGES, \ 1161 + .vsel_reg = S2MPU05_REG_B##num##CTRL2, \ 1162 + .vsel_mask = S2MPU05_BUCK_VSEL_MASK, \ 1163 + .enable_reg = S2MPU05_REG_B##num##CTRL1, \ 1164 + .enable_mask = S2MPU05_ENABLE_MASK, \ 1165 + .enable_time = S2MPU05_ENABLE_TIME_BUCK##num \ 1166 + } 1167 + 1168 + #define regulator_desc_s2mpu05_buck123(num) regulator_desc_s2mpu05_buck(num, 1) 1169 + #define regulator_desc_s2mpu05_buck45(num) regulator_desc_s2mpu05_buck(num, 2) 1170 + 1171 + static const struct regulator_desc s2mpu05_regulators[] = { 1172 + regulator_desc_s2mpu05_ldo4(1, CTRL), 1173 + regulator_desc_s2mpu05_ldo3(2, CTRL), 1174 + regulator_desc_s2mpu05_ldo2(3, CTRL), 1175 + regulator_desc_s2mpu05_ldo1(4, CTRL), 1176 + regulator_desc_s2mpu05_ldo1(5, CTRL), 1177 + regulator_desc_s2mpu05_ldo1(6, CTRL), 1178 + regulator_desc_s2mpu05_ldo2(7, CTRL), 1179 + regulator_desc_s2mpu05_ldo3(8, CTRL), 1180 + regulator_desc_s2mpu05_ldo4(9, CTRL1), 1181 + regulator_desc_s2mpu05_ldo4(10, CTRL), 1182 + /* LDOs 11-24 are used for CP. They aren't documented. */ 1183 + regulator_desc_s2mpu05_ldo2(25, CTRL), 1184 + regulator_desc_s2mpu05_ldo3(26, CTRL), 1185 + regulator_desc_s2mpu05_ldo2(27, CTRL), 1186 + regulator_desc_s2mpu05_ldo3(28, CTRL), 1187 + regulator_desc_s2mpu05_ldo3(29, CTRL), 1188 + regulator_desc_s2mpu05_ldo2(30, CTRL), 1189 + regulator_desc_s2mpu05_ldo3(31, CTRL), 1190 + regulator_desc_s2mpu05_ldo3(32, CTRL), 1191 + regulator_desc_s2mpu05_ldo3(33, CTRL), 1192 + regulator_desc_s2mpu05_ldo3(34, CTRL), 1193 + regulator_desc_s2mpu05_ldo3(35, CTRL), 1194 + regulator_desc_s2mpu05_buck123(1), 1195 + regulator_desc_s2mpu05_buck123(2), 1196 + regulator_desc_s2mpu05_buck123(3), 1197 + regulator_desc_s2mpu05_buck45(4), 1198 + regulator_desc_s2mpu05_buck45(5), 1199 + }; 1200 + 1125 1201 static int s2mps11_pmic_probe(struct platform_device *pdev) 1126 1202 { 1127 1203 struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); ··· 1242 1158 rdev_num = ARRAY_SIZE(s2mpu02_regulators); 1243 1159 regulators = s2mpu02_regulators; 1244 1160 BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mpu02_regulators)); 1161 + break; 1162 + case S2MPU05: 1163 + rdev_num = ARRAY_SIZE(s2mpu05_regulators); 1164 + regulators = s2mpu05_regulators; 1165 + BUILD_BUG_ON(S2MPS_REGULATOR_MAX < ARRAY_SIZE(s2mpu05_regulators)); 1245 1166 break; 1246 1167 default: 1247 1168 dev_err(&pdev->dev, "Invalid device type: %u\n", ··· 1317 1228 { "s2mps14-regulator", S2MPS14X}, 1318 1229 { "s2mps15-regulator", S2MPS15X}, 1319 1230 { "s2mpu02-regulator", S2MPU02}, 1231 + { "s2mpu05-regulator", S2MPU05}, 1320 1232 { }, 1321 1233 }; 1322 1234 MODULE_DEVICE_TABLE(platform, s2mps11_pmic_id); ··· 1335 1245 1336 1246 /* Module information */ 1337 1247 MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>"); 1338 - MODULE_DESCRIPTION("Samsung S2MPS11/S2MPS14/S2MPS15/S2MPU02 Regulator Driver"); 1248 + MODULE_DESCRIPTION("Samsung S2MPS11/14/15/S2MPU02/05 Regulator Driver"); 1339 1249 MODULE_LICENSE("GPL");
+1
include/linux/mfd/axp20x.h
··· 137 137 #define AXP717_IRQ2_STATE 0x4a 138 138 #define AXP717_IRQ3_STATE 0x4b 139 139 #define AXP717_IRQ4_STATE 0x4c 140 + #define AXP717_TS_PIN_CFG 0x50 140 141 #define AXP717_ICC_CHG_SET 0x62 141 142 #define AXP717_ITERM_CHG_SET 0x63 142 143 #define AXP717_CV_CHG_SET 0x64
+1
include/linux/mfd/samsung/core.h
··· 44 44 S2MPS14X, 45 45 S2MPS15X, 46 46 S2MPU02, 47 + S2MPU05, 47 48 }; 48 49 49 50 /**
+44
include/linux/mfd/samsung/irq.h
··· 150 150 /* Masks for interrupts are the same as in s2mps11 */ 151 151 #define S2MPS14_IRQ_TSD_MASK (1 << 2) 152 152 153 + enum s2mpu05_irq { 154 + S2MPU05_IRQ_PWRONF, 155 + S2MPU05_IRQ_PWRONR, 156 + S2MPU05_IRQ_JIGONBF, 157 + S2MPU05_IRQ_JIGONBR, 158 + S2MPU05_IRQ_ACOKF, 159 + S2MPU05_IRQ_ACOKR, 160 + S2MPU05_IRQ_PWRON1S, 161 + S2MPU05_IRQ_MRB, 162 + 163 + S2MPU05_IRQ_RTC60S, 164 + S2MPU05_IRQ_RTCA1, 165 + S2MPU05_IRQ_RTCA0, 166 + S2MPU05_IRQ_SMPL, 167 + S2MPU05_IRQ_RTC1S, 168 + S2MPU05_IRQ_WTSR, 169 + 170 + S2MPU05_IRQ_INT120C, 171 + S2MPU05_IRQ_INT140C, 172 + S2MPU05_IRQ_TSD, 173 + 174 + S2MPU05_IRQ_NR, 175 + }; 176 + 177 + #define S2MPU05_IRQ_PWRONF_MASK BIT(0) 178 + #define S2MPU05_IRQ_PWRONR_MASK BIT(1) 179 + #define S2MPU05_IRQ_JIGONBF_MASK BIT(2) 180 + #define S2MPU05_IRQ_JIGONBR_MASK BIT(3) 181 + #define S2MPU05_IRQ_ACOKF_MASK BIT(4) 182 + #define S2MPU05_IRQ_ACOKR_MASK BIT(5) 183 + #define S2MPU05_IRQ_PWRON1S_MASK BIT(6) 184 + #define S2MPU05_IRQ_MRB_MASK BIT(7) 185 + 186 + #define S2MPU05_IRQ_RTC60S_MASK BIT(0) 187 + #define S2MPU05_IRQ_RTCA1_MASK BIT(1) 188 + #define S2MPU05_IRQ_RTCA0_MASK BIT(2) 189 + #define S2MPU05_IRQ_SMPL_MASK BIT(3) 190 + #define S2MPU05_IRQ_RTC1S_MASK BIT(4) 191 + #define S2MPU05_IRQ_WTSR_MASK BIT(5) 192 + 193 + #define S2MPU05_IRQ_INT120C_MASK BIT(0) 194 + #define S2MPU05_IRQ_INT140C_MASK BIT(1) 195 + #define S2MPU05_IRQ_TSD_MASK BIT(2) 196 + 153 197 enum s5m8767_irq { 154 198 S5M8767_IRQ_PWRR, 155 199 S5M8767_IRQ_PWRF,
+183
include/linux/mfd/samsung/s2mpu05.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ */ 2 + /* 3 + * Copyright (c) 2015 Samsung Electronics Co., Ltd 4 + * Copyright (c) 2025 Kaustabh Chakraborty <kauschluss@disroot.org> 5 + */ 6 + 7 + #ifndef __LINUX_MFD_S2MPU05_H 8 + #define __LINUX_MFD_S2MPU05_H 9 + 10 + /* S2MPU05 registers */ 11 + enum S2MPU05_reg { 12 + S2MPU05_REG_ID, 13 + S2MPU05_REG_INT1, 14 + S2MPU05_REG_INT2, 15 + S2MPU05_REG_INT3, 16 + S2MPU05_REG_INT1M, 17 + S2MPU05_REG_INT2M, 18 + S2MPU05_REG_INT3M, 19 + S2MPU05_REG_ST1, 20 + S2MPU05_REG_ST2, 21 + S2MPU05_REG_PWRONSRC, 22 + S2MPU05_REG_OFFSRC, 23 + S2MPU05_REG_BU_CHG, 24 + S2MPU05_REG_RTC_BUF, 25 + S2MPU05_REG_CTRL1, 26 + S2MPU05_REG_CTRL2, 27 + S2MPU05_REG_ETC_TEST, 28 + S2MPU05_REG_OTP_ADRL, 29 + S2MPU05_REG_OTP_ADRH, 30 + S2MPU05_REG_OTP_DATA, 31 + S2MPU05_REG_MON1SEL, 32 + S2MPU05_REG_MON2SEL, 33 + S2MPU05_REG_CTRL3, 34 + S2MPU05_REG_ETC_OTP, 35 + S2MPU05_REG_UVLO, 36 + S2MPU05_REG_TIME_CTRL1, 37 + S2MPU05_REG_TIME_CTRL2, 38 + S2MPU05_REG_B1CTRL1, 39 + S2MPU05_REG_B1CTRL2, 40 + S2MPU05_REG_B2CTRL1, 41 + S2MPU05_REG_B2CTRL2, 42 + S2MPU05_REG_B2CTRL3, 43 + S2MPU05_REG_B2CTRL4, 44 + S2MPU05_REG_B3CTRL1, 45 + S2MPU05_REG_B3CTRL2, 46 + S2MPU05_REG_B3CTRL3, 47 + S2MPU05_REG_B4CTRL1, 48 + S2MPU05_REG_B4CTRL2, 49 + S2MPU05_REG_B5CTRL1, 50 + S2MPU05_REG_B5CTRL2, 51 + S2MPU05_REG_BUCK_RAMP, 52 + S2MPU05_REG_LDO_DVS1, 53 + S2MPU05_REG_LDO_DVS9, 54 + S2MPU05_REG_LDO_DVS10, 55 + S2MPU05_REG_L1CTRL, 56 + S2MPU05_REG_L2CTRL, 57 + S2MPU05_REG_L3CTRL, 58 + S2MPU05_REG_L4CTRL, 59 + S2MPU05_REG_L5CTRL, 60 + S2MPU05_REG_L6CTRL, 61 + S2MPU05_REG_L7CTRL, 62 + S2MPU05_REG_L8CTRL, 63 + S2MPU05_REG_L9CTRL1, 64 + S2MPU05_REG_L9CTRL2, 65 + S2MPU05_REG_L10CTRL, 66 + S2MPU05_REG_L11CTRL1, 67 + S2MPU05_REG_L11CTRL2, 68 + S2MPU05_REG_L12CTRL, 69 + S2MPU05_REG_L13CTRL, 70 + S2MPU05_REG_L14CTRL, 71 + S2MPU05_REG_L15CTRL, 72 + S2MPU05_REG_L16CTRL, 73 + S2MPU05_REG_L17CTRL1, 74 + S2MPU05_REG_L17CTRL2, 75 + S2MPU05_REG_L18CTRL1, 76 + S2MPU05_REG_L18CTRL2, 77 + S2MPU05_REG_L19CTRL, 78 + S2MPU05_REG_L20CTRL, 79 + S2MPU05_REG_L21CTRL, 80 + S2MPU05_REG_L22CTRL, 81 + S2MPU05_REG_L23CTRL, 82 + S2MPU05_REG_L24CTRL, 83 + S2MPU05_REG_L25CTRL, 84 + S2MPU05_REG_L26CTRL, 85 + S2MPU05_REG_L27CTRL, 86 + S2MPU05_REG_L28CTRL, 87 + S2MPU05_REG_L29CTRL, 88 + S2MPU05_REG_L30CTRL, 89 + S2MPU05_REG_L31CTRL, 90 + S2MPU05_REG_L32CTRL, 91 + S2MPU05_REG_L33CTRL, 92 + S2MPU05_REG_L34CTRL, 93 + S2MPU05_REG_L35CTRL, 94 + S2MPU05_REG_LDO_DSCH1, 95 + S2MPU05_REG_LDO_DSCH2, 96 + S2MPU05_REG_LDO_DSCH3, 97 + S2MPU05_REG_LDO_DSCH4, 98 + S2MPU05_REG_LDO_DSCH5, 99 + S2MPU05_REG_LDO_CTRL1, 100 + S2MPU05_REG_LDO_CTRL2, 101 + S2MPU05_REG_TCXO_CTRL, 102 + S2MPU05_REG_SELMIF, 103 + }; 104 + 105 + /* S2MPU05 regulator ids */ 106 + enum S2MPU05_regulators { 107 + S2MPU05_LDO1, 108 + S2MPU05_LDO2, 109 + S2MPU05_LDO3, 110 + S2MPU05_LDO4, 111 + S2MPU05_LDO5, 112 + S2MPU05_LDO6, 113 + S2MPU05_LDO7, 114 + S2MPU05_LDO8, 115 + S2MPU05_LDO9, 116 + S2MPU05_LDO10, 117 + S2MPU05_LDO11, 118 + S2MPU05_LDO12, 119 + S2MPU05_LDO13, 120 + S2MPU05_LDO14, 121 + S2MPU05_LDO15, 122 + S2MPU05_LDO16, 123 + S2MPU05_LDO17, 124 + S2MPU05_LDO18, 125 + S2MPU05_LDO19, 126 + S2MPU05_LDO20, 127 + S2MPU05_LDO21, 128 + S2MPU05_LDO22, 129 + S2MPU05_LDO23, 130 + S2MPU05_LDO24, 131 + S2MPU05_LDO25, 132 + S2MPU05_LDO26, 133 + S2MPU05_LDO27, 134 + S2MPU05_LDO28, 135 + S2MPU05_LDO29, 136 + S2MPU05_LDO30, 137 + S2MPU05_LDO31, 138 + S2MPU05_LDO32, 139 + S2MPU05_LDO33, 140 + S2MPU05_LDO34, 141 + S2MPU05_LDO35, 142 + S2MPU05_BUCK1, 143 + S2MPU05_BUCK2, 144 + S2MPU05_BUCK3, 145 + S2MPU05_BUCK4, 146 + S2MPU05_BUCK5, 147 + 148 + S2MPU05_REGULATOR_MAX, 149 + }; 150 + 151 + #define S2MPU05_SW_ENABLE_MASK 0x03 152 + 153 + #define S2MPU05_ENABLE_TIME_LDO 128 154 + #define S2MPU05_ENABLE_TIME_BUCK1 110 155 + #define S2MPU05_ENABLE_TIME_BUCK2 110 156 + #define S2MPU05_ENABLE_TIME_BUCK3 110 157 + #define S2MPU05_ENABLE_TIME_BUCK4 150 158 + #define S2MPU05_ENABLE_TIME_BUCK5 150 159 + 160 + #define S2MPU05_LDO_MIN1 800000 161 + #define S2MPU05_LDO_MIN2 1800000 162 + #define S2MPU05_LDO_MIN3 400000 163 + #define S2MPU05_LDO_STEP1 12500 164 + #define S2MPU05_LDO_STEP2 25000 165 + 166 + #define S2MPU05_BUCK_MIN1 400000 167 + #define S2MPU05_BUCK_MIN2 600000 168 + #define S2MPU05_BUCK_STEP1 6250 169 + #define S2MPU05_BUCK_STEP2 12500 170 + 171 + #define S2MPU05_RAMP_DELAY 12000 /* uV/uS */ 172 + 173 + #define S2MPU05_ENABLE_SHIFT 6 174 + #define S2MPU05_ENABLE_MASK (0x03 << S2MPU05_ENABLE_SHIFT) 175 + 176 + #define S2MPU05_LDO_VSEL_MASK 0x3F 177 + #define S2MPU05_BUCK_VSEL_MASK 0xFF 178 + #define S2MPU05_LDO_N_VOLTAGES (S2MPU05_LDO_VSEL_MASK + 1) 179 + #define S2MPU05_BUCK_N_VOLTAGES (S2MPU05_BUCK_VSEL_MASK + 1) 180 + 181 + #define S2MPU05_PMIC_EN_SHIFT 6 182 + 183 + #endif /* __LINUX_MFD_S2MPU05_H */