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