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