Lines Matching +full:buck +full:- +full:c
1 // SPDX-License-Identifier: GPL-2.0+
3 // max77802.c - Regulator driver for the Maxim 77802
5 // Copyright (C) 2013-2014 Google, Inc
8 // Copyright (C) 2012 Samsung Electronics
12 // This driver is based on max8997.c
24 #include <linux/mfd/max77686-private.h>
25 #include <dt-bindings/regulator/maxim,max77802.h>
46 /* MAX77802 has two register formats: 2-bit and 4-bit */
84 return -EINVAL; in max77802_get_opmode_shift()
88 * max77802_set_suspend_disable - Disable the regulator during system suspend
101 if (WARN_ON_ONCE(id >= ARRAY_SIZE(max77802->opmode))) in max77802_set_suspend_disable()
102 return -EINVAL; in max77802_set_suspend_disable()
103 max77802->opmode[id] = val; in max77802_set_suspend_disable()
104 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77802_set_suspend_disable()
105 rdev->desc->enable_mask, val << shift); in max77802_set_suspend_disable()
128 dev_warn(&rdev->dev, "%s: regulator mode: 0x%x not supported\n", in max77802_set_mode()
129 rdev->desc->name, mode); in max77802_set_mode()
130 return -EINVAL; in max77802_set_mode()
133 if (WARN_ON_ONCE(id >= ARRAY_SIZE(max77802->opmode))) in max77802_set_mode()
134 return -EINVAL; in max77802_set_mode()
136 max77802->opmode[id] = val; in max77802_set_mode()
137 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77802_set_mode()
138 rdev->desc->enable_mask, val << shift); in max77802_set_mode()
146 if (WARN_ON_ONCE(id >= ARRAY_SIZE(max77802->opmode))) in max77802_get_mode()
147 return -EINVAL; in max77802_get_mode()
148 return max77802_map_mode(max77802->opmode[id]); in max77802_get_mode()
152 * max77802_set_suspend_mode - set regulator opmode when the system is suspended
159 * Enable Control Logic1 by PWRREQ (BUCK 2-4 and LDOs 2, 4-19, 22-35)
175 if (WARN_ON_ONCE(id >= ARRAY_SIZE(max77802->opmode))) in max77802_set_suspend_mode()
176 return -EINVAL; in max77802_set_suspend_mode()
182 if (max77802->opmode[id] == MAX77802_OFF_PWRREQ) { in max77802_set_suspend_mode()
183 dev_warn(&rdev->dev, "%s: is disabled, mode: 0x%x not set\n", in max77802_set_suspend_mode()
184 rdev->desc->name, mode); in max77802_set_suspend_mode()
195 if (max77802->opmode[id] == MAX77802_OPMODE_NORMAL) in max77802_set_suspend_mode()
206 if (max77802->opmode[id] == MAX77802_OPMODE_LP) in max77802_set_suspend_mode()
207 dev_warn(&rdev->dev, "%s: in Low Power: 0x%x invalid\n", in max77802_set_suspend_mode()
208 rdev->desc->name, mode); in max77802_set_suspend_mode()
211 dev_warn(&rdev->dev, "%s: regulator mode: 0x%x not supported\n", in max77802_set_suspend_mode()
212 rdev->desc->name, mode); in max77802_set_suspend_mode()
213 return -EINVAL; in max77802_set_suspend_mode()
216 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77802_set_suspend_mode()
217 rdev->desc->enable_mask, val << shift); in max77802_set_suspend_mode()
226 if (WARN_ON_ONCE(id >= ARRAY_SIZE(max77802->opmode))) in max77802_enable()
227 return -EINVAL; in max77802_enable()
228 if (max77802->opmode[id] == MAX77802_OFF_PWRREQ) in max77802_enable()
229 max77802->opmode[id] = MAX77802_OPMODE_NORMAL; in max77802_enable()
231 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77802_enable()
232 rdev->desc->enable_mask, in max77802_enable()
233 max77802->opmode[id] << shift); in max77802_enable()
248 dev_warn(&rdev->dev, "%s: ramp_delay: %d not supported, setting 100000\n", in max77802_find_ramp_value()
249 rdev->desc->name, ramp_delay); in max77802_find_ramp_value()
250 return size - 1; in max77802_find_ramp_value()
253 /* Used for BUCKs 2-4 */
261 dev_warn(&rdev->dev, in max77802_set_ramp_delay_2bit()
263 rdev->desc->name); in max77802_set_ramp_delay_2bit()
264 return -EINVAL; in max77802_set_ramp_delay_2bit()
269 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77802_set_ramp_delay_2bit()
283 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77802_set_ramp_delay_4bit()
289 * LDOs 2, 4-19, 22-35
335 /* BUCKs 2-4 */
350 /* BUCKs 5, 7-10 */
364 /* LDOs 3-7, 9-14, 18-26, 28, 29, 32-34 */
378 .vsel_reg = MAX77802_REG_LDO1CTRL1 + num - 1, \
380 .enable_reg = MAX77802_REG_LDO1CTRL1 + num - 1, \
399 .vsel_reg = MAX77802_REG_LDO1CTRL1 + num - 1, \
401 .enable_reg = MAX77802_REG_LDO1CTRL1 + num - 1, \
408 .name = "BUCK"#num, \
409 .of_match = of_match_ptr("BUCK"#num), \
427 /* BUCKS 2-4 */
429 .name = "BUCK"#num, \
430 .of_match = of_match_ptr("BUCK"#num), \
449 /* BUCK 5 */
451 .name = "BUCK"#num, \
452 .of_match = of_match_ptr("BUCK"#num), \
470 /* BUCKs 7-10 */
472 .name = "BUCK"#num, \
473 .of_match = of_match_ptr("BUCK"#num), \
484 .vsel_reg = MAX77802_REG_BUCK7OUT + (num - 7) * 3, \
486 .enable_reg = MAX77802_REG_BUCK7CTRL + (num - 7) * 3, \
538 struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent); in max77802_pmic_probe()
543 max77802 = devm_kzalloc(&pdev->dev, in max77802_pmic_probe()
547 return -ENOMEM; in max77802_pmic_probe()
549 config.dev = iodev->dev; in max77802_pmic_probe()
550 config.regmap = iodev->regmap; in max77802_pmic_probe()
560 ret = regmap_read(iodev->regmap, regulators[i].enable_reg, &val); in max77802_pmic_probe()
562 dev_warn(&pdev->dev, in max77802_pmic_probe()
574 if (id < ARRAY_SIZE(max77802->opmode)) { in max77802_pmic_probe()
576 max77802->opmode[id] = MAX77802_OPMODE_NORMAL; in max77802_pmic_probe()
578 max77802->opmode[id] = val; in max77802_pmic_probe()
581 rdev = devm_regulator_register(&pdev->dev, in max77802_pmic_probe()
585 dev_err(&pdev->dev, in max77802_pmic_probe()
595 {"max77802-pmic", 0},
602 .name = "max77802-pmic",