1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __LINUX_GPIO_CONSUMER_H 3#define __LINUX_GPIO_CONSUMER_H 4 5#include <linux/bits.h> 6#include <linux/types.h> 7 8struct acpi_device; 9struct device; 10struct fwnode_handle; 11 12struct gpio_array; 13struct gpio_desc; 14 15/** 16 * struct gpio_descs - Struct containing an array of descriptors that can be 17 * obtained using gpiod_get_array() 18 * 19 * @info: Pointer to the opaque gpio_array structure 20 * @ndescs: Number of held descriptors 21 * @desc: Array of pointers to GPIO descriptors 22 */ 23struct gpio_descs { 24 struct gpio_array *info; 25 unsigned int ndescs; 26 struct gpio_desc *desc[]; 27}; 28 29#define GPIOD_FLAGS_BIT_DIR_SET BIT(0) 30#define GPIOD_FLAGS_BIT_DIR_OUT BIT(1) 31#define GPIOD_FLAGS_BIT_DIR_VAL BIT(2) 32#define GPIOD_FLAGS_BIT_OPEN_DRAIN BIT(3) 33#define GPIOD_FLAGS_BIT_NONEXCLUSIVE BIT(4) 34 35/** 36 * enum gpiod_flags - Optional flags that can be passed to one of gpiod_* to 37 * configure direction and output value. These values 38 * cannot be OR'd. 39 * 40 * @GPIOD_ASIS: Don't change anything 41 * @GPIOD_IN: Set lines to input mode 42 * @GPIOD_OUT_LOW: Set lines to output and drive them low 43 * @GPIOD_OUT_HIGH: Set lines to output and drive them high 44 * @GPIOD_OUT_LOW_OPEN_DRAIN: Set lines to open-drain output and drive them low 45 * @GPIOD_OUT_HIGH_OPEN_DRAIN: Set lines to open-drain output and drive them high 46 */ 47enum gpiod_flags { 48 GPIOD_ASIS = 0, 49 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET, 50 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT, 51 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT | 52 GPIOD_FLAGS_BIT_DIR_VAL, 53 GPIOD_OUT_LOW_OPEN_DRAIN = GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_OPEN_DRAIN, 54 GPIOD_OUT_HIGH_OPEN_DRAIN = GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_OPEN_DRAIN, 55}; 56 57#ifdef CONFIG_GPIOLIB 58 59/* Return the number of GPIOs associated with a device / function */ 60int gpiod_count(struct device *dev, const char *con_id); 61 62/* Acquire and dispose GPIOs */ 63struct gpio_desc *__must_check gpiod_get(struct device *dev, 64 const char *con_id, 65 enum gpiod_flags flags); 66struct gpio_desc *__must_check gpiod_get_index(struct device *dev, 67 const char *con_id, 68 unsigned int idx, 69 enum gpiod_flags flags); 70struct gpio_desc *__must_check gpiod_get_optional(struct device *dev, 71 const char *con_id, 72 enum gpiod_flags flags); 73struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev, 74 const char *con_id, 75 unsigned int index, 76 enum gpiod_flags flags); 77struct gpio_descs *__must_check gpiod_get_array(struct device *dev, 78 const char *con_id, 79 enum gpiod_flags flags); 80struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev, 81 const char *con_id, 82 enum gpiod_flags flags); 83void gpiod_put(struct gpio_desc *desc); 84void gpiod_put_array(struct gpio_descs *descs); 85 86struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, 87 const char *con_id, 88 enum gpiod_flags flags); 89struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, 90 const char *con_id, 91 unsigned int idx, 92 enum gpiod_flags flags); 93struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev, 94 const char *con_id, 95 enum gpiod_flags flags); 96struct gpio_desc *__must_check 97devm_gpiod_get_index_optional(struct device *dev, const char *con_id, 98 unsigned int index, enum gpiod_flags flags); 99struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev, 100 const char *con_id, 101 enum gpiod_flags flags); 102struct gpio_descs *__must_check 103devm_gpiod_get_array_optional(struct device *dev, const char *con_id, 104 enum gpiod_flags flags); 105void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); 106void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc); 107void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs); 108 109int gpiod_get_direction(struct gpio_desc *desc); 110int gpiod_direction_input(struct gpio_desc *desc); 111int gpiod_direction_output(struct gpio_desc *desc, int value); 112int gpiod_direction_output_raw(struct gpio_desc *desc, int value); 113int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags); 114int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags); 115 116/* Value get/set from non-sleeping context */ 117int gpiod_get_value(const struct gpio_desc *desc); 118int gpiod_get_array_value(unsigned int array_size, 119 struct gpio_desc **desc_array, 120 struct gpio_array *array_info, 121 unsigned long *value_bitmap); 122void gpiod_set_value(struct gpio_desc *desc, int value); 123int gpiod_set_array_value(unsigned int array_size, 124 struct gpio_desc **desc_array, 125 struct gpio_array *array_info, 126 unsigned long *value_bitmap); 127int gpiod_get_raw_value(const struct gpio_desc *desc); 128int gpiod_get_raw_array_value(unsigned int array_size, 129 struct gpio_desc **desc_array, 130 struct gpio_array *array_info, 131 unsigned long *value_bitmap); 132void gpiod_set_raw_value(struct gpio_desc *desc, int value); 133int gpiod_set_raw_array_value(unsigned int array_size, 134 struct gpio_desc **desc_array, 135 struct gpio_array *array_info, 136 unsigned long *value_bitmap); 137 138/* Value get/set from sleeping context */ 139int gpiod_get_value_cansleep(const struct gpio_desc *desc); 140int gpiod_get_array_value_cansleep(unsigned int array_size, 141 struct gpio_desc **desc_array, 142 struct gpio_array *array_info, 143 unsigned long *value_bitmap); 144void gpiod_set_value_cansleep(struct gpio_desc *desc, int value); 145int gpiod_set_array_value_cansleep(unsigned int array_size, 146 struct gpio_desc **desc_array, 147 struct gpio_array *array_info, 148 unsigned long *value_bitmap); 149int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc); 150int gpiod_get_raw_array_value_cansleep(unsigned int array_size, 151 struct gpio_desc **desc_array, 152 struct gpio_array *array_info, 153 unsigned long *value_bitmap); 154void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value); 155int gpiod_set_raw_array_value_cansleep(unsigned int array_size, 156 struct gpio_desc **desc_array, 157 struct gpio_array *array_info, 158 unsigned long *value_bitmap); 159 160int gpiod_set_config(struct gpio_desc *desc, unsigned long config); 161int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce); 162void gpiod_toggle_active_low(struct gpio_desc *desc); 163 164int gpiod_is_active_low(const struct gpio_desc *desc); 165int gpiod_cansleep(const struct gpio_desc *desc); 166 167int gpiod_to_irq(const struct gpio_desc *desc); 168int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name); 169 170/* Convert between the old gpio_ and new gpiod_ interfaces */ 171struct gpio_desc *gpio_to_desc(unsigned gpio); 172int desc_to_gpio(const struct gpio_desc *desc); 173 174struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode, 175 const char *con_id, int index, 176 enum gpiod_flags flags, 177 const char *label); 178struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, 179 struct fwnode_handle *child, 180 const char *con_id, int index, 181 enum gpiod_flags flags, 182 const char *label); 183 184#else /* CONFIG_GPIOLIB */ 185 186#include <linux/err.h> 187#include <linux/kernel.h> 188 189#include <asm/bug.h> 190 191static inline int gpiod_count(struct device *dev, const char *con_id) 192{ 193 return 0; 194} 195 196static inline struct gpio_desc *__must_check gpiod_get(struct device *dev, 197 const char *con_id, 198 enum gpiod_flags flags) 199{ 200 return ERR_PTR(-ENOSYS); 201} 202static inline struct gpio_desc *__must_check 203gpiod_get_index(struct device *dev, 204 const char *con_id, 205 unsigned int idx, 206 enum gpiod_flags flags) 207{ 208 return ERR_PTR(-ENOSYS); 209} 210 211static inline struct gpio_desc *__must_check 212gpiod_get_optional(struct device *dev, const char *con_id, 213 enum gpiod_flags flags) 214{ 215 return NULL; 216} 217 218static inline struct gpio_desc *__must_check 219gpiod_get_index_optional(struct device *dev, const char *con_id, 220 unsigned int index, enum gpiod_flags flags) 221{ 222 return NULL; 223} 224 225static inline struct gpio_descs *__must_check 226gpiod_get_array(struct device *dev, const char *con_id, 227 enum gpiod_flags flags) 228{ 229 return ERR_PTR(-ENOSYS); 230} 231 232static inline struct gpio_descs *__must_check 233gpiod_get_array_optional(struct device *dev, const char *con_id, 234 enum gpiod_flags flags) 235{ 236 return NULL; 237} 238 239static inline void gpiod_put(struct gpio_desc *desc) 240{ 241 might_sleep(); 242 243 /* GPIO can never have been requested */ 244 WARN_ON(desc); 245} 246 247static inline void devm_gpiod_unhinge(struct device *dev, 248 struct gpio_desc *desc) 249{ 250 might_sleep(); 251 252 /* GPIO can never have been requested */ 253 WARN_ON(desc); 254} 255 256static inline void gpiod_put_array(struct gpio_descs *descs) 257{ 258 might_sleep(); 259 260 /* GPIO can never have been requested */ 261 WARN_ON(descs); 262} 263 264static inline struct gpio_desc *__must_check 265devm_gpiod_get(struct device *dev, 266 const char *con_id, 267 enum gpiod_flags flags) 268{ 269 return ERR_PTR(-ENOSYS); 270} 271static inline 272struct gpio_desc *__must_check 273devm_gpiod_get_index(struct device *dev, 274 const char *con_id, 275 unsigned int idx, 276 enum gpiod_flags flags) 277{ 278 return ERR_PTR(-ENOSYS); 279} 280 281static inline struct gpio_desc *__must_check 282devm_gpiod_get_optional(struct device *dev, const char *con_id, 283 enum gpiod_flags flags) 284{ 285 return NULL; 286} 287 288static inline struct gpio_desc *__must_check 289devm_gpiod_get_index_optional(struct device *dev, const char *con_id, 290 unsigned int index, enum gpiod_flags flags) 291{ 292 return NULL; 293} 294 295static inline struct gpio_descs *__must_check 296devm_gpiod_get_array(struct device *dev, const char *con_id, 297 enum gpiod_flags flags) 298{ 299 return ERR_PTR(-ENOSYS); 300} 301 302static inline struct gpio_descs *__must_check 303devm_gpiod_get_array_optional(struct device *dev, const char *con_id, 304 enum gpiod_flags flags) 305{ 306 return NULL; 307} 308 309static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) 310{ 311 might_sleep(); 312 313 /* GPIO can never have been requested */ 314 WARN_ON(desc); 315} 316 317static inline void devm_gpiod_put_array(struct device *dev, 318 struct gpio_descs *descs) 319{ 320 might_sleep(); 321 322 /* GPIO can never have been requested */ 323 WARN_ON(descs); 324} 325 326 327static inline int gpiod_get_direction(const struct gpio_desc *desc) 328{ 329 /* GPIO can never have been requested */ 330 WARN_ON(desc); 331 return -ENOSYS; 332} 333static inline int gpiod_direction_input(struct gpio_desc *desc) 334{ 335 /* GPIO can never have been requested */ 336 WARN_ON(desc); 337 return -ENOSYS; 338} 339static inline int gpiod_direction_output(struct gpio_desc *desc, int value) 340{ 341 /* GPIO can never have been requested */ 342 WARN_ON(desc); 343 return -ENOSYS; 344} 345static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value) 346{ 347 /* GPIO can never have been requested */ 348 WARN_ON(desc); 349 return -ENOSYS; 350} 351static inline int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, 352 unsigned long flags) 353{ 354 WARN_ON(desc); 355 return -ENOSYS; 356} 357static inline int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, 358 unsigned long flags) 359{ 360 WARN_ON(desc); 361 return -ENOSYS; 362} 363static inline int gpiod_get_value(const struct gpio_desc *desc) 364{ 365 /* GPIO can never have been requested */ 366 WARN_ON(desc); 367 return 0; 368} 369static inline int gpiod_get_array_value(unsigned int array_size, 370 struct gpio_desc **desc_array, 371 struct gpio_array *array_info, 372 unsigned long *value_bitmap) 373{ 374 /* GPIO can never have been requested */ 375 WARN_ON(desc_array); 376 return 0; 377} 378static inline void gpiod_set_value(struct gpio_desc *desc, int value) 379{ 380 /* GPIO can never have been requested */ 381 WARN_ON(desc); 382} 383static inline int gpiod_set_array_value(unsigned int array_size, 384 struct gpio_desc **desc_array, 385 struct gpio_array *array_info, 386 unsigned long *value_bitmap) 387{ 388 /* GPIO can never have been requested */ 389 WARN_ON(desc_array); 390 return 0; 391} 392static inline int gpiod_get_raw_value(const struct gpio_desc *desc) 393{ 394 /* GPIO can never have been requested */ 395 WARN_ON(desc); 396 return 0; 397} 398static inline int gpiod_get_raw_array_value(unsigned int array_size, 399 struct gpio_desc **desc_array, 400 struct gpio_array *array_info, 401 unsigned long *value_bitmap) 402{ 403 /* GPIO can never have been requested */ 404 WARN_ON(desc_array); 405 return 0; 406} 407static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value) 408{ 409 /* GPIO can never have been requested */ 410 WARN_ON(desc); 411} 412static inline int gpiod_set_raw_array_value(unsigned int array_size, 413 struct gpio_desc **desc_array, 414 struct gpio_array *array_info, 415 unsigned long *value_bitmap) 416{ 417 /* GPIO can never have been requested */ 418 WARN_ON(desc_array); 419 return 0; 420} 421 422static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc) 423{ 424 /* GPIO can never have been requested */ 425 WARN_ON(desc); 426 return 0; 427} 428static inline int gpiod_get_array_value_cansleep(unsigned int array_size, 429 struct gpio_desc **desc_array, 430 struct gpio_array *array_info, 431 unsigned long *value_bitmap) 432{ 433 /* GPIO can never have been requested */ 434 WARN_ON(desc_array); 435 return 0; 436} 437static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value) 438{ 439 /* GPIO can never have been requested */ 440 WARN_ON(desc); 441} 442static inline int gpiod_set_array_value_cansleep(unsigned int array_size, 443 struct gpio_desc **desc_array, 444 struct gpio_array *array_info, 445 unsigned long *value_bitmap) 446{ 447 /* GPIO can never have been requested */ 448 WARN_ON(desc_array); 449 return 0; 450} 451static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc) 452{ 453 /* GPIO can never have been requested */ 454 WARN_ON(desc); 455 return 0; 456} 457static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size, 458 struct gpio_desc **desc_array, 459 struct gpio_array *array_info, 460 unsigned long *value_bitmap) 461{ 462 /* GPIO can never have been requested */ 463 WARN_ON(desc_array); 464 return 0; 465} 466static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, 467 int value) 468{ 469 /* GPIO can never have been requested */ 470 WARN_ON(desc); 471} 472static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size, 473 struct gpio_desc **desc_array, 474 struct gpio_array *array_info, 475 unsigned long *value_bitmap) 476{ 477 /* GPIO can never have been requested */ 478 WARN_ON(desc_array); 479 return 0; 480} 481 482static inline int gpiod_set_config(struct gpio_desc *desc, unsigned long config) 483{ 484 /* GPIO can never have been requested */ 485 WARN_ON(desc); 486 return -ENOSYS; 487} 488 489static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce) 490{ 491 /* GPIO can never have been requested */ 492 WARN_ON(desc); 493 return -ENOSYS; 494} 495 496static inline void gpiod_toggle_active_low(struct gpio_desc *desc) 497{ 498 /* GPIO can never have been requested */ 499 WARN_ON(desc); 500} 501 502static inline int gpiod_is_active_low(const struct gpio_desc *desc) 503{ 504 /* GPIO can never have been requested */ 505 WARN_ON(desc); 506 return 0; 507} 508static inline int gpiod_cansleep(const struct gpio_desc *desc) 509{ 510 /* GPIO can never have been requested */ 511 WARN_ON(desc); 512 return 0; 513} 514 515static inline int gpiod_to_irq(const struct gpio_desc *desc) 516{ 517 /* GPIO can never have been requested */ 518 WARN_ON(desc); 519 return -EINVAL; 520} 521 522static inline int gpiod_set_consumer_name(struct gpio_desc *desc, 523 const char *name) 524{ 525 /* GPIO can never have been requested */ 526 WARN_ON(desc); 527 return -EINVAL; 528} 529 530static inline struct gpio_desc *gpio_to_desc(unsigned gpio) 531{ 532 return NULL; 533} 534 535static inline int desc_to_gpio(const struct gpio_desc *desc) 536{ 537 /* GPIO can never have been requested */ 538 WARN_ON(desc); 539 return -EINVAL; 540} 541 542static inline 543struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode, 544 const char *con_id, int index, 545 enum gpiod_flags flags, 546 const char *label) 547{ 548 return ERR_PTR(-ENOSYS); 549} 550 551static inline 552struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, 553 struct fwnode_handle *fwnode, 554 const char *con_id, int index, 555 enum gpiod_flags flags, 556 const char *label) 557{ 558 return ERR_PTR(-ENOSYS); 559} 560 561#endif /* CONFIG_GPIOLIB */ 562 563static inline 564struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev, 565 struct fwnode_handle *fwnode, 566 const char *con_id, 567 enum gpiod_flags flags, 568 const char *label) 569{ 570 return devm_fwnode_gpiod_get_index(dev, fwnode, con_id, 0, 571 flags, label); 572} 573 574struct acpi_gpio_params { 575 unsigned int crs_entry_index; 576 unsigned int line_index; 577 bool active_low; 578}; 579 580struct acpi_gpio_mapping { 581 const char *name; 582 const struct acpi_gpio_params *data; 583 unsigned int size; 584 585/* Ignore IoRestriction field */ 586#define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION BIT(0) 587/* 588 * When ACPI GPIO mapping table is in use the index parameter inside it 589 * refers to the GPIO resource in _CRS method. That index has no 590 * distinction of actual type of the resource. When consumer wants to 591 * get GpioIo type explicitly, this quirk may be used. 592 */ 593#define ACPI_GPIO_QUIRK_ONLY_GPIOIO BIT(1) 594/* Use given pin as an absolute GPIO number in the system */ 595#define ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER BIT(2) 596 597 unsigned int quirks; 598}; 599 600#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI) 601 602int acpi_dev_add_driver_gpios(struct acpi_device *adev, 603 const struct acpi_gpio_mapping *gpios); 604void acpi_dev_remove_driver_gpios(struct acpi_device *adev); 605 606int devm_acpi_dev_add_driver_gpios(struct device *dev, 607 const struct acpi_gpio_mapping *gpios); 608 609#else /* CONFIG_GPIOLIB && CONFIG_ACPI */ 610 611#include <linux/err.h> 612 613static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev, 614 const struct acpi_gpio_mapping *gpios) 615{ 616 return -ENXIO; 617} 618static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {} 619 620static inline int devm_acpi_dev_add_driver_gpios(struct device *dev, 621 const struct acpi_gpio_mapping *gpios) 622{ 623 return -ENXIO; 624} 625 626#endif /* CONFIG_GPIOLIB && CONFIG_ACPI */ 627 628 629#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) 630 631int gpiod_export(struct gpio_desc *desc, bool direction_may_change); 632int gpiod_export_link(struct device *dev, const char *name, 633 struct gpio_desc *desc); 634void gpiod_unexport(struct gpio_desc *desc); 635 636#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 637 638#include <asm/errno.h> 639 640static inline int gpiod_export(struct gpio_desc *desc, 641 bool direction_may_change) 642{ 643 return -ENOSYS; 644} 645 646static inline int gpiod_export_link(struct device *dev, const char *name, 647 struct gpio_desc *desc) 648{ 649 return -ENOSYS; 650} 651 652static inline void gpiod_unexport(struct gpio_desc *desc) 653{ 654} 655 656#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 657 658#endif 659