at v6.5 4.6 kB view raw
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; 20 21/* This struct is private to the core and should be regarded as a cookie */ 22struct pinctrl; 23struct pinctrl_state; 24 25#ifdef CONFIG_PINCTRL 26 27/* External interface to pin control */ 28extern bool pinctrl_gpio_can_use_line(unsigned gpio); 29extern int pinctrl_gpio_request(unsigned gpio); 30extern void pinctrl_gpio_free(unsigned gpio); 31extern int pinctrl_gpio_direction_input(unsigned gpio); 32extern int pinctrl_gpio_direction_output(unsigned gpio); 33extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config); 34 35extern struct pinctrl * __must_check pinctrl_get(struct device *dev); 36extern void pinctrl_put(struct pinctrl *p); 37extern struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p, 38 const char *name); 39extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s); 40 41extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev); 42extern void devm_pinctrl_put(struct pinctrl *p); 43extern int pinctrl_select_default_state(struct device *dev); 44 45#ifdef CONFIG_PM 46extern int pinctrl_pm_select_default_state(struct device *dev); 47extern int pinctrl_pm_select_sleep_state(struct device *dev); 48extern int pinctrl_pm_select_idle_state(struct device *dev); 49#else 50static inline int pinctrl_pm_select_default_state(struct device *dev) 51{ 52 return 0; 53} 54static inline int pinctrl_pm_select_sleep_state(struct device *dev) 55{ 56 return 0; 57} 58static inline int pinctrl_pm_select_idle_state(struct device *dev) 59{ 60 return 0; 61} 62#endif 63 64#else /* !CONFIG_PINCTRL */ 65 66static inline bool pinctrl_gpio_can_use_line(unsigned gpio) 67{ 68 return true; 69} 70 71static inline int pinctrl_gpio_request(unsigned gpio) 72{ 73 return 0; 74} 75 76static inline void pinctrl_gpio_free(unsigned gpio) 77{ 78} 79 80static inline int pinctrl_gpio_direction_input(unsigned gpio) 81{ 82 return 0; 83} 84 85static inline int pinctrl_gpio_direction_output(unsigned gpio) 86{ 87 return 0; 88} 89 90static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config) 91{ 92 return 0; 93} 94 95static inline struct pinctrl * __must_check pinctrl_get(struct device *dev) 96{ 97 return NULL; 98} 99 100static inline void pinctrl_put(struct pinctrl *p) 101{ 102} 103 104static inline struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p, 105 const char *name) 106{ 107 return NULL; 108} 109 110static inline int pinctrl_select_state(struct pinctrl *p, 111 struct pinctrl_state *s) 112{ 113 return 0; 114} 115 116static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev) 117{ 118 return NULL; 119} 120 121static inline void devm_pinctrl_put(struct pinctrl *p) 122{ 123} 124 125static inline int pinctrl_select_default_state(struct device *dev) 126{ 127 return 0; 128} 129 130static inline int pinctrl_pm_select_default_state(struct device *dev) 131{ 132 return 0; 133} 134 135static inline int pinctrl_pm_select_sleep_state(struct device *dev) 136{ 137 return 0; 138} 139 140static inline int pinctrl_pm_select_idle_state(struct device *dev) 141{ 142 return 0; 143} 144 145#endif /* CONFIG_PINCTRL */ 146 147static inline struct pinctrl * __must_check pinctrl_get_select(struct device *dev, 148 const char *name) 149{ 150 struct pinctrl *p; 151 struct pinctrl_state *s; 152 int ret; 153 154 p = pinctrl_get(dev); 155 if (IS_ERR(p)) 156 return p; 157 158 s = pinctrl_lookup_state(p, name); 159 if (IS_ERR(s)) { 160 pinctrl_put(p); 161 return ERR_CAST(s); 162 } 163 164 ret = pinctrl_select_state(p, s); 165 if (ret < 0) { 166 pinctrl_put(p); 167 return ERR_PTR(ret); 168 } 169 170 return p; 171} 172 173static inline struct pinctrl * __must_check pinctrl_get_select_default(struct device *dev) 174{ 175 return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT); 176} 177 178static inline struct pinctrl * __must_check devm_pinctrl_get_select(struct device *dev, 179 const char *name) 180{ 181 struct pinctrl *p; 182 struct pinctrl_state *s; 183 int ret; 184 185 p = devm_pinctrl_get(dev); 186 if (IS_ERR(p)) 187 return p; 188 189 s = pinctrl_lookup_state(p, name); 190 if (IS_ERR(s)) { 191 devm_pinctrl_put(p); 192 return ERR_CAST(s); 193 } 194 195 ret = pinctrl_select_state(p, s); 196 if (ret < 0) { 197 devm_pinctrl_put(p); 198 return ERR_PTR(ret); 199 } 200 201 return p; 202} 203 204static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(struct device *dev) 205{ 206 return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT); 207} 208 209#endif /* __LINUX_PINCTRL_CONSUMER_H */