Lines Matching +full:buck +full:- +full:c

1 // SPDX-License-Identifier: GPL-2.0+
3 // max77686.c - Regulator driver for the Maxim 77686
5 // Copyright (C) 2012 Samsung Electronics
9 // This driver is based on max8997.c
21 #include <linux/mfd/max77686-private.h>
37 * Value for configuring buck[89] and LDO{20,21,22} as GPIO control.
43 * Forcing low power mode: LDO1, 3-5, 9, 13, 17-26
48 * - LDO2, 6-8, 10-12, 14-16
49 * - buck[1234]
54 /* Forcing low power mode: buck[234] */
105 if (test_bit(id, max77686->gpio_enabled)) in max77686_map_normal_mode()
122 ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_set_suspend_disable()
123 rdev->desc->enable_mask, val << shift); in max77686_set_suspend_disable()
127 max77686->opmode[id] = val; in max77686_set_suspend_disable()
139 /* BUCK[5-9] doesn't support this feature */ in max77686_set_suspend_mode()
152 rdev->desc->name, mode); in max77686_set_suspend_mode()
153 return -EINVAL; in max77686_set_suspend_mode()
156 ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_set_suspend_mode()
157 rdev->desc->enable_mask, in max77686_set_suspend_mode()
162 max77686->opmode[id] = val; in max77686_set_suspend_mode()
166 /* Some LDOs supports LPM-ON/OFF/Normal-ON mode during suspend state */
186 rdev->desc->name, mode); in max77686_ldo_set_suspend_mode()
187 return -EINVAL; in max77686_ldo_set_suspend_mode()
190 ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_ldo_set_suspend_mode()
191 rdev->desc->enable_mask, in max77686_ldo_set_suspend_mode()
196 max77686->opmode[id] = val; in max77686_ldo_set_suspend_mode()
208 if (max77686->opmode[id] == MAX77686_OFF_PWRREQ) in max77686_enable()
209 max77686->opmode[id] = max77686_map_normal_mode(max77686, id); in max77686_enable()
211 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in max77686_enable()
212 rdev->desc->enable_mask, in max77686_enable()
213 max77686->opmode[id] << shift); in max77686_enable()
220 struct max77686_data *max77686 = config->driver_data; in max77686_of_parse_cb()
223 switch (desc->id) { in max77686_of_parse_cb()
227 config->ena_gpiod = fwnode_gpiod_get_index( in max77686_of_parse_cb()
232 "max77686-regulator"); in max77686_of_parse_cb()
233 if (IS_ERR(config->ena_gpiod)) in max77686_of_parse_cb()
234 config->ena_gpiod = NULL; in max77686_of_parse_cb()
240 if (config->ena_gpiod) { in max77686_of_parse_cb()
241 set_bit(desc->id, max77686->gpio_enabled); in max77686_of_parse_cb()
243 ret = regmap_update_bits(config->regmap, desc->enable_reg, in max77686_of_parse_cb()
244 desc->enable_mask, in max77686_of_parse_cb()
247 gpiod_put(config->ena_gpiod); in max77686_of_parse_cb()
248 config->ena_gpiod = NULL; in max77686_of_parse_cb()
312 .regulators_node = of_match_ptr("voltage-regulators"), \
322 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
324 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
331 .regulators_node = of_match_ptr("voltage-regulators"), \
340 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
342 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
349 .regulators_node = of_match_ptr("voltage-regulators"), \
358 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
360 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
367 .regulators_node = of_match_ptr("voltage-regulators"), \
376 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
378 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
383 .name = "BUCK"#num, \
384 .of_match = of_match_ptr("BUCK"#num), \
385 .regulators_node = of_match_ptr("voltage-regulators"), \
396 .vsel_reg = MAX77686_REG_BUCK5OUT + (num - 5) * 2, \
398 .enable_reg = MAX77686_REG_BUCK5CTRL + (num - 5) * 2, \
402 .name = "BUCK"#num, \
403 .of_match = of_match_ptr("BUCK"#num), \
404 .regulators_node = of_match_ptr("voltage-regulators"), \
420 .name = "BUCK"#num, \
421 .of_match = of_match_ptr("BUCK"#num), \
422 .regulators_node = of_match_ptr("voltage-regulators"), \
432 .vsel_reg = MAX77686_REG_BUCK2DVS1 + (num - 2) * 10, \
434 .enable_reg = MAX77686_REG_BUCK2CTRL1 + (num - 2) * 10, \
437 .ramp_reg = MAX77686_REG_BUCK2CTRL1 + (num - 2) * 10, \
483 struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent); in max77686_pmic_probe()
488 dev_dbg(&pdev->dev, "%s\n", __func__); in max77686_pmic_probe()
490 max77686 = devm_kzalloc(&pdev->dev, sizeof(struct max77686_data), in max77686_pmic_probe()
493 return -ENOMEM; in max77686_pmic_probe()
495 max77686->dev = &pdev->dev; in max77686_pmic_probe()
496 config.dev = iodev->dev; in max77686_pmic_probe()
497 config.regmap = iodev->regmap; in max77686_pmic_probe()
505 max77686->opmode[id] = MAX77686_NORMAL; in max77686_pmic_probe()
506 rdev = devm_regulator_register(&pdev->dev, in max77686_pmic_probe()
510 dev_err(&pdev->dev, in max77686_pmic_probe()
520 {"max77686-pmic", 0},
527 .name = "max77686-pmic",