at v4.11 4.4 kB view raw
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 <linus.walleij@linaro.org> 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 */ 21struct pinctrl; 22struct pinctrl_state; 23struct device; 24 25#ifdef CONFIG_PINCTRL 26 27/* External interface to pin control */ 28extern int pinctrl_request_gpio(unsigned gpio); 29extern void pinctrl_free_gpio(unsigned gpio); 30extern int pinctrl_gpio_direction_input(unsigned gpio); 31extern int pinctrl_gpio_direction_output(unsigned gpio); 32extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config); 33 34extern struct pinctrl * __must_check pinctrl_get(struct device *dev); 35extern void pinctrl_put(struct pinctrl *p); 36extern struct pinctrl_state * __must_check pinctrl_lookup_state( 37 struct pinctrl *p, 38 const char *name); 39extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s); 40 41extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev); 42extern void devm_pinctrl_put(struct pinctrl *p); 43 44#ifdef CONFIG_PM 45extern int pinctrl_pm_select_default_state(struct device *dev); 46extern int pinctrl_pm_select_sleep_state(struct device *dev); 47extern int pinctrl_pm_select_idle_state(struct device *dev); 48#else 49static inline int pinctrl_pm_select_default_state(struct device *dev) 50{ 51 return 0; 52} 53static inline int pinctrl_pm_select_sleep_state(struct device *dev) 54{ 55 return 0; 56} 57static inline int pinctrl_pm_select_idle_state(struct device *dev) 58{ 59 return 0; 60} 61#endif 62 63#else /* !CONFIG_PINCTRL */ 64 65static inline int pinctrl_request_gpio(unsigned gpio) 66{ 67 return 0; 68} 69 70static inline void pinctrl_free_gpio(unsigned gpio) 71{ 72} 73 74static inline int pinctrl_gpio_direction_input(unsigned gpio) 75{ 76 return 0; 77} 78 79static inline int pinctrl_gpio_direction_output(unsigned gpio) 80{ 81 return 0; 82} 83 84static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config) 85{ 86 return 0; 87} 88 89static inline struct pinctrl * __must_check pinctrl_get(struct device *dev) 90{ 91 return NULL; 92} 93 94static inline void pinctrl_put(struct pinctrl *p) 95{ 96} 97 98static inline struct pinctrl_state * __must_check pinctrl_lookup_state( 99 struct pinctrl *p, 100 const char *name) 101{ 102 return NULL; 103} 104 105static inline int pinctrl_select_state(struct pinctrl *p, 106 struct pinctrl_state *s) 107{ 108 return 0; 109} 110 111static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev) 112{ 113 return NULL; 114} 115 116static inline void devm_pinctrl_put(struct pinctrl *p) 117{ 118} 119 120static inline int pinctrl_pm_select_default_state(struct device *dev) 121{ 122 return 0; 123} 124 125static inline int pinctrl_pm_select_sleep_state(struct device *dev) 126{ 127 return 0; 128} 129 130static inline int pinctrl_pm_select_idle_state(struct device *dev) 131{ 132 return 0; 133} 134 135#endif /* CONFIG_PINCTRL */ 136 137static 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 163static 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 169static 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 195static 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 */