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 <[email protected]> 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 15 #include <linux/err.h> 16 #include <linux/list.h> 17 #include <linux/seq_file.h> 18 #include <linux/pinctrl/pinctrl-state.h> 19 20 /* This struct is private to the core and should be regarded as a cookie */ 21 struct pinctrl; 22 struct pinctrl_state; 23 struct device; 24 25 #ifdef CONFIG_PINCTRL 26 27 /* External interface to pin control */ 28 extern int pinctrl_gpio_request(unsigned gpio); 29 extern void pinctrl_gpio_free(unsigned gpio); 30 extern int pinctrl_gpio_direction_input(unsigned gpio); 31 extern int pinctrl_gpio_direction_output(unsigned gpio); 32 extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config); 33 34 extern struct pinctrl * __must_check pinctrl_get(struct device *dev); 35 extern void pinctrl_put(struct pinctrl *p); 36 extern struct pinctrl_state * __must_check pinctrl_lookup_state( 37 struct pinctrl *p, 38 const char *name); 39 extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s); 40 41 extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev); 42 extern void devm_pinctrl_put(struct pinctrl *p); 43 44 #ifdef CONFIG_PM 45 extern int pinctrl_pm_select_default_state(struct device *dev); 46 extern int pinctrl_pm_select_sleep_state(struct device *dev); 47 extern int pinctrl_pm_select_idle_state(struct device *dev); 48 #else 49 static inline int pinctrl_pm_select_default_state(struct device *dev) 50 { 51 return 0; 52 } 53 static inline int pinctrl_pm_select_sleep_state(struct device *dev) 54 { 55 return 0; 56 } 57 static inline int pinctrl_pm_select_idle_state(struct device *dev) 58 { 59 return 0; 60 } 61 #endif 62 63 #else /* !CONFIG_PINCTRL */ 64 65 static inline int pinctrl_gpio_request(unsigned gpio) 66 { 67 return 0; 68 } 69 70 static inline void pinctrl_gpio_free(unsigned gpio) 71 { 72 } 73 74 static inline int pinctrl_gpio_direction_input(unsigned gpio) 75 { 76 return 0; 77 } 78 79 static inline int pinctrl_gpio_direction_output(unsigned gpio) 80 { 81 return 0; 82 } 83 84 static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config) 85 { 86 return 0; 87 } 88 89 static inline struct pinctrl * __must_check pinctrl_get(struct device *dev) 90 { 91 return NULL; 92 } 93 94 static inline void pinctrl_put(struct pinctrl *p) 95 { 96 } 97 98 static inline struct pinctrl_state * __must_check pinctrl_lookup_state( 99 struct pinctrl *p, 100 const char *name) 101 { 102 return NULL; 103 } 104 105 static inline int pinctrl_select_state(struct pinctrl *p, 106 struct pinctrl_state *s) 107 { 108 return 0; 109 } 110 111 static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev) 112 { 113 return NULL; 114 } 115 116 static inline void devm_pinctrl_put(struct pinctrl *p) 117 { 118 } 119 120 static inline int pinctrl_pm_select_default_state(struct device *dev) 121 { 122 return 0; 123 } 124 125 static inline int pinctrl_pm_select_sleep_state(struct device *dev) 126 { 127 return 0; 128 } 129 130 static inline int pinctrl_pm_select_idle_state(struct device *dev) 131 { 132 return 0; 133 } 134 135 #endif /* CONFIG_PINCTRL */ 136 137 static 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); 151 return ERR_CAST(s); 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 163 static inline struct pinctrl * __must_check pinctrl_get_select_default( 164 struct device *dev) 165 { 166 return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT); 167 } 168 169 static 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); 183 return ERR_CAST(s); 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 195 static 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); 199 } 200 201 #endif /* __LINUX_PINCTRL_CONSUMER_H */ 202