1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * internal.h  --  Voltage/Current Regulator framework internal code
4 *
5 * Copyright 2007, 2008 Wolfson Microelectronics PLC.
6 * Copyright 2008 SlimLogic Ltd.
7 *
8 * Author: Liam Girdwood <lrg@slimlogic.co.uk>
9 */
10
11#ifndef __REGULATOR_INTERNAL_H
12#define __REGULATOR_INTERNAL_H
13
14#include <linux/suspend.h>
15
16#define REGULATOR_STATES_NUM	(PM_SUSPEND_MAX + 1)
17
18struct regulator_voltage {
19	int min_uV;
20	int max_uV;
21};
22
23/*
24 * struct regulator
25 *
26 * One for each consumer device.
27 * @voltage - a voltage array for each state of runtime, i.e.:
28 *            PM_SUSPEND_ON
29 *            PM_SUSPEND_TO_IDLE
30 *            PM_SUSPEND_STANDBY
31 *            PM_SUSPEND_MEM
32 *            PM_SUSPEND_MAX
33 */
34struct regulator {
35	struct device *dev;
36	struct list_head list;
37	unsigned int always_on:1;
38	unsigned int bypass:1;
39	unsigned int device_link:1;
40	int uA_load;
41	unsigned int enable_count;
42	unsigned int deferred_disables;
43	struct regulator_voltage voltage[REGULATOR_STATES_NUM];
44	const char *supply_name;
45	struct device_attribute dev_attr;
46	struct regulator_dev *rdev;
47	struct dentry *debugfs;
48};
49
50extern struct class regulator_class;
51
52static inline struct regulator_dev *dev_to_rdev(struct device *dev)
53{
54	return container_of(dev, struct regulator_dev, dev);
55}
56
57#ifdef CONFIG_OF
58struct regulator_dev *of_find_regulator_by_node(struct device_node *np);
59struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
60			         const struct regulator_desc *desc,
61				 struct regulator_config *config,
62				 struct device_node **node);
63
64struct regulator_dev *of_parse_coupled_regulator(struct regulator_dev *rdev,
65						 int index);
66
67int of_get_n_coupled(struct regulator_dev *rdev);
68
69bool of_check_coupling_data(struct regulator_dev *rdev);
70
71#else
72static inline struct regulator_dev *
73of_find_regulator_by_node(struct device_node *np)
74{
75	return NULL;
76}
77
78static inline struct regulator_init_data *
79regulator_of_get_init_data(struct device *dev,
80			   const struct regulator_desc *desc,
81			   struct regulator_config *config,
82			   struct device_node **node)
83{
84	return NULL;
85}
86
87static inline struct regulator_dev *
88of_parse_coupled_regulator(struct regulator_dev *rdev,
89			   int index)
90{
91	return NULL;
92}
93
94static inline int of_get_n_coupled(struct regulator_dev *rdev)
95{
96	return 0;
97}
98
99static inline bool of_check_coupling_data(struct regulator_dev *rdev)
100{
101	return false;
102}
103
104#endif
105enum regulator_get_type {
106	NORMAL_GET,
107	EXCLUSIVE_GET,
108	OPTIONAL_GET,
109	MAX_GET_TYPE
110};
111
112struct regulator *_regulator_get(struct device *dev, const char *id,
113				 enum regulator_get_type get_type);
114#endif
115