File Index
Files and directories
Sign in
FILE

consumer.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/pinctrl/consumer.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  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>
 10 */
 11#ifndef __LINUX_PINCTRL_CONSUMER_H
 12#define __LINUX_PINCTRL_CONSUMER_H
 13
 14#include <linux/err.h>
 15#include <linux/types.h>
 16
 17#include <linux/pinctrl/pinctrl-state.h>
 18
 19struct device;
 20struct gpio_chip;
 21
 22/* This struct is private to the core and should be regarded as a cookie */
 23struct pinctrl;
 24struct pinctrl_state;
 25
 26#ifdef CONFIG_PINCTRL
 27
 28/* External interface to pin control */
 29bool pinctrl_gpio_can_use_line(struct gpio_chip *gc, unsigned int offset);
 30int pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset);
 31void pinctrl_gpio_free(struct gpio_chip *gc, unsigned int offset);
 32int pinctrl_gpio_direction_input(struct gpio_chip *gc,
 33				 unsigned int offset);
 34int pinctrl_gpio_direction_output(struct gpio_chip *gc,
 35				  unsigned int offset);
 36int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
 37				unsigned long config);
 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);
 48
 49#ifdef CONFIG_PM
 50int pinctrl_pm_select_default_state(struct device *dev);
 51int pinctrl_pm_select_init_state(struct device *dev);
 52int pinctrl_pm_select_sleep_state(struct device *dev);
 53int pinctrl_pm_select_idle_state(struct device *dev);
 54#else
 55static inline int pinctrl_pm_select_default_state(struct device *dev)
 56{
 57	return 0;
 58}
 59static inline int pinctrl_pm_select_init_state(struct device *dev)
 60{
 61	return 0;
 62}
 63static inline int pinctrl_pm_select_sleep_state(struct device *dev)
 64{
 65	return 0;
 66}
 67static inline int pinctrl_pm_select_idle_state(struct device *dev)
 68{
 69	return 0;
 70}
 71#endif
 72
 73#else /* !CONFIG_PINCTRL */
 74
 75static inline bool
 76pinctrl_gpio_can_use_line(struct gpio_chip *gc, unsigned int offset)
 77{
 78	return true;
 79}
 80
 81static inline int
 82pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset)
 83{
 84	return 0;
 85}
 86
 87static inline void
 88pinctrl_gpio_free(struct gpio_chip *gc, unsigned int offset)
 89{
 90}
 91
 92static inline int
 93pinctrl_gpio_direction_input(struct gpio_chip *gc, unsigned int offset)
 94{
 95	return 0;
 96}
 97
 98static inline int
 99pinctrl_gpio_direction_output(struct gpio_chip *gc, unsigned int offset)
100{
101	return 0;
102}
103
104static inline int
105pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
106			    unsigned long config)
107{
108	return 0;
109}
110
111static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
112{
113	return NULL;
114}
115
116static inline void pinctrl_put(struct pinctrl *p)
117{
118}
119
120static inline struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p,
121								       const char *name)
122{
123	return NULL;
124}
125
126static inline int pinctrl_select_state(struct pinctrl *p,
127				       struct pinctrl_state *s)
128{
129	return 0;
130}
131
132static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
133{
134	return NULL;
135}
136
137static inline void devm_pinctrl_put(struct pinctrl *p)
138{
139}
140
141static inline int pinctrl_select_default_state(struct device *dev)
142{
143	return 0;
144}
145
146static inline int pinctrl_pm_select_default_state(struct device *dev)
147{
148	return 0;
149}
150
151static inline int pinctrl_pm_select_init_state(struct device *dev)
152{
153	return 0;
154}
155
156static inline int pinctrl_pm_select_sleep_state(struct device *dev)
157{
158	return 0;
159}
160
161static inline int pinctrl_pm_select_idle_state(struct device *dev)
162{
163	return 0;
164}
165
166#endif /* CONFIG_PINCTRL */
167
168static inline struct pinctrl * __must_check pinctrl_get_select(struct device *dev,
169							       const char *name)
170{
171	struct pinctrl *p;
172	struct pinctrl_state *s;
173	int ret;
174
175	p = pinctrl_get(dev);
176	if (IS_ERR(p))
177		return p;
178
179	s = pinctrl_lookup_state(p, name);
180	if (IS_ERR(s)) {
181		pinctrl_put(p);
182		return ERR_CAST(s);
183	}
184
185	ret = pinctrl_select_state(p, s);
186	if (ret < 0) {
187		pinctrl_put(p);
188		return ERR_PTR(ret);
189	}
190
191	return p;
192}
193
194static inline struct pinctrl * __must_check pinctrl_get_select_default(struct device *dev)
195{
196	return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
197}
198
199static inline struct pinctrl * __must_check devm_pinctrl_get_select(struct device *dev,
200								    const char *name)
201{
202	struct pinctrl *p;
203	struct pinctrl_state *s;
204	int ret;
205
206	p = devm_pinctrl_get(dev);
207	if (IS_ERR(p))
208		return p;
209
210	s = pinctrl_lookup_state(p, name);
211	if (IS_ERR(s)) {
212		devm_pinctrl_put(p);
213		return ERR_CAST(s);
214	}
215
216	ret = pinctrl_select_state(p, s);
217	if (ret < 0) {
218		devm_pinctrl_put(p);
219		return ERR_PTR(ret);
220	}
221
222	return p;
223}
224
225static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(struct device *dev)
226{
227	return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
228}
229
230#endif /* __LINUX_PINCTRL_CONSUMER_H */
~/ Read-only file preview.