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