at v6.3 19 kB view raw
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/bug.h> 7#include <linux/compiler_types.h> 8#include <linux/err.h> 9 10struct device; 11struct gpio_desc; 12struct gpio_array; 13 14/** 15 * struct gpio_descs - Struct containing an array of descriptors that can be 16 * obtained using gpiod_get_array() 17 * 18 * @info: Pointer to the opaque gpio_array structure 19 * @ndescs: Number of held descriptors 20 * @desc: Array of pointers to GPIO descriptors 21 */ 22struct gpio_descs { 23 struct gpio_array *info; 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#define GPIOD_FLAGS_BIT_OPEN_DRAIN BIT(3) 32#define GPIOD_FLAGS_BIT_NONEXCLUSIVE BIT(4) 33 34/** 35 * enum gpiod_flags - Optional flags that can be passed to one of gpiod_* to 36 * configure direction and output value. These values 37 * cannot be OR'd. 38 * 39 * @GPIOD_ASIS: Don't change anything 40 * @GPIOD_IN: Set lines to input mode 41 * @GPIOD_OUT_LOW: Set lines to output and drive them low 42 * @GPIOD_OUT_HIGH: Set lines to output and drive them high 43 * @GPIOD_OUT_LOW_OPEN_DRAIN: Set lines to open-drain output and drive them low 44 * @GPIOD_OUT_HIGH_OPEN_DRAIN: Set lines to open-drain output and drive them high 45 */ 46enum gpiod_flags { 47 GPIOD_ASIS = 0, 48 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET, 49 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT, 50 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT | 51 GPIOD_FLAGS_BIT_DIR_VAL, 52 GPIOD_OUT_LOW_OPEN_DRAIN = GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_OPEN_DRAIN, 53 GPIOD_OUT_HIGH_OPEN_DRAIN = GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_OPEN_DRAIN, 54}; 55 56#ifdef CONFIG_GPIOLIB 57 58/* Return the number of GPIOs associated with a device / function */ 59int gpiod_count(struct device *dev, const char *con_id); 60 61/* Acquire and dispose GPIOs */ 62struct gpio_desc *__must_check gpiod_get(struct device *dev, 63 const char *con_id, 64 enum gpiod_flags flags); 65struct gpio_desc *__must_check gpiod_get_index(struct device *dev, 66 const char *con_id, 67 unsigned int idx, 68 enum gpiod_flags flags); 69struct gpio_desc *__must_check gpiod_get_optional(struct device *dev, 70 const char *con_id, 71 enum gpiod_flags flags); 72struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev, 73 const char *con_id, 74 unsigned int index, 75 enum gpiod_flags flags); 76struct gpio_descs *__must_check gpiod_get_array(struct device *dev, 77 const char *con_id, 78 enum gpiod_flags flags); 79struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev, 80 const char *con_id, 81 enum gpiod_flags flags); 82void gpiod_put(struct gpio_desc *desc); 83void gpiod_put_array(struct gpio_descs *descs); 84 85struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, 86 const char *con_id, 87 enum gpiod_flags flags); 88struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, 89 const char *con_id, 90 unsigned int idx, 91 enum gpiod_flags flags); 92struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev, 93 const char *con_id, 94 enum gpiod_flags flags); 95struct gpio_desc *__must_check 96devm_gpiod_get_index_optional(struct device *dev, const char *con_id, 97 unsigned int index, enum gpiod_flags flags); 98struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev, 99 const char *con_id, 100 enum gpiod_flags flags); 101struct gpio_descs *__must_check 102devm_gpiod_get_array_optional(struct device *dev, const char *con_id, 103 enum gpiod_flags flags); 104void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); 105void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc); 106void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs); 107 108int gpiod_get_direction(struct gpio_desc *desc); 109int gpiod_direction_input(struct gpio_desc *desc); 110int gpiod_direction_output(struct gpio_desc *desc, int value); 111int gpiod_direction_output_raw(struct gpio_desc *desc, int value); 112int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags); 113int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags); 114 115/* Value get/set from non-sleeping context */ 116int gpiod_get_value(const struct gpio_desc *desc); 117int gpiod_get_array_value(unsigned int array_size, 118 struct gpio_desc **desc_array, 119 struct gpio_array *array_info, 120 unsigned long *value_bitmap); 121void gpiod_set_value(struct gpio_desc *desc, int value); 122int gpiod_set_array_value(unsigned int array_size, 123 struct gpio_desc **desc_array, 124 struct gpio_array *array_info, 125 unsigned long *value_bitmap); 126int gpiod_get_raw_value(const struct gpio_desc *desc); 127int gpiod_get_raw_array_value(unsigned int array_size, 128 struct gpio_desc **desc_array, 129 struct gpio_array *array_info, 130 unsigned long *value_bitmap); 131void gpiod_set_raw_value(struct gpio_desc *desc, int value); 132int gpiod_set_raw_array_value(unsigned int array_size, 133 struct gpio_desc **desc_array, 134 struct gpio_array *array_info, 135 unsigned long *value_bitmap); 136 137/* Value get/set from sleeping context */ 138int gpiod_get_value_cansleep(const struct gpio_desc *desc); 139int gpiod_get_array_value_cansleep(unsigned int array_size, 140 struct gpio_desc **desc_array, 141 struct gpio_array *array_info, 142 unsigned long *value_bitmap); 143void gpiod_set_value_cansleep(struct gpio_desc *desc, int value); 144int gpiod_set_array_value_cansleep(unsigned int array_size, 145 struct gpio_desc **desc_array, 146 struct gpio_array *array_info, 147 unsigned long *value_bitmap); 148int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc); 149int gpiod_get_raw_array_value_cansleep(unsigned int array_size, 150 struct gpio_desc **desc_array, 151 struct gpio_array *array_info, 152 unsigned long *value_bitmap); 153void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value); 154int gpiod_set_raw_array_value_cansleep(unsigned int array_size, 155 struct gpio_desc **desc_array, 156 struct gpio_array *array_info, 157 unsigned long *value_bitmap); 158 159int gpiod_set_config(struct gpio_desc *desc, unsigned long config); 160int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce); 161int gpiod_set_transitory(struct gpio_desc *desc, bool transitory); 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 174/* Child properties interface */ 175struct fwnode_handle; 176 177struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode, 178 const char *con_id, int index, 179 enum gpiod_flags flags, 180 const char *label); 181struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, 182 struct fwnode_handle *child, 183 const char *con_id, int index, 184 enum gpiod_flags flags, 185 const char *label); 186 187#else /* CONFIG_GPIOLIB */ 188 189#include <linux/kernel.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 int gpiod_set_transitory(struct gpio_desc *desc, bool transitory) 497{ 498 /* GPIO can never have been requested */ 499 WARN_ON(desc); 500 return -ENOSYS; 501} 502 503static inline void gpiod_toggle_active_low(struct gpio_desc *desc) 504{ 505 /* GPIO can never have been requested */ 506 WARN_ON(desc); 507} 508 509static inline int gpiod_is_active_low(const struct gpio_desc *desc) 510{ 511 /* GPIO can never have been requested */ 512 WARN_ON(desc); 513 return 0; 514} 515static inline int gpiod_cansleep(const struct gpio_desc *desc) 516{ 517 /* GPIO can never have been requested */ 518 WARN_ON(desc); 519 return 0; 520} 521 522static inline int gpiod_to_irq(const struct gpio_desc *desc) 523{ 524 /* GPIO can never have been requested */ 525 WARN_ON(desc); 526 return -EINVAL; 527} 528 529static inline int gpiod_set_consumer_name(struct gpio_desc *desc, 530 const char *name) 531{ 532 /* GPIO can never have been requested */ 533 WARN_ON(desc); 534 return -EINVAL; 535} 536 537static inline struct gpio_desc *gpio_to_desc(unsigned gpio) 538{ 539 return NULL; 540} 541 542static inline int desc_to_gpio(const struct gpio_desc *desc) 543{ 544 /* GPIO can never have been requested */ 545 WARN_ON(desc); 546 return -EINVAL; 547} 548 549/* Child properties interface */ 550struct fwnode_handle; 551 552static inline 553struct gpio_desc *fwnode_gpiod_get_index(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 561static inline 562struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, 563 struct fwnode_handle *fwnode, 564 const char *con_id, int index, 565 enum gpiod_flags flags, 566 const char *label) 567{ 568 return ERR_PTR(-ENOSYS); 569} 570 571#endif /* CONFIG_GPIOLIB */ 572 573static inline 574struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev, 575 struct fwnode_handle *fwnode, 576 const char *con_id, 577 enum gpiod_flags flags, 578 const char *label) 579{ 580 return devm_fwnode_gpiod_get_index(dev, fwnode, con_id, 0, 581 flags, label); 582} 583 584struct acpi_gpio_params { 585 unsigned int crs_entry_index; 586 unsigned int line_index; 587 bool active_low; 588}; 589 590struct acpi_gpio_mapping { 591 const char *name; 592 const struct acpi_gpio_params *data; 593 unsigned int size; 594 595/* Ignore IoRestriction field */ 596#define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION BIT(0) 597/* 598 * When ACPI GPIO mapping table is in use the index parameter inside it 599 * refers to the GPIO resource in _CRS method. That index has no 600 * distinction of actual type of the resource. When consumer wants to 601 * get GpioIo type explicitly, this quirk may be used. 602 */ 603#define ACPI_GPIO_QUIRK_ONLY_GPIOIO BIT(1) 604/* Use given pin as an absolute GPIO number in the system */ 605#define ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER BIT(2) 606 607 unsigned int quirks; 608}; 609 610struct acpi_device; 611 612#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI) 613 614int acpi_dev_add_driver_gpios(struct acpi_device *adev, 615 const struct acpi_gpio_mapping *gpios); 616void acpi_dev_remove_driver_gpios(struct acpi_device *adev); 617 618int devm_acpi_dev_add_driver_gpios(struct device *dev, 619 const struct acpi_gpio_mapping *gpios); 620 621struct gpio_desc *acpi_get_and_request_gpiod(char *path, unsigned int pin, char *label); 622 623#else /* CONFIG_GPIOLIB && CONFIG_ACPI */ 624 625static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev, 626 const struct acpi_gpio_mapping *gpios) 627{ 628 return -ENXIO; 629} 630static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {} 631 632static inline int devm_acpi_dev_add_driver_gpios(struct device *dev, 633 const struct acpi_gpio_mapping *gpios) 634{ 635 return -ENXIO; 636} 637 638static inline struct gpio_desc *acpi_get_and_request_gpiod(char *path, unsigned int pin, 639 char *label) 640{ 641 return ERR_PTR(-ENOSYS); 642} 643 644#endif /* CONFIG_GPIOLIB && CONFIG_ACPI */ 645 646 647#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) 648 649int gpiod_export(struct gpio_desc *desc, bool direction_may_change); 650int gpiod_export_link(struct device *dev, const char *name, 651 struct gpio_desc *desc); 652void gpiod_unexport(struct gpio_desc *desc); 653 654#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 655 656static inline int gpiod_export(struct gpio_desc *desc, 657 bool direction_may_change) 658{ 659 return -ENOSYS; 660} 661 662static inline int gpiod_export_link(struct device *dev, const char *name, 663 struct gpio_desc *desc) 664{ 665 return -ENOSYS; 666} 667 668static inline void gpiod_unexport(struct gpio_desc *desc) 669{ 670} 671 672#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 673 674#endif