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