Lines Matching +full:mode +full:- +full:normal

1 // SPDX-License-Identifier: GPL-2.0+
3 // max77686.c - Regulator driver for the Maxim 77686
21 #include <linux/mfd/max77686-private.h>
43 * Forcing low power mode: LDO1, 3-5, 9, 13, 17-26
48 * - LDO2, 6-8, 10-12, 14-16
49 * - buck[1234]
52 /* Low power mode controlled by PWRREQ: All LDOs */
54 /* Forcing low power mode: buck[234] */
101 * replaces "normal" mode. Any change from low power mode to normal
103 * Map normal mode to proper value for such regulators.
112 if (test_bit(id, max77686->gpio_enabled)) in max77686_map_normal_mode()
119 /* Some BUCKs and LDOs supports Normal[ON/OFF] mode during suspend */
129 ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_set_suspend_disable()
130 rdev->desc->enable_mask, val << shift); in max77686_set_suspend_disable()
134 max77686->opmode[id] = val; in max77686_set_suspend_disable()
138 /* Some LDOs supports [LPM/Normal]ON mode during suspend state */
140 unsigned int mode) in max77686_set_suspend_mode() argument
146 /* BUCK[5-9] doesn't support this feature */ in max77686_set_suspend_mode()
150 switch (mode) { in max77686_set_suspend_mode()
151 case REGULATOR_MODE_IDLE: /* ON in LP Mode */ in max77686_set_suspend_mode()
154 case REGULATOR_MODE_NORMAL: /* ON in Normal Mode */ in max77686_set_suspend_mode()
159 rdev->desc->name, mode); in max77686_set_suspend_mode()
160 return -EINVAL; in max77686_set_suspend_mode()
163 ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_set_suspend_mode()
164 rdev->desc->enable_mask, in max77686_set_suspend_mode()
169 max77686->opmode[id] = val; in max77686_set_suspend_mode()
173 /* Some LDOs supports LPM-ON/OFF/Normal-ON mode during suspend state */
175 unsigned int mode) in max77686_ldo_set_suspend_mode() argument
181 switch (mode) { in max77686_ldo_set_suspend_mode()
185 case REGULATOR_MODE_IDLE: /* ON in LP Mode */ in max77686_ldo_set_suspend_mode()
188 case REGULATOR_MODE_NORMAL: /* ON in Normal Mode */ in max77686_ldo_set_suspend_mode()
193 rdev->desc->name, mode); in max77686_ldo_set_suspend_mode()
194 return -EINVAL; in max77686_ldo_set_suspend_mode()
197 ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_ldo_set_suspend_mode()
198 rdev->desc->enable_mask, in max77686_ldo_set_suspend_mode()
203 max77686->opmode[id] = val; in max77686_ldo_set_suspend_mode()
215 if (max77686->opmode[id] == MAX77686_OFF_PWRREQ) in max77686_enable()
216 max77686->opmode[id] = max77686_map_normal_mode(max77686, id); in max77686_enable()
218 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_enable()
219 rdev->desc->enable_mask, in max77686_enable()
220 max77686->opmode[id] << shift); in max77686_enable()
241 rdev->desc->name, ramp_delay); in max77686_set_ramp_delay()
244 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_set_ramp_delay()
252 struct max77686_data *max77686 = config->driver_data; in max77686_of_parse_cb()
255 switch (desc->id) { in max77686_of_parse_cb()
259 config->ena_gpiod = fwnode_gpiod_get_index( in max77686_of_parse_cb()
264 "max77686-regulator"); in max77686_of_parse_cb()
265 if (IS_ERR(config->ena_gpiod)) in max77686_of_parse_cb()
266 config->ena_gpiod = NULL; in max77686_of_parse_cb()
272 if (config->ena_gpiod) { in max77686_of_parse_cb()
273 set_bit(desc->id, max77686->gpio_enabled); in max77686_of_parse_cb()
275 ret = regmap_update_bits(config->regmap, desc->enable_reg, in max77686_of_parse_cb()
276 desc->enable_mask, in max77686_of_parse_cb()
279 gpiod_put(config->ena_gpiod); in max77686_of_parse_cb()
280 config->ena_gpiod = NULL; in max77686_of_parse_cb()
340 .regulators_node = of_match_ptr("voltage-regulators"), \
350 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
352 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
359 .regulators_node = of_match_ptr("voltage-regulators"), \
368 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
370 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
377 .regulators_node = of_match_ptr("voltage-regulators"), \
386 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
388 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
395 .regulators_node = of_match_ptr("voltage-regulators"), \
404 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
406 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
413 .regulators_node = of_match_ptr("voltage-regulators"), \
424 .vsel_reg = MAX77686_REG_BUCK5OUT + (num - 5) * 2, \
426 .enable_reg = MAX77686_REG_BUCK5CTRL + (num - 5) * 2, \
432 .regulators_node = of_match_ptr("voltage-regulators"), \
450 .regulators_node = of_match_ptr("voltage-regulators"), \
460 .vsel_reg = MAX77686_REG_BUCK2DVS1 + (num - 2) * 10, \
462 .enable_reg = MAX77686_REG_BUCK2CTRL1 + (num - 2) * 10, \
507 struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent); in max77686_pmic_probe()
512 dev_dbg(&pdev->dev, "%s\n", __func__); in max77686_pmic_probe()
514 max77686 = devm_kzalloc(&pdev->dev, sizeof(struct max77686_data), in max77686_pmic_probe()
517 return -ENOMEM; in max77686_pmic_probe()
519 max77686->dev = &pdev->dev; in max77686_pmic_probe()
520 config.dev = iodev->dev; in max77686_pmic_probe()
521 config.regmap = iodev->regmap; in max77686_pmic_probe()
529 max77686->opmode[id] = MAX77686_NORMAL; in max77686_pmic_probe()
530 rdev = devm_regulator_register(&pdev->dev, in max77686_pmic_probe()
534 dev_err(&pdev->dev, in max77686_pmic_probe()
544 {"max77686-pmic", 0},
551 .name = "max77686-pmic",