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