at v4.13 13 kB view raw
1#ifndef __LINUX_GPIO_CONSUMER_H 2#define __LINUX_GPIO_CONSUMER_H 3 4#include <linux/bug.h> 5#include <linux/err.h> 6#include <linux/kernel.h> 7 8struct device; 9 10/** 11 * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are 12 * preferable to the old integer-based handles. 13 * 14 * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid 15 * until the GPIO is released. 16 */ 17struct gpio_desc; 18 19/** 20 * Struct containing an array of descriptors that can be obtained using 21 * gpiod_get_array(). 22 */ 23struct gpio_descs { 24 unsigned int ndescs; 25 struct gpio_desc *desc[]; 26}; 27 28#define GPIOD_FLAGS_BIT_DIR_SET BIT(0) 29#define GPIOD_FLAGS_BIT_DIR_OUT BIT(1) 30#define GPIOD_FLAGS_BIT_DIR_VAL BIT(2) 31 32/** 33 * Optional flags that can be passed to one of gpiod_* to configure direction 34 * and output value. These values cannot be OR'd. 35 */ 36enum gpiod_flags { 37 GPIOD_ASIS = 0, 38 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET, 39 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT, 40 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT | 41 GPIOD_FLAGS_BIT_DIR_VAL, 42}; 43 44#ifdef CONFIG_GPIOLIB 45 46/* Return the number of GPIOs associated with a device / function */ 47int gpiod_count(struct device *dev, const char *con_id); 48 49/* Acquire and dispose GPIOs */ 50struct gpio_desc *__must_check gpiod_get(struct device *dev, 51 const char *con_id, 52 enum gpiod_flags flags); 53struct gpio_desc *__must_check gpiod_get_index(struct device *dev, 54 const char *con_id, 55 unsigned int idx, 56 enum gpiod_flags flags); 57struct gpio_desc *__must_check gpiod_get_optional(struct device *dev, 58 const char *con_id, 59 enum gpiod_flags flags); 60struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev, 61 const char *con_id, 62 unsigned int index, 63 enum gpiod_flags flags); 64struct gpio_descs *__must_check gpiod_get_array(struct device *dev, 65 const char *con_id, 66 enum gpiod_flags flags); 67struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev, 68 const char *con_id, 69 enum gpiod_flags flags); 70void gpiod_put(struct gpio_desc *desc); 71void gpiod_put_array(struct gpio_descs *descs); 72 73struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, 74 const char *con_id, 75 enum gpiod_flags flags); 76struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, 77 const char *con_id, 78 unsigned int idx, 79 enum gpiod_flags flags); 80struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev, 81 const char *con_id, 82 enum gpiod_flags flags); 83struct gpio_desc *__must_check 84devm_gpiod_get_index_optional(struct device *dev, const char *con_id, 85 unsigned int index, enum gpiod_flags flags); 86struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev, 87 const char *con_id, 88 enum gpiod_flags flags); 89struct gpio_descs *__must_check 90devm_gpiod_get_array_optional(struct device *dev, const char *con_id, 91 enum gpiod_flags flags); 92void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); 93void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs); 94 95int gpiod_get_direction(struct gpio_desc *desc); 96int gpiod_direction_input(struct gpio_desc *desc); 97int gpiod_direction_output(struct gpio_desc *desc, int value); 98int gpiod_direction_output_raw(struct gpio_desc *desc, int value); 99 100/* Value get/set from non-sleeping context */ 101int gpiod_get_value(const struct gpio_desc *desc); 102void gpiod_set_value(struct gpio_desc *desc, int value); 103void gpiod_set_array_value(unsigned int array_size, 104 struct gpio_desc **desc_array, int *value_array); 105int gpiod_get_raw_value(const struct gpio_desc *desc); 106void gpiod_set_raw_value(struct gpio_desc *desc, int value); 107void gpiod_set_raw_array_value(unsigned int array_size, 108 struct gpio_desc **desc_array, 109 int *value_array); 110 111/* Value get/set from sleeping context */ 112int gpiod_get_value_cansleep(const struct gpio_desc *desc); 113void gpiod_set_value_cansleep(struct gpio_desc *desc, int value); 114void gpiod_set_array_value_cansleep(unsigned int array_size, 115 struct gpio_desc **desc_array, 116 int *value_array); 117int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc); 118void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value); 119void gpiod_set_raw_array_value_cansleep(unsigned int array_size, 120 struct gpio_desc **desc_array, 121 int *value_array); 122 123int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce); 124 125int gpiod_is_active_low(const struct gpio_desc *desc); 126int gpiod_cansleep(const struct gpio_desc *desc); 127 128int gpiod_to_irq(const struct gpio_desc *desc); 129 130/* Convert between the old gpio_ and new gpiod_ interfaces */ 131struct gpio_desc *gpio_to_desc(unsigned gpio); 132int desc_to_gpio(const struct gpio_desc *desc); 133 134/* Child properties interface */ 135struct fwnode_handle; 136 137struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode, 138 const char *propname, int index, 139 enum gpiod_flags dflags, 140 const char *label); 141struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev, 142 const char *con_id, int index, 143 struct fwnode_handle *child, 144 enum gpiod_flags flags, 145 const char *label); 146 147#else /* CONFIG_GPIOLIB */ 148 149static inline int gpiod_count(struct device *dev, const char *con_id) 150{ 151 return 0; 152} 153 154static inline struct gpio_desc *__must_check gpiod_get(struct device *dev, 155 const char *con_id, 156 enum gpiod_flags flags) 157{ 158 return ERR_PTR(-ENOSYS); 159} 160static inline struct gpio_desc *__must_check 161gpiod_get_index(struct device *dev, 162 const char *con_id, 163 unsigned int idx, 164 enum gpiod_flags flags) 165{ 166 return ERR_PTR(-ENOSYS); 167} 168 169static inline struct gpio_desc *__must_check 170gpiod_get_optional(struct device *dev, const char *con_id, 171 enum gpiod_flags flags) 172{ 173 return NULL; 174} 175 176static inline struct gpio_desc *__must_check 177gpiod_get_index_optional(struct device *dev, const char *con_id, 178 unsigned int index, enum gpiod_flags flags) 179{ 180 return NULL; 181} 182 183static inline struct gpio_descs *__must_check 184gpiod_get_array(struct device *dev, const char *con_id, 185 enum gpiod_flags flags) 186{ 187 return ERR_PTR(-ENOSYS); 188} 189 190static inline struct gpio_descs *__must_check 191gpiod_get_array_optional(struct device *dev, const char *con_id, 192 enum gpiod_flags flags) 193{ 194 return NULL; 195} 196 197static inline void gpiod_put(struct gpio_desc *desc) 198{ 199 might_sleep(); 200 201 /* GPIO can never have been requested */ 202 WARN_ON(1); 203} 204 205static inline void gpiod_put_array(struct gpio_descs *descs) 206{ 207 might_sleep(); 208 209 /* GPIO can never have been requested */ 210 WARN_ON(1); 211} 212 213static inline struct gpio_desc *__must_check 214devm_gpiod_get(struct device *dev, 215 const char *con_id, 216 enum gpiod_flags flags) 217{ 218 return ERR_PTR(-ENOSYS); 219} 220static inline 221struct gpio_desc *__must_check 222devm_gpiod_get_index(struct device *dev, 223 const char *con_id, 224 unsigned int idx, 225 enum gpiod_flags flags) 226{ 227 return ERR_PTR(-ENOSYS); 228} 229 230static inline struct gpio_desc *__must_check 231devm_gpiod_get_optional(struct device *dev, const char *con_id, 232 enum gpiod_flags flags) 233{ 234 return NULL; 235} 236 237static inline struct gpio_desc *__must_check 238devm_gpiod_get_index_optional(struct device *dev, const char *con_id, 239 unsigned int index, enum gpiod_flags flags) 240{ 241 return NULL; 242} 243 244static inline struct gpio_descs *__must_check 245devm_gpiod_get_array(struct device *dev, const char *con_id, 246 enum gpiod_flags flags) 247{ 248 return ERR_PTR(-ENOSYS); 249} 250 251static inline struct gpio_descs *__must_check 252devm_gpiod_get_array_optional(struct device *dev, const char *con_id, 253 enum gpiod_flags flags) 254{ 255 return NULL; 256} 257 258static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) 259{ 260 might_sleep(); 261 262 /* GPIO can never have been requested */ 263 WARN_ON(1); 264} 265 266static inline void devm_gpiod_put_array(struct device *dev, 267 struct gpio_descs *descs) 268{ 269 might_sleep(); 270 271 /* GPIO can never have been requested */ 272 WARN_ON(1); 273} 274 275 276static inline int gpiod_get_direction(const struct gpio_desc *desc) 277{ 278 /* GPIO can never have been requested */ 279 WARN_ON(1); 280 return -ENOSYS; 281} 282static inline int gpiod_direction_input(struct gpio_desc *desc) 283{ 284 /* GPIO can never have been requested */ 285 WARN_ON(1); 286 return -ENOSYS; 287} 288static inline int gpiod_direction_output(struct gpio_desc *desc, int value) 289{ 290 /* GPIO can never have been requested */ 291 WARN_ON(1); 292 return -ENOSYS; 293} 294static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value) 295{ 296 /* GPIO can never have been requested */ 297 WARN_ON(1); 298 return -ENOSYS; 299} 300 301 302static inline int gpiod_get_value(const struct gpio_desc *desc) 303{ 304 /* GPIO can never have been requested */ 305 WARN_ON(1); 306 return 0; 307} 308static inline void gpiod_set_value(struct gpio_desc *desc, int value) 309{ 310 /* GPIO can never have been requested */ 311 WARN_ON(1); 312} 313static inline void gpiod_set_array_value(unsigned int array_size, 314 struct gpio_desc **desc_array, 315 int *value_array) 316{ 317 /* GPIO can never have been requested */ 318 WARN_ON(1); 319} 320static inline int gpiod_get_raw_value(const struct gpio_desc *desc) 321{ 322 /* GPIO can never have been requested */ 323 WARN_ON(1); 324 return 0; 325} 326static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value) 327{ 328 /* GPIO can never have been requested */ 329 WARN_ON(1); 330} 331static inline void gpiod_set_raw_array_value(unsigned int array_size, 332 struct gpio_desc **desc_array, 333 int *value_array) 334{ 335 /* GPIO can never have been requested */ 336 WARN_ON(1); 337} 338 339static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc) 340{ 341 /* GPIO can never have been requested */ 342 WARN_ON(1); 343 return 0; 344} 345static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value) 346{ 347 /* GPIO can never have been requested */ 348 WARN_ON(1); 349} 350static inline void gpiod_set_array_value_cansleep(unsigned int array_size, 351 struct gpio_desc **desc_array, 352 int *value_array) 353{ 354 /* GPIO can never have been requested */ 355 WARN_ON(1); 356} 357static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc) 358{ 359 /* GPIO can never have been requested */ 360 WARN_ON(1); 361 return 0; 362} 363static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, 364 int value) 365{ 366 /* GPIO can never have been requested */ 367 WARN_ON(1); 368} 369static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size, 370 struct gpio_desc **desc_array, 371 int *value_array) 372{ 373 /* GPIO can never have been requested */ 374 WARN_ON(1); 375} 376 377static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce) 378{ 379 /* GPIO can never have been requested */ 380 WARN_ON(1); 381 return -ENOSYS; 382} 383 384static inline int gpiod_is_active_low(const struct gpio_desc *desc) 385{ 386 /* GPIO can never have been requested */ 387 WARN_ON(1); 388 return 0; 389} 390static inline int gpiod_cansleep(const struct gpio_desc *desc) 391{ 392 /* GPIO can never have been requested */ 393 WARN_ON(1); 394 return 0; 395} 396 397static inline int gpiod_to_irq(const struct gpio_desc *desc) 398{ 399 /* GPIO can never have been requested */ 400 WARN_ON(1); 401 return -EINVAL; 402} 403 404static inline struct gpio_desc *gpio_to_desc(unsigned gpio) 405{ 406 return ERR_PTR(-EINVAL); 407} 408 409static inline int desc_to_gpio(const struct gpio_desc *desc) 410{ 411 /* GPIO can never have been requested */ 412 WARN_ON(1); 413 return -EINVAL; 414} 415 416/* Child properties interface */ 417struct fwnode_handle; 418 419static inline 420struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode, 421 const char *propname, int index, 422 enum gpiod_flags dflags, 423 const char *label) 424{ 425 return ERR_PTR(-ENOSYS); 426} 427 428static inline 429struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev, 430 const char *con_id, int index, 431 struct fwnode_handle *child, 432 enum gpiod_flags flags, 433 const char *label) 434{ 435 return ERR_PTR(-ENOSYS); 436} 437 438#endif /* CONFIG_GPIOLIB */ 439 440static inline 441struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev, 442 const char *con_id, 443 struct fwnode_handle *child, 444 enum gpiod_flags flags, 445 const char *label) 446{ 447 return devm_fwnode_get_index_gpiod_from_child(dev, con_id, 0, child, 448 flags, label); 449} 450 451#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) 452 453int gpiod_export(struct gpio_desc *desc, bool direction_may_change); 454int gpiod_export_link(struct device *dev, const char *name, 455 struct gpio_desc *desc); 456void gpiod_unexport(struct gpio_desc *desc); 457 458#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 459 460static inline int gpiod_export(struct gpio_desc *desc, 461 bool direction_may_change) 462{ 463 return -ENOSYS; 464} 465 466static inline int gpiod_export_link(struct device *dev, const char *name, 467 struct gpio_desc *desc) 468{ 469 return -ENOSYS; 470} 471 472static inline void gpiod_unexport(struct gpio_desc *desc) 473{ 474} 475 476#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 477 478#endif