Lines Matching +full:regulator +full:- +full:vaux1

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) ST-Ericsson SA 2010
5 * Authors: Sundar Iyer <sundar.iyer@stericsson.com> for ST-Ericsson
6 * Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
7 * Daniel Willerud <daniel.willerud@stericsson.com> for ST-Ericsson
12 * VAUX1/2/3, VINTCORE, VTVOUT, VUSB, VAUDIO, VAMIC1/2, VDMIC, VANA
15 * VAUX1/2/3/4/5/6, VINTCORE, VADC, VUSB, VAUDIO, VAMIC1/2, VDMIC, VANA
25 #include <linux/regulator/of_regulator.h>
26 #include <linux/regulator/driver.h>
27 #include <linux/regulator/machine.h>
146 * struct ab8500_shared_mode - is used when mode is shared between
148 * @shared_regulator: pointer to the other sharing regulator
149 * @lp_mode_req: low power mode requested by this regulator
157 * struct ab8500_regulator_info - ab8500 regulator information
159 * @desc: regulator description
164 * @update_mask: mask to enable/disable and set mode of regulator
165 * @update_val: bits holding the regulator current mode
166 * @update_val_idle: bits to enable the regulator in idle (low power) mode
167 * @update_val_normal: bits to enable the regulator in normal (high power) mode
173 * @voltage_bank: bank to control regulator voltage
174 * @voltage_reg: register to control regulator voltage
175 * @voltage_mask: mask to control regulator voltage
299 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_enable()
300 return -EINVAL; in ab8500_regulator_enable()
303 ret = abx500_mask_and_set_register_interruptible(info->dev, in ab8500_regulator_enable()
304 info->update_bank, info->update_reg, in ab8500_regulator_enable()
305 info->update_mask, info->update_val); in ab8500_regulator_enable()
308 "couldn't set enable bits for regulator\n"); in ab8500_regulator_enable()
313 "%s-enable (bank, reg, mask, value): 0x%x, 0x%x, 0x%x, 0x%x\n", in ab8500_regulator_enable()
314 info->desc.name, info->update_bank, info->update_reg, in ab8500_regulator_enable()
315 info->update_mask, info->update_val); in ab8500_regulator_enable()
326 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_disable()
327 return -EINVAL; in ab8500_regulator_disable()
330 ret = abx500_mask_and_set_register_interruptible(info->dev, in ab8500_regulator_disable()
331 info->update_bank, info->update_reg, in ab8500_regulator_disable()
332 info->update_mask, 0x0); in ab8500_regulator_disable()
335 "couldn't set disable bits for regulator\n"); in ab8500_regulator_disable()
340 "%s-disable (bank, reg, mask, value): 0x%x, 0x%x, 0x%x, 0x%x\n", in ab8500_regulator_disable()
341 info->desc.name, info->update_bank, info->update_reg, in ab8500_regulator_disable()
342 info->update_mask, 0x0); in ab8500_regulator_disable()
354 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_is_enabled()
355 return -EINVAL; in ab8500_regulator_is_enabled()
358 ret = abx500_get_register_interruptible(info->dev, in ab8500_regulator_is_enabled()
359 info->update_bank, info->update_reg, &regval); in ab8500_regulator_is_enabled()
362 "couldn't read 0x%x register\n", info->update_reg); in ab8500_regulator_is_enabled()
367 "%s-is_enabled (bank, reg, mask, value): 0x%x, 0x%x, 0x%x," in ab8500_regulator_is_enabled()
369 info->desc.name, info->update_bank, info->update_reg, in ab8500_regulator_is_enabled()
370 info->update_mask, regval); in ab8500_regulator_is_enabled()
372 if (regval & info->update_mask) in ab8500_regulator_is_enabled()
387 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_get_optimum_mode()
388 return -EINVAL; in ab8500_regulator_get_optimum_mode()
391 if (load_uA <= info->load_lp_uA) in ab8500_regulator_get_optimum_mode()
408 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_set_mode()
409 return -EINVAL; in ab8500_regulator_set_mode()
412 if (info->mode_mask) { in ab8500_regulator_set_mode()
413 bank = info->mode_bank; in ab8500_regulator_set_mode()
414 reg = info->mode_reg; in ab8500_regulator_set_mode()
415 mask = info->mode_mask; in ab8500_regulator_set_mode()
417 bank = info->update_bank; in ab8500_regulator_set_mode()
418 reg = info->update_reg; in ab8500_regulator_set_mode()
419 mask = info->update_mask; in ab8500_regulator_set_mode()
422 if (info->shared_mode) in ab8500_regulator_set_mode()
427 if (info->shared_mode) in ab8500_regulator_set_mode()
430 if (info->mode_mask) in ab8500_regulator_set_mode()
431 val = info->mode_val_normal; in ab8500_regulator_set_mode()
433 val = info->update_val_normal; in ab8500_regulator_set_mode()
436 if (info->shared_mode) { in ab8500_regulator_set_mode()
439 shared_regulator = info->shared_mode->shared_regulator; in ab8500_regulator_set_mode()
440 if (!shared_regulator->shared_mode->lp_mode_req) { in ab8500_regulator_set_mode()
441 /* Other regulator prevent LP mode */ in ab8500_regulator_set_mode()
442 info->shared_mode->lp_mode_req = true; in ab8500_regulator_set_mode()
449 if (info->mode_mask) in ab8500_regulator_set_mode()
450 val = info->mode_val_idle; in ab8500_regulator_set_mode()
452 val = info->update_val_idle; in ab8500_regulator_set_mode()
455 ret = -EINVAL; in ab8500_regulator_set_mode()
459 if (info->mode_mask || ab8500_regulator_is_enabled(rdev)) { in ab8500_regulator_set_mode()
460 ret = abx500_mask_and_set_register_interruptible(info->dev, in ab8500_regulator_set_mode()
464 "couldn't set regulator mode\n"); in ab8500_regulator_set_mode()
469 "%s-set_mode (bank, reg, mask, value): " in ab8500_regulator_set_mode()
471 info->desc.name, bank, reg, in ab8500_regulator_set_mode()
475 if (!info->mode_mask) in ab8500_regulator_set_mode()
476 info->update_val = val; in ab8500_regulator_set_mode()
478 if (info->shared_mode) in ab8500_regulator_set_mode()
479 info->shared_mode->lp_mode_req = lp_mode_req; in ab8500_regulator_set_mode()
482 if (info->shared_mode) in ab8500_regulator_set_mode()
497 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_get_mode()
498 return -EINVAL; in ab8500_regulator_get_mode()
502 if (info->shared_mode) { in ab8500_regulator_get_mode()
503 if (info->shared_mode->lp_mode_req) in ab8500_regulator_get_mode()
509 if (info->mode_mask) { in ab8500_regulator_get_mode()
511 ret = abx500_get_register_interruptible(info->dev, in ab8500_regulator_get_mode()
512 info->mode_bank, info->mode_reg, &val); in ab8500_regulator_get_mode()
513 val = val & info->mode_mask; in ab8500_regulator_get_mode()
515 val_normal = info->mode_val_normal; in ab8500_regulator_get_mode()
516 val_idle = info->mode_val_idle; in ab8500_regulator_get_mode()
519 val = info->update_val; in ab8500_regulator_get_mode()
520 val_normal = info->update_val_normal; in ab8500_regulator_get_mode()
521 val_idle = info->update_val_idle; in ab8500_regulator_get_mode()
529 ret = -EINVAL; in ab8500_regulator_get_mode()
541 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_get_voltage_sel()
542 return -EINVAL; in ab8500_regulator_get_voltage_sel()
545 voltage_shift = ffs(info->voltage_mask) - 1; in ab8500_regulator_get_voltage_sel()
547 ret = abx500_get_register_interruptible(info->dev, in ab8500_regulator_get_voltage_sel()
548 info->voltage_bank, info->voltage_reg, &regval); in ab8500_regulator_get_voltage_sel()
551 "couldn't read voltage reg for regulator\n"); in ab8500_regulator_get_voltage_sel()
556 "%s-get_voltage (bank, reg, mask, shift, value): " in ab8500_regulator_get_voltage_sel()
558 info->desc.name, info->voltage_bank, in ab8500_regulator_get_voltage_sel()
559 info->voltage_reg, info->voltage_mask, in ab8500_regulator_get_voltage_sel()
562 return (regval & info->voltage_mask) >> voltage_shift; in ab8500_regulator_get_voltage_sel()
573 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); in ab8500_regulator_set_voltage_sel()
574 return -EINVAL; in ab8500_regulator_set_voltage_sel()
577 voltage_shift = ffs(info->voltage_mask) - 1; in ab8500_regulator_set_voltage_sel()
581 ret = abx500_mask_and_set_register_interruptible(info->dev, in ab8500_regulator_set_voltage_sel()
582 info->voltage_bank, info->voltage_reg, in ab8500_regulator_set_voltage_sel()
583 info->voltage_mask, regval); in ab8500_regulator_set_voltage_sel()
586 "couldn't set voltage reg for regulator\n"); in ab8500_regulator_set_voltage_sel()
589 "%s-set_voltage (bank, reg, mask, value): 0x%x, 0x%x, 0x%x," in ab8500_regulator_set_voltage_sel()
591 info->desc.name, info->voltage_bank, info->voltage_reg, in ab8500_regulator_set_voltage_sel()
592 info->voltage_mask, regval); in ab8500_regulator_set_voltage_sel()
644 /* AB8500 regulator information */
655 .name = "LDO-AUX1",
678 .name = "LDO-AUX2",
701 .name = "LDO-AUX3",
724 .name = "LDO-INTCORE",
752 .name = "LDO-TVOUT",
771 .name = "LDO-AUDIO",
787 .name = "LDO-ANAMIC1",
803 .name = "LDO-ANAMIC2",
819 .name = "LDO-DMIC",
839 .name = "LDO-ANA",
858 /* AB8505 regulator information */
869 .name = "LDO-AUX1",
890 .name = "LDO-AUX2",
911 .name = "LDO-AUX3",
932 .name = "LDO-AUX4",
955 .name = "LDO-AUX5",
977 .name = "LDO-AUX6",
999 .name = "LDO-INTCORE",
1026 .name = "LDO-ADC",
1045 .name = "LDO-AUDIO",
1063 .name = "LDO-ANAMIC1",
1084 .name = "LDO-ANAMIC2",
1105 .name = "LDO-AUX8",
1123 .name = "LDO-ANA",
1667 struct ab8500 *ab8500 = dev_get_drvdata(pdev->dev.parent); in ab8500_regulator_register()
1672 /* assign per-regulator data */ in ab8500_regulator_register()
1674 info->dev = &pdev->dev; in ab8500_regulator_register()
1676 config.dev = &pdev->dev; in ab8500_regulator_register()
1683 if (info->desc.id == AB8500_LDO_AUX3) { in ab8500_regulator_register()
1684 info->desc.n_voltages = in ab8500_regulator_register()
1686 info->desc.volt_table = ldo_vauxn_voltages; in ab8500_regulator_register()
1687 info->voltage_mask = 0xf; in ab8500_regulator_register()
1691 /* register regulator with framework */ in ab8500_regulator_register()
1692 rdev = devm_regulator_register(&pdev->dev, &info->desc, &config); in ab8500_regulator_register()
1694 dev_err(&pdev->dev, "failed to register regulator %s\n", in ab8500_regulator_register()
1695 info->desc.name); in ab8500_regulator_register()
1704 struct ab8500 *ab8500 = dev_get_drvdata(pdev->dev.parent); in ab8500_regulator_probe()
1705 struct device_node *np = pdev->dev.of_node; in ab8500_regulator_probe()
1710 dev_err(&pdev->dev, "null mfd parent\n"); in ab8500_regulator_probe()
1711 return -EINVAL; in ab8500_regulator_probe()
1716 err = of_regulator_match(&pdev->dev, np, in ab8500_regulator_probe()
1720 dev_err(&pdev->dev, in ab8500_regulator_probe()
1721 "Error parsing regulator init data: %d\n", err); in ab8500_regulator_probe()
1739 .name = "ab8500-regulator",
1750 pr_err("Failed to register ab8500 regulator: %d\n", ret); in ab8500_regulator_init()
1766 MODULE_DESCRIPTION("Regulator Driver for ST-Ericsson AB8500 Mixed-Sig PMIC");
1767 MODULE_ALIAS("platform:ab8500-regulator");