linux/include/linux/gpio/consumer.h
<<
>>
Prefs
   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);
 139struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
 140                                            const char *con_id,
 141                                            struct fwnode_handle *child);
 142#else /* CONFIG_GPIOLIB */
 143
 144static inline int gpiod_count(struct device *dev, const char *con_id)
 145{
 146        return 0;
 147}
 148
 149static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
 150                                                       const char *con_id,
 151                                                       enum gpiod_flags flags)
 152{
 153        return ERR_PTR(-ENOSYS);
 154}
 155static inline struct gpio_desc *__must_check
 156gpiod_get_index(struct device *dev,
 157                const char *con_id,
 158                unsigned int idx,
 159                enum gpiod_flags flags)
 160{
 161        return ERR_PTR(-ENOSYS);
 162}
 163
 164static inline struct gpio_desc *__must_check
 165gpiod_get_optional(struct device *dev, const char *con_id,
 166                   enum gpiod_flags flags)
 167{
 168        return ERR_PTR(-ENOSYS);
 169}
 170
 171static inline struct gpio_desc *__must_check
 172gpiod_get_index_optional(struct device *dev, const char *con_id,
 173                         unsigned int index, enum gpiod_flags flags)
 174{
 175        return ERR_PTR(-ENOSYS);
 176}
 177
 178static inline struct gpio_descs *__must_check
 179gpiod_get_array(struct device *dev, const char *con_id,
 180                enum gpiod_flags flags)
 181{
 182        return ERR_PTR(-ENOSYS);
 183}
 184
 185static inline struct gpio_descs *__must_check
 186gpiod_get_array_optional(struct device *dev, const char *con_id,
 187                         enum gpiod_flags flags)
 188{
 189        return ERR_PTR(-ENOSYS);
 190}
 191
 192static inline void gpiod_put(struct gpio_desc *desc)
 193{
 194        might_sleep();
 195
 196        /* GPIO can never have been requested */
 197        WARN_ON(1);
 198}
 199
 200static inline void gpiod_put_array(struct gpio_descs *descs)
 201{
 202        might_sleep();
 203
 204        /* GPIO can never have been requested */
 205        WARN_ON(1);
 206}
 207
 208static inline struct gpio_desc *__must_check
 209devm_gpiod_get(struct device *dev,
 210                 const char *con_id,
 211                 enum gpiod_flags flags)
 212{
 213        return ERR_PTR(-ENOSYS);
 214}
 215static inline
 216struct gpio_desc *__must_check
 217devm_gpiod_get_index(struct device *dev,
 218                       const char *con_id,
 219                       unsigned int idx,
 220                       enum gpiod_flags flags)
 221{
 222        return ERR_PTR(-ENOSYS);
 223}
 224
 225static inline struct gpio_desc *__must_check
 226devm_gpiod_get_optional(struct device *dev, const char *con_id,
 227                          enum gpiod_flags flags)
 228{
 229        return ERR_PTR(-ENOSYS);
 230}
 231
 232static inline struct gpio_desc *__must_check
 233devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
 234                                unsigned int index, enum gpiod_flags flags)
 235{
 236        return ERR_PTR(-ENOSYS);
 237}
 238
 239static inline struct gpio_descs *__must_check
 240devm_gpiod_get_array(struct device *dev, const char *con_id,
 241                     enum gpiod_flags flags)
 242{
 243        return ERR_PTR(-ENOSYS);
 244}
 245
 246static inline struct gpio_descs *__must_check
 247devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
 248                              enum gpiod_flags flags)
 249{
 250        return ERR_PTR(-ENOSYS);
 251}
 252
 253static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
 254{
 255        might_sleep();
 256
 257        /* GPIO can never have been requested */
 258        WARN_ON(1);
 259}
 260
 261static inline void devm_gpiod_put_array(struct device *dev,
 262                                        struct gpio_descs *descs)
 263{
 264        might_sleep();
 265
 266        /* GPIO can never have been requested */
 267        WARN_ON(1);
 268}
 269
 270
 271static inline int gpiod_get_direction(const struct gpio_desc *desc)
 272{
 273        /* GPIO can never have been requested */
 274        WARN_ON(1);
 275        return -ENOSYS;
 276}
 277static inline int gpiod_direction_input(struct gpio_desc *desc)
 278{
 279        /* GPIO can never have been requested */
 280        WARN_ON(1);
 281        return -ENOSYS;
 282}
 283static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
 284{
 285        /* GPIO can never have been requested */
 286        WARN_ON(1);
 287        return -ENOSYS;
 288}
 289static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
 290{
 291        /* GPIO can never have been requested */
 292        WARN_ON(1);
 293        return -ENOSYS;
 294}
 295
 296
 297static inline int gpiod_get_value(const struct gpio_desc *desc)
 298{
 299        /* GPIO can never have been requested */
 300        WARN_ON(1);
 301        return 0;
 302}
 303static inline void gpiod_set_value(struct gpio_desc *desc, int value)
 304{
 305        /* GPIO can never have been requested */
 306        WARN_ON(1);
 307}
 308static inline void gpiod_set_array_value(unsigned int array_size,
 309                                         struct gpio_desc **desc_array,
 310                                         int *value_array)
 311{
 312        /* GPIO can never have been requested */
 313        WARN_ON(1);
 314}
 315static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
 316{
 317        /* GPIO can never have been requested */
 318        WARN_ON(1);
 319        return 0;
 320}
 321static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
 322{
 323        /* GPIO can never have been requested */
 324        WARN_ON(1);
 325}
 326static inline void gpiod_set_raw_array_value(unsigned int array_size,
 327                                             struct gpio_desc **desc_array,
 328                                             int *value_array)
 329{
 330        /* GPIO can never have been requested */
 331        WARN_ON(1);
 332}
 333
 334static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
 335{
 336        /* GPIO can never have been requested */
 337        WARN_ON(1);
 338        return 0;
 339}
 340static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
 341{
 342        /* GPIO can never have been requested */
 343        WARN_ON(1);
 344}
 345static inline void gpiod_set_array_value_cansleep(unsigned int array_size,
 346                                            struct gpio_desc **desc_array,
 347                                            int *value_array)
 348{
 349        /* GPIO can never have been requested */
 350        WARN_ON(1);
 351}
 352static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
 353{
 354        /* GPIO can never have been requested */
 355        WARN_ON(1);
 356        return 0;
 357}
 358static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
 359                                                int value)
 360{
 361        /* GPIO can never have been requested */
 362        WARN_ON(1);
 363}
 364static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
 365                                                struct gpio_desc **desc_array,
 366                                                int *value_array)
 367{
 368        /* GPIO can never have been requested */
 369        WARN_ON(1);
 370}
 371
 372static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
 373{
 374        /* GPIO can never have been requested */
 375        WARN_ON(1);
 376        return -ENOSYS;
 377}
 378
 379static inline int gpiod_is_active_low(const struct gpio_desc *desc)
 380{
 381        /* GPIO can never have been requested */
 382        WARN_ON(1);
 383        return 0;
 384}
 385static inline int gpiod_cansleep(const struct gpio_desc *desc)
 386{
 387        /* GPIO can never have been requested */
 388        WARN_ON(1);
 389        return 0;
 390}
 391
 392static inline int gpiod_to_irq(const struct gpio_desc *desc)
 393{
 394        /* GPIO can never have been requested */
 395        WARN_ON(1);
 396        return -EINVAL;
 397}
 398
 399static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
 400{
 401        return ERR_PTR(-EINVAL);
 402}
 403
 404static inline int desc_to_gpio(const struct gpio_desc *desc)
 405{
 406        /* GPIO can never have been requested */
 407        WARN_ON(1);
 408        return -EINVAL;
 409}
 410
 411/* Child properties interface */
 412struct fwnode_handle;
 413
 414static inline struct gpio_desc *fwnode_get_named_gpiod(
 415        struct fwnode_handle *fwnode, const char *propname)
 416{
 417        return ERR_PTR(-ENOSYS);
 418}
 419
 420static inline struct gpio_desc *devm_get_gpiod_from_child(
 421        struct device *dev, const char *con_id, struct fwnode_handle *child)
 422{
 423        return ERR_PTR(-ENOSYS);
 424}
 425
 426#endif /* CONFIG_GPIOLIB */
 427
 428#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
 429
 430int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
 431int gpiod_export_link(struct device *dev, const char *name,
 432                      struct gpio_desc *desc);
 433void gpiod_unexport(struct gpio_desc *desc);
 434
 435#else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
 436
 437static inline int gpiod_export(struct gpio_desc *desc,
 438                               bool direction_may_change)
 439{
 440        return -ENOSYS;
 441}
 442
 443static inline int gpiod_export_link(struct device *dev, const char *name,
 444                                    struct gpio_desc *desc)
 445{
 446        return -ENOSYS;
 447}
 448
 449static inline void gpiod_unexport(struct gpio_desc *desc)
 450{
 451}
 452
 453#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
 454
 455#endif
 456