blob: d4962899d830b5f5ba0d12d7e3f3bd5c9955e6bd [file] [log] [blame]
Sven Schwermer25957522019-06-24 13:03:33 +02001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (C) 2019 Disruptive Technologies Research AS
4 * Sven Schwermer <sven.svenschwermer@disruptive-technologies.com>
5 */
6
7#ifndef _REGULATOR_COMMON_H
8#define _REGULATOR_COMMON_H
9
Sven Schwermer25957522019-06-24 13:03:33 +020010#include <asm/gpio.h>
Sven Schwermer25957522019-06-24 13:03:33 +020011
Simon Glassb75b15b2020-12-03 16:55:23 -070012struct regulator_common_plat {
Sven Schwermer25957522019-06-24 13:03:33 +020013 struct gpio_desc gpio; /* GPIO for regulator enable control */
14 unsigned int startup_delay_us;
15 unsigned int off_on_delay_us;
Eugen Hristev405512e2023-04-19 16:45:24 +030016 unsigned int enable_count;
Sven Schwermer25957522019-06-24 13:03:33 +020017};
18
Simon Glassaad29ae2020-12-03 16:55:21 -070019int regulator_common_of_to_plat(struct udevice *dev,
Eugen Hristev81aa1922023-04-19 16:45:25 +030020 struct regulator_common_plat *plat, const
Simon Glassb75b15b2020-12-03 16:55:23 -070021 char *enable_gpio_name);
Sven Schwermer25957522019-06-24 13:03:33 +020022int regulator_common_get_enable(const struct udevice *dev,
Eugen Hristev81aa1922023-04-19 16:45:25 +030023 struct regulator_common_plat *plat);
Eugen Hristev405512e2023-04-19 16:45:24 +030024/*
25 * Enable or Disable a regulator
26 *
27 * This is a reentrant function and subsequent calls that enable will
28 * increase an internal counter, and disable calls will decrease the counter.
29 * The actual resource will be enabled when the counter gets to 1 coming from 0,
30 * and disabled when it reaches 0 coming from 1.
31 *
32 * @dev: regulator device
Eugen Hristev81aa1922023-04-19 16:45:25 +030033 * @plat: Platform data
Eugen Hristev405512e2023-04-19 16:45:24 +030034 * @enable: bool indicating whether to enable or disable the regulator
35 * @return:
36 * 0 on Success
37 * -EBUSY if the regulator cannot be disabled because it's requested by
38 * another device
39 * -EALREADY if the regulator has already been enabled or has already been
40 * disabled
41 * -EACCES if there is no possibility to enable/disable the regulator
42 * -ve on different error situation
43 */
Sven Schwermer25957522019-06-24 13:03:33 +020044int regulator_common_set_enable(const struct udevice *dev,
Eugen Hristev81aa1922023-04-19 16:45:25 +030045 struct regulator_common_plat *plat, bool enable);
Sven Schwermer25957522019-06-24 13:03:33 +020046
47#endif /* _REGULATOR_COMMON_H */