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