Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Consumer interface the pin control subsystem
0004  *
0005  * Copyright (C) 2012 ST-Ericsson SA
0006  * Written on behalf of Linaro for ST-Ericsson
0007  * Based on bits of regulator core, gpio core and clk core
0008  *
0009  * Author: Linus Walleij <linus.walleij@linaro.org>
0010  */
0011 #ifndef __LINUX_PINCTRL_CONSUMER_H
0012 #define __LINUX_PINCTRL_CONSUMER_H
0013 
0014 #include <linux/err.h>
0015 #include <linux/list.h>
0016 #include <linux/seq_file.h>
0017 #include <linux/pinctrl/pinctrl-state.h>
0018 
0019 /* This struct is private to the core and should be regarded as a cookie */
0020 struct pinctrl;
0021 struct pinctrl_state;
0022 struct device;
0023 
0024 #ifdef CONFIG_PINCTRL
0025 
0026 /* External interface to pin control */
0027 extern bool pinctrl_gpio_can_use_line(unsigned gpio);
0028 extern int pinctrl_gpio_request(unsigned gpio);
0029 extern void pinctrl_gpio_free(unsigned gpio);
0030 extern int pinctrl_gpio_direction_input(unsigned gpio);
0031 extern int pinctrl_gpio_direction_output(unsigned gpio);
0032 extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
0033 
0034 extern struct pinctrl * __must_check pinctrl_get(struct device *dev);
0035 extern void pinctrl_put(struct pinctrl *p);
0036 extern struct pinctrl_state * __must_check pinctrl_lookup_state(
0037                             struct pinctrl *p,
0038                             const char *name);
0039 extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
0040 
0041 extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
0042 extern void devm_pinctrl_put(struct pinctrl *p);
0043 extern int pinctrl_select_default_state(struct device *dev);
0044 
0045 #ifdef CONFIG_PM
0046 extern int pinctrl_pm_select_default_state(struct device *dev);
0047 extern int pinctrl_pm_select_sleep_state(struct device *dev);
0048 extern int pinctrl_pm_select_idle_state(struct device *dev);
0049 #else
0050 static inline int pinctrl_pm_select_default_state(struct device *dev)
0051 {
0052     return 0;
0053 }
0054 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
0055 {
0056     return 0;
0057 }
0058 static inline int pinctrl_pm_select_idle_state(struct device *dev)
0059 {
0060     return 0;
0061 }
0062 #endif
0063 
0064 #else /* !CONFIG_PINCTRL */
0065 
0066 static inline bool pinctrl_gpio_can_use_line(unsigned gpio)
0067 {
0068     return true;
0069 }
0070 
0071 static inline int pinctrl_gpio_request(unsigned gpio)
0072 {
0073     return 0;
0074 }
0075 
0076 static inline void pinctrl_gpio_free(unsigned gpio)
0077 {
0078 }
0079 
0080 static inline int pinctrl_gpio_direction_input(unsigned gpio)
0081 {
0082     return 0;
0083 }
0084 
0085 static inline int pinctrl_gpio_direction_output(unsigned gpio)
0086 {
0087     return 0;
0088 }
0089 
0090 static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
0091 {
0092     return 0;
0093 }
0094 
0095 static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
0096 {
0097     return NULL;
0098 }
0099 
0100 static inline void pinctrl_put(struct pinctrl *p)
0101 {
0102 }
0103 
0104 static inline struct pinctrl_state * __must_check pinctrl_lookup_state(
0105                             struct pinctrl *p,
0106                             const char *name)
0107 {
0108     return NULL;
0109 }
0110 
0111 static inline int pinctrl_select_state(struct pinctrl *p,
0112                        struct pinctrl_state *s)
0113 {
0114     return 0;
0115 }
0116 
0117 static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
0118 {
0119     return NULL;
0120 }
0121 
0122 static inline void devm_pinctrl_put(struct pinctrl *p)
0123 {
0124 }
0125 
0126 static inline int pinctrl_select_default_state(struct device *dev)
0127 {
0128     return 0;
0129 }
0130 
0131 static inline int pinctrl_pm_select_default_state(struct device *dev)
0132 {
0133     return 0;
0134 }
0135 
0136 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
0137 {
0138     return 0;
0139 }
0140 
0141 static inline int pinctrl_pm_select_idle_state(struct device *dev)
0142 {
0143     return 0;
0144 }
0145 
0146 #endif /* CONFIG_PINCTRL */
0147 
0148 static inline struct pinctrl * __must_check pinctrl_get_select(
0149                     struct device *dev, const char *name)
0150 {
0151     struct pinctrl *p;
0152     struct pinctrl_state *s;
0153     int ret;
0154 
0155     p = pinctrl_get(dev);
0156     if (IS_ERR(p))
0157         return p;
0158 
0159     s = pinctrl_lookup_state(p, name);
0160     if (IS_ERR(s)) {
0161         pinctrl_put(p);
0162         return ERR_CAST(s);
0163     }
0164 
0165     ret = pinctrl_select_state(p, s);
0166     if (ret < 0) {
0167         pinctrl_put(p);
0168         return ERR_PTR(ret);
0169     }
0170 
0171     return p;
0172 }
0173 
0174 static inline struct pinctrl * __must_check pinctrl_get_select_default(
0175                     struct device *dev)
0176 {
0177     return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
0178 }
0179 
0180 static inline struct pinctrl * __must_check devm_pinctrl_get_select(
0181                     struct device *dev, const char *name)
0182 {
0183     struct pinctrl *p;
0184     struct pinctrl_state *s;
0185     int ret;
0186 
0187     p = devm_pinctrl_get(dev);
0188     if (IS_ERR(p))
0189         return p;
0190 
0191     s = pinctrl_lookup_state(p, name);
0192     if (IS_ERR(s)) {
0193         devm_pinctrl_put(p);
0194         return ERR_CAST(s);
0195     }
0196 
0197     ret = pinctrl_select_state(p, s);
0198     if (ret < 0) {
0199         devm_pinctrl_put(p);
0200         return ERR_PTR(ret);
0201     }
0202 
0203     return p;
0204 }
0205 
0206 static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(
0207                     struct device *dev)
0208 {
0209     return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
0210 }
0211 
0212 #endif /* __LINUX_PINCTRL_CONSUMER_H */