Merge tag 'soc-ep93xx-dt-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-block.git] / include / linux / pinctrl / consumer.h
CommitLineData
af873fce 1/* SPDX-License-Identifier: GPL-2.0-only */
28a8d14c
LW
2/*
3 * Consumer interface the pin control subsystem
4 *
5 * Copyright (C) 2012 ST-Ericsson SA
6 * Written on behalf of Linaro for ST-Ericsson
7 * Based on bits of regulator core, gpio core and clk core
8 *
9 * Author: Linus Walleij <linus.walleij@linaro.org>
28a8d14c
LW
10 */
11#ifndef __LINUX_PINCTRL_CONSUMER_H
12#define __LINUX_PINCTRL_CONSUMER_H
13
6e5e959d 14#include <linux/err.h>
e5530adc
AS
15#include <linux/types.h>
16
a1ce3928 17#include <linux/pinctrl/pinctrl-state.h>
28a8d14c 18
e5530adc 19struct device;
ec963d04 20struct gpio_chip;
e5530adc 21
28a8d14c 22/* This struct is private to the core and should be regarded as a cookie */
e93bcee0 23struct pinctrl;
6e5e959d 24struct pinctrl_state;
28a8d14c 25
befe5bdf 26#ifdef CONFIG_PINCTRL
28a8d14c 27
befe5bdf 28/* External interface to pin control */
00762e41 29bool pinctrl_gpio_can_use_line(struct gpio_chip *gc, unsigned int offset);
acb38be6 30int pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset);
4fccb263 31void pinctrl_gpio_free(struct gpio_chip *gc, unsigned int offset);
315c46f9
BG
32int pinctrl_gpio_direction_input(struct gpio_chip *gc,
33 unsigned int offset);
b679d6c0
BG
34int pinctrl_gpio_direction_output(struct gpio_chip *gc,
35 unsigned int offset);
acf2981b 36int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
ec963d04 37 unsigned long config);
9596ebf8
BG
38
39struct pinctrl * __must_check pinctrl_get(struct device *dev);
40void pinctrl_put(struct pinctrl *p);
41struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p,
42 const char *name);
43int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
44
45struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
46void devm_pinctrl_put(struct pinctrl *p);
47int pinctrl_select_default_state(struct device *dev);
6d4ca1fb 48
14005ee2 49#ifdef CONFIG_PM
9596ebf8
BG
50int pinctrl_pm_select_default_state(struct device *dev);
51int pinctrl_pm_select_sleep_state(struct device *dev);
52int pinctrl_pm_select_idle_state(struct device *dev);
14005ee2
LW
53#else
54static inline int pinctrl_pm_select_default_state(struct device *dev)
55{
56 return 0;
57}
58static inline int pinctrl_pm_select_sleep_state(struct device *dev)
59{
60 return 0;
61}
62static inline int pinctrl_pm_select_idle_state(struct device *dev)
63{
64 return 0;
65}
66#endif
67
befe5bdf 68#else /* !CONFIG_PINCTRL */
28a8d14c 69
ec963d04 70static inline bool
00762e41 71pinctrl_gpio_can_use_line(struct gpio_chip *gc, unsigned int offset)
ec963d04
BG
72{
73 return true;
74}
75
ec963d04 76static inline int
acb38be6 77pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset)
ec963d04
BG
78{
79 return 0;
80}
81
ec963d04 82static inline void
4fccb263 83pinctrl_gpio_free(struct gpio_chip *gc, unsigned int offset)
ec963d04
BG
84{
85}
86
ec963d04 87static inline int
315c46f9 88pinctrl_gpio_direction_input(struct gpio_chip *gc, unsigned int offset)
ec963d04
BG
89{
90 return 0;
91}
92
ec963d04 93static inline int
b679d6c0 94pinctrl_gpio_direction_output(struct gpio_chip *gc, unsigned int offset)
ec963d04
BG
95{
96 return 0;
97}
98
ec963d04 99static inline int
acf2981b 100pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
ec963d04
BG
101 unsigned long config)
102{
103 return 0;
104}
105
6e5e959d 106static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
28a8d14c 107{
40eeb111 108 return NULL;
28a8d14c
LW
109}
110
e93bcee0 111static inline void pinctrl_put(struct pinctrl *p)
28a8d14c
LW
112{
113}
114
e5530adc
AS
115static inline struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p,
116 const char *name)
28a8d14c 117{
40eeb111 118 return NULL;
28a8d14c
LW
119}
120
6e5e959d
SW
121static inline int pinctrl_select_state(struct pinctrl *p,
122 struct pinctrl_state *s)
28a8d14c 123{
6e5e959d 124 return 0;
28a8d14c
LW
125}
126
6d4ca1fb
SW
127static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
128{
40eeb111 129 return NULL;
6d4ca1fb
SW
130}
131
132static inline void devm_pinctrl_put(struct pinctrl *p)
133{
134}
135
55d54d1e
UH
136static inline int pinctrl_select_default_state(struct device *dev)
137{
138 return 0;
139}
140
ff73ceed
LW
141static inline int pinctrl_pm_select_default_state(struct device *dev)
142{
143 return 0;
144}
145
146static inline int pinctrl_pm_select_sleep_state(struct device *dev)
147{
148 return 0;
149}
150
151static inline int pinctrl_pm_select_idle_state(struct device *dev)
152{
153 return 0;
154}
155
befe5bdf 156#endif /* CONFIG_PINCTRL */
28a8d14c 157
e5530adc
AS
158static inline struct pinctrl * __must_check pinctrl_get_select(struct device *dev,
159 const char *name)
6e5e959d
SW
160{
161 struct pinctrl *p;
162 struct pinctrl_state *s;
163 int ret;
164
165 p = pinctrl_get(dev);
166 if (IS_ERR(p))
167 return p;
168
169 s = pinctrl_lookup_state(p, name);
170 if (IS_ERR(s)) {
171 pinctrl_put(p);
66eb3bd8 172 return ERR_CAST(s);
6e5e959d
SW
173 }
174
175 ret = pinctrl_select_state(p, s);
176 if (ret < 0) {
177 pinctrl_put(p);
178 return ERR_PTR(ret);
179 }
180
181 return p;
182}
183
e5530adc 184static inline struct pinctrl * __must_check pinctrl_get_select_default(struct device *dev)
6e5e959d
SW
185{
186 return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
6d4ca1fb
SW
187}
188
e5530adc
AS
189static inline struct pinctrl * __must_check devm_pinctrl_get_select(struct device *dev,
190 const char *name)
6d4ca1fb
SW
191{
192 struct pinctrl *p;
193 struct pinctrl_state *s;
194 int ret;
195
196 p = devm_pinctrl_get(dev);
197 if (IS_ERR(p))
198 return p;
199
200 s = pinctrl_lookup_state(p, name);
201 if (IS_ERR(s)) {
202 devm_pinctrl_put(p);
e60bc2df 203 return ERR_CAST(s);
6d4ca1fb
SW
204 }
205
206 ret = pinctrl_select_state(p, s);
207 if (ret < 0) {
208 devm_pinctrl_put(p);
209 return ERR_PTR(ret);
210 }
211
212 return p;
213}
214
e5530adc 215static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(struct device *dev)
6d4ca1fb
SW
216{
217 return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
6e5e959d
SW
218}
219
28a8d14c 220#endif /* __LINUX_PINCTRL_CONSUMER_H */