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