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, 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
 479