LCOV - code coverage report
Current view: top level - drivers/gpio - gpiolib.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 431 4.6 %
Date: 2014-04-16 Functions: 5 55 9.1 %
Branches: 8 341 2.3 %

           Branch data     Line data    Source code
       1                 :            : #include <linux/kernel.h>
       2                 :            : #include <linux/module.h>
       3                 :            : #include <linux/interrupt.h>
       4                 :            : #include <linux/irq.h>
       5                 :            : #include <linux/spinlock.h>
       6                 :            : #include <linux/list.h>
       7                 :            : #include <linux/device.h>
       8                 :            : #include <linux/err.h>
       9                 :            : #include <linux/debugfs.h>
      10                 :            : #include <linux/seq_file.h>
      11                 :            : #include <linux/gpio.h>
      12                 :            : #include <linux/of_gpio.h>
      13                 :            : #include <linux/idr.h>
      14                 :            : #include <linux/slab.h>
      15                 :            : #include <linux/acpi.h>
      16                 :            : #include <linux/gpio/driver.h>
      17                 :            : 
      18                 :            : #include "gpiolib.h"
      19                 :            : 
      20                 :            : #define CREATE_TRACE_POINTS
      21                 :            : #include <trace/events/gpio.h>
      22                 :            : 
      23                 :            : /* Implementation infrastructure for GPIO interfaces.
      24                 :            :  *
      25                 :            :  * The GPIO programming interface allows for inlining speed-critical
      26                 :            :  * get/set operations for common cases, so that access to SOC-integrated
      27                 :            :  * GPIOs can sometimes cost only an instruction or two per bit.
      28                 :            :  */
      29                 :            : 
      30                 :            : 
      31                 :            : /* When debugging, extend minimal trust to callers and platform code.
      32                 :            :  * Also emit diagnostic messages that may help initial bringup, when
      33                 :            :  * board setup or driver bugs are most common.
      34                 :            :  *
      35                 :            :  * Otherwise, minimize overhead in what may be bitbanging codepaths.
      36                 :            :  */
      37                 :            : #ifdef  DEBUG
      38                 :            : #define extra_checks    1
      39                 :            : #else
      40                 :            : #define extra_checks    0
      41                 :            : #endif
      42                 :            : 
      43                 :            : /* gpio_lock prevents conflicts during gpio_desc[] table updates.
      44                 :            :  * While any GPIO is requested, its gpio_chip is not removable;
      45                 :            :  * each GPIO's "requested" flag serves as a lock and refcount.
      46                 :            :  */
      47                 :            : static DEFINE_SPINLOCK(gpio_lock);
      48                 :            : 
      49                 :            : struct gpio_desc {
      50                 :            :         struct gpio_chip        *chip;
      51                 :            :         unsigned long           flags;
      52                 :            : /* flag symbols are bit numbers */
      53                 :            : #define FLAG_REQUESTED  0
      54                 :            : #define FLAG_IS_OUT     1
      55                 :            : #define FLAG_EXPORT     2       /* protected by sysfs_lock */
      56                 :            : #define FLAG_SYSFS      3       /* exported via /sys/class/gpio/control */
      57                 :            : #define FLAG_TRIG_FALL  4       /* trigger on falling edge */
      58                 :            : #define FLAG_TRIG_RISE  5       /* trigger on rising edge */
      59                 :            : #define FLAG_ACTIVE_LOW 6       /* value has active low */
      60                 :            : #define FLAG_OPEN_DRAIN 7       /* Gpio is open drain type */
      61                 :            : #define FLAG_OPEN_SOURCE 8      /* Gpio is open source type */
      62                 :            : #define FLAG_USED_AS_IRQ 9      /* GPIO is connected to an IRQ */
      63                 :            : 
      64                 :            : #define ID_SHIFT        16      /* add new flags before this one */
      65                 :            : 
      66                 :            : #define GPIO_FLAGS_MASK         ((1 << ID_SHIFT) - 1)
      67                 :            : #define GPIO_TRIGGER_MASK       (BIT(FLAG_TRIG_FALL) | BIT(FLAG_TRIG_RISE))
      68                 :            : 
      69                 :            : #ifdef CONFIG_DEBUG_FS
      70                 :            :         const char              *label;
      71                 :            : #endif
      72                 :            : };
      73                 :            : static struct gpio_desc gpio_desc[ARCH_NR_GPIOS];
      74                 :            : 
      75                 :            : #define GPIO_OFFSET_VALID(chip, offset) (offset >= 0 && offset < chip->ngpio)
      76                 :            : 
      77                 :            : static DEFINE_MUTEX(gpio_lookup_lock);
      78                 :            : static LIST_HEAD(gpio_lookup_list);
      79                 :            : static LIST_HEAD(gpio_chips);
      80                 :            : 
      81                 :            : #ifdef CONFIG_GPIO_SYSFS
      82                 :            : static DEFINE_IDR(dirent_idr);
      83                 :            : #endif
      84                 :            : 
      85                 :            : static int gpiod_request(struct gpio_desc *desc, const char *label);
      86                 :            : static void gpiod_free(struct gpio_desc *desc);
      87                 :            : 
      88                 :            : /* With descriptor prefix */
      89                 :            : 
      90                 :            : #ifdef CONFIG_DEBUG_FS
      91                 :            : #define gpiod_emerg(desc, fmt, ...)                                            \
      92                 :            :         pr_emerg("gpio-%d (%s): " fmt, desc_to_gpio(desc), desc->label ? : "?",\
      93                 :            :                  ##__VA_ARGS__)
      94                 :            : #define gpiod_crit(desc, fmt, ...)                                             \
      95                 :            :         pr_crit("gpio-%d (%s): " fmt, desc_to_gpio(desc), desc->label ? : "?", \
      96                 :            :                  ##__VA_ARGS__)
      97                 :            : #define gpiod_err(desc, fmt, ...)                                              \
      98                 :            :         pr_err("gpio-%d (%s): " fmt, desc_to_gpio(desc), desc->label ? : "?",  \
      99                 :            :                  ##__VA_ARGS__)
     100                 :            : #define gpiod_warn(desc, fmt, ...)                                             \
     101                 :            :         pr_warn("gpio-%d (%s): " fmt, desc_to_gpio(desc), desc->label ? : "?", \
     102                 :            :                  ##__VA_ARGS__)
     103                 :            : #define gpiod_info(desc, fmt, ...)                                             \
     104                 :            :         pr_info("gpio-%d (%s): " fmt, desc_to_gpio(desc), desc->label ? : "?", \
     105                 :            :                 ##__VA_ARGS__)
     106                 :            : #define gpiod_dbg(desc, fmt, ...)                                              \
     107                 :            :         pr_debug("gpio-%d (%s): " fmt, desc_to_gpio(desc), desc->label ? : "?",\
     108                 :            :                  ##__VA_ARGS__)
     109                 :            : #else
     110                 :            : #define gpiod_emerg(desc, fmt, ...)                                     \
     111                 :            :         pr_emerg("gpio-%d: " fmt, desc_to_gpio(desc), ##__VA_ARGS__)
     112                 :            : #define gpiod_crit(desc, fmt, ...)                                      \
     113                 :            :         pr_crit("gpio-%d: " fmt, desc_to_gpio(desc), ##__VA_ARGS__)
     114                 :            : #define gpiod_err(desc, fmt, ...)                                       \
     115                 :            :         pr_err("gpio-%d: " fmt, desc_to_gpio(desc), ##__VA_ARGS__)
     116                 :            : #define gpiod_warn(desc, fmt, ...)                                      \
     117                 :            :         pr_warn("gpio-%d: " fmt, desc_to_gpio(desc), ##__VA_ARGS__)
     118                 :            : #define gpiod_info(desc, fmt, ...)                                      \
     119                 :            :         pr_info("gpio-%d: " fmt, desc_to_gpio(desc), ##__VA_ARGS__)
     120                 :            : #define gpiod_dbg(desc, fmt, ...)                                       \
     121                 :            :         pr_debug("gpio-%d: " fmt, desc_to_gpio(desc), ##__VA_ARGS__)
     122                 :            : #endif
     123                 :            : 
     124                 :            : /* With chip prefix */
     125                 :            : 
     126                 :            : #define chip_emerg(chip, fmt, ...)                                      \
     127                 :            :         pr_emerg("GPIO chip %s: " fmt, chip->label, ##__VA_ARGS__)
     128                 :            : #define chip_crit(chip, fmt, ...)                                       \
     129                 :            :         pr_crit("GPIO chip %s: " fmt, chip->label, ##__VA_ARGS__)
     130                 :            : #define chip_err(chip, fmt, ...)                                        \
     131                 :            :         pr_err("GPIO chip %s: " fmt, chip->label, ##__VA_ARGS__)
     132                 :            : #define chip_warn(chip, fmt, ...)                                       \
     133                 :            :         pr_warn("GPIO chip %s: " fmt, chip->label, ##__VA_ARGS__)
     134                 :            : #define chip_info(chip, fmt, ...)                                       \
     135                 :            :         pr_info("GPIO chip %s: " fmt, chip->label, ##__VA_ARGS__)
     136                 :            : #define chip_dbg(chip, fmt, ...)                                        \
     137                 :            :         pr_debug("GPIO chip %s: " fmt, chip->label, ##__VA_ARGS__)
     138                 :            : 
     139                 :            : static inline void desc_set_label(struct gpio_desc *d, const char *label)
     140                 :            : {
     141                 :            : #ifdef CONFIG_DEBUG_FS
     142                 :          0 :         d->label = label;
     143                 :            : #endif
     144                 :            : }
     145                 :            : 
     146                 :            : /*
     147                 :            :  * Return the GPIO number of the passed descriptor relative to its chip
     148                 :            :  */
     149                 :            : static int gpio_chip_hwgpio(const struct gpio_desc *desc)
     150                 :            : {
     151                 :   17420512 :         return desc - &desc->chip->desc[0];
     152                 :            : }
     153                 :            : 
     154                 :            : /**
     155                 :            :  * Convert a GPIO number to its descriptor
     156                 :            :  */
     157                 :          0 : struct gpio_desc *gpio_to_desc(unsigned gpio)
     158                 :            : {
     159 [ -  + ][ +  - ]:   17504697 :         if (WARN(!gpio_is_valid(gpio), "invalid GPIO %d\n", gpio))
     160                 :            :                 return NULL;
     161                 :            :         else
     162                 :   17493324 :                 return &gpio_desc[gpio];
     163                 :            : }
     164                 :            : EXPORT_SYMBOL_GPL(gpio_to_desc);
     165                 :            : 
     166                 :            : /**
     167                 :            :  * Convert an offset on a certain chip to a corresponding descriptor
     168                 :            :  */
     169                 :            : static struct gpio_desc *gpiochip_offset_to_desc(struct gpio_chip *chip,
     170                 :            :                                                  unsigned int offset)
     171                 :            : {
     172 [ #  # ][ #  # ]:          0 :         if (offset >= chip->ngpio)
                 [ #  # ]
     173                 :            :                 return ERR_PTR(-EINVAL);
     174                 :            : 
     175                 :          0 :         return &chip->desc[offset];
     176                 :            : }
     177                 :            : 
     178                 :            : /**
     179                 :            :  * Convert a GPIO descriptor to the integer namespace.
     180                 :            :  * This should disappear in the future but is needed since we still
     181                 :            :  * use GPIO numbers for error messages and sysfs nodes
     182                 :            :  */
     183                 :          0 : int desc_to_gpio(const struct gpio_desc *desc)
     184                 :            : {
     185                 :   17298190 :         return desc - &gpio_desc[0];
     186                 :            : }
     187                 :            : EXPORT_SYMBOL_GPL(desc_to_gpio);
     188                 :            : 
     189                 :            : 
     190                 :            : /* Warn when drivers omit gpio_request() calls -- legal but ill-advised
     191                 :            :  * when setting direction, and otherwise illegal.  Until board setup code
     192                 :            :  * and drivers use explicit requests everywhere (which won't happen when
     193                 :            :  * those calls have no teeth) we can't avoid autorequesting.  This nag
     194                 :            :  * message should motivate switching to explicit requests... so should
     195                 :            :  * the weaker cleanup after faults, compared to gpio_request().
     196                 :            :  *
     197                 :            :  * NOTE: the autorequest mechanism is going away; at this point it's
     198                 :            :  * only "legal" in the sense that (old) code using it won't break yet,
     199                 :            :  * but instead only triggers a WARN() stack dump.
     200                 :            :  */
     201                 :          0 : static int gpio_ensure_requested(struct gpio_desc *desc)
     202                 :            : {
     203                 :          0 :         const struct gpio_chip *chip = desc->chip;
     204                 :            :         const int gpio = desc_to_gpio(desc);
     205                 :            : 
     206 [ #  # ][ #  # ]:          0 :         if (WARN(test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0,
     207                 :            :                         "autorequest GPIO-%d\n", gpio)) {
     208         [ #  # ]:          0 :                 if (!try_module_get(chip->owner)) {
     209         [ #  # ]:          0 :                         gpiod_err(desc, "%s: module can't be gotten\n",
     210                 :            :                                         __func__);
     211                 :          0 :                         clear_bit(FLAG_REQUESTED, &desc->flags);
     212                 :            :                         /* lose */
     213                 :          0 :                         return -EIO;
     214                 :            :                 }
     215                 :            :                 desc_set_label(desc, "[auto]");
     216                 :            :                 /* caller must chip->request() w/o spinlock */
     217         [ #  # ]:          0 :                 if (chip->request)
     218                 :            :                         return 1;
     219                 :            :         }
     220                 :            :         return 0;
     221                 :            : }
     222                 :            : 
     223                 :            : /**
     224                 :            :  * gpiod_to_chip - Return the GPIO chip to which a GPIO descriptor belongs
     225                 :            :  * @desc:       descriptor to return the chip of
     226                 :            :  */
     227                 :          0 : struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
     228                 :            : {
     229 [ #  # ][ #  # ]:          0 :         return desc ? desc->chip : NULL;
     230                 :            : }
     231                 :            : EXPORT_SYMBOL_GPL(gpiod_to_chip);
     232                 :            : 
     233                 :            : /* dynamic allocation of GPIOs, e.g. on a hotplugged device */
     234                 :          0 : static int gpiochip_find_base(int ngpio)
     235                 :            : {
     236                 :            :         struct gpio_chip *chip;
     237                 :          0 :         int base = ARCH_NR_GPIOS - ngpio;
     238                 :            : 
     239         [ #  # ]:          0 :         list_for_each_entry_reverse(chip, &gpio_chips, list) {
     240                 :            :                 /* found a free space? */
     241         [ #  # ]:          0 :                 if (chip->base + chip->ngpio <= base)
     242                 :            :                         break;
     243                 :            :                 else
     244                 :            :                         /* nope, check the space right before the chip */
     245                 :          0 :                         base = chip->base - ngpio;
     246                 :            :         }
     247                 :            : 
     248         [ #  # ]:          0 :         if (gpio_is_valid(base)) {
     249                 :            :                 pr_debug("%s: found new base at %d\n", __func__, base);
     250                 :            :                 return base;
     251                 :            :         } else {
     252                 :          0 :                 pr_err("%s: cannot find free range\n", __func__);
     253                 :          0 :                 return -ENOSPC;
     254                 :            :         }
     255                 :            : }
     256                 :            : 
     257                 :            : /**
     258                 :            :  * gpiod_get_direction - return the current direction of a GPIO
     259                 :            :  * @desc:       GPIO to get the direction of
     260                 :            :  *
     261                 :            :  * Return GPIOF_DIR_IN or GPIOF_DIR_OUT, or an error code in case of error.
     262                 :            :  *
     263                 :            :  * This function may sleep if gpiod_cansleep() is true.
     264                 :            :  */
     265                 :          0 : int gpiod_get_direction(const struct gpio_desc *desc)
     266                 :            : {
     267                 :            :         struct gpio_chip        *chip;
     268                 :            :         unsigned                offset;
     269                 :            :         int                     status = -EINVAL;
     270                 :            : 
     271                 :            :         chip = gpiod_to_chip(desc);
     272                 :          0 :         offset = gpio_chip_hwgpio(desc);
     273                 :            : 
     274         [ #  # ]:          0 :         if (!chip->get_direction)
     275                 :            :                 return status;
     276                 :            : 
     277                 :          0 :         status = chip->get_direction(chip, offset);
     278         [ #  # ]:          0 :         if (status > 0) {
     279                 :            :                 /* GPIOF_DIR_IN, or other positive */
     280                 :            :                 status = 1;
     281                 :            :                 /* FLAG_IS_OUT is just a cache of the result of get_direction(),
     282                 :            :                  * so it does not affect constness per se */
     283                 :          0 :                 clear_bit(FLAG_IS_OUT, &((struct gpio_desc *)desc)->flags);
     284                 :            :         }
     285         [ #  # ]:          0 :         if (status == 0) {
     286                 :            :                 /* GPIOF_DIR_OUT */
     287                 :          0 :                 set_bit(FLAG_IS_OUT, &((struct gpio_desc *)desc)->flags);
     288                 :            :         }
     289                 :          0 :         return status;
     290                 :            : }
     291                 :            : EXPORT_SYMBOL_GPL(gpiod_get_direction);
     292                 :            : 
     293                 :            : #ifdef CONFIG_GPIO_SYSFS
     294                 :            : 
     295                 :            : /* lock protects against unexport_gpio() being called while
     296                 :            :  * sysfs files are active.
     297                 :            :  */
     298                 :            : static DEFINE_MUTEX(sysfs_lock);
     299                 :            : 
     300                 :            : /*
     301                 :            :  * /sys/class/gpio/gpioN... only for GPIOs that are exported
     302                 :            :  *   /direction
     303                 :            :  *      * MAY BE OMITTED if kernel won't allow direction changes
     304                 :            :  *      * is read/write as "in" or "out"
     305                 :            :  *      * may also be written as "high" or "low", initializing
     306                 :            :  *        output value as specified ("out" implies "low")
     307                 :            :  *   /value
     308                 :            :  *      * always readable, subject to hardware behavior
     309                 :            :  *      * may be writable, as zero/nonzero
     310                 :            :  *   /edge
     311                 :            :  *      * configures behavior of poll(2) on /value
     312                 :            :  *      * available only if pin can generate IRQs on input
     313                 :            :  *      * is read/write as "none", "falling", "rising", or "both"
     314                 :            :  *   /active_low
     315                 :            :  *      * configures polarity of /value
     316                 :            :  *      * is read/write as zero/nonzero
     317                 :            :  *      * also affects existing and subsequent "falling" and "rising"
     318                 :            :  *        /edge configuration
     319                 :            :  */
     320                 :            : 
     321                 :            : static ssize_t gpio_direction_show(struct device *dev,
     322                 :            :                 struct device_attribute *attr, char *buf)
     323                 :            : {
     324                 :            :         const struct gpio_desc  *desc = dev_get_drvdata(dev);
     325                 :            :         ssize_t                 status;
     326                 :            : 
     327                 :            :         mutex_lock(&sysfs_lock);
     328                 :            : 
     329                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags)) {
     330                 :            :                 status = -EIO;
     331                 :            :         } else {
     332                 :            :                 gpiod_get_direction(desc);
     333                 :            :                 status = sprintf(buf, "%s\n",
     334                 :            :                         test_bit(FLAG_IS_OUT, &desc->flags)
     335                 :            :                                 ? "out" : "in");
     336                 :            :         }
     337                 :            : 
     338                 :            :         mutex_unlock(&sysfs_lock);
     339                 :            :         return status;
     340                 :            : }
     341                 :            : 
     342                 :            : static ssize_t gpio_direction_store(struct device *dev,
     343                 :            :                 struct device_attribute *attr, const char *buf, size_t size)
     344                 :            : {
     345                 :            :         struct gpio_desc        *desc = dev_get_drvdata(dev);
     346                 :            :         ssize_t                 status;
     347                 :            : 
     348                 :            :         mutex_lock(&sysfs_lock);
     349                 :            : 
     350                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags))
     351                 :            :                 status = -EIO;
     352                 :            :         else if (sysfs_streq(buf, "high"))
     353                 :            :                 status = gpiod_direction_output(desc, 1);
     354                 :            :         else if (sysfs_streq(buf, "out") || sysfs_streq(buf, "low"))
     355                 :            :                 status = gpiod_direction_output(desc, 0);
     356                 :            :         else if (sysfs_streq(buf, "in"))
     357                 :            :                 status = gpiod_direction_input(desc);
     358                 :            :         else
     359                 :            :                 status = -EINVAL;
     360                 :            : 
     361                 :            :         mutex_unlock(&sysfs_lock);
     362                 :            :         return status ? : size;
     363                 :            : }
     364                 :            : 
     365                 :            : static /* const */ DEVICE_ATTR(direction, 0644,
     366                 :            :                 gpio_direction_show, gpio_direction_store);
     367                 :            : 
     368                 :            : static ssize_t gpio_value_show(struct device *dev,
     369                 :            :                 struct device_attribute *attr, char *buf)
     370                 :            : {
     371                 :            :         struct gpio_desc        *desc = dev_get_drvdata(dev);
     372                 :            :         ssize_t                 status;
     373                 :            : 
     374                 :            :         mutex_lock(&sysfs_lock);
     375                 :            : 
     376                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags))
     377                 :            :                 status = -EIO;
     378                 :            :         else
     379                 :            :                 status = sprintf(buf, "%d\n", gpiod_get_value_cansleep(desc));
     380                 :            : 
     381                 :            :         mutex_unlock(&sysfs_lock);
     382                 :            :         return status;
     383                 :            : }
     384                 :            : 
     385                 :            : static ssize_t gpio_value_store(struct device *dev,
     386                 :            :                 struct device_attribute *attr, const char *buf, size_t size)
     387                 :            : {
     388                 :            :         struct gpio_desc        *desc = dev_get_drvdata(dev);
     389                 :            :         ssize_t                 status;
     390                 :            : 
     391                 :            :         mutex_lock(&sysfs_lock);
     392                 :            : 
     393                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags))
     394                 :            :                 status = -EIO;
     395                 :            :         else if (!test_bit(FLAG_IS_OUT, &desc->flags))
     396                 :            :                 status = -EPERM;
     397                 :            :         else {
     398                 :            :                 long            value;
     399                 :            : 
     400                 :            :                 status = kstrtol(buf, 0, &value);
     401                 :            :                 if (status == 0) {
     402                 :            :                         gpiod_set_value_cansleep(desc, value);
     403                 :            :                         status = size;
     404                 :            :                 }
     405                 :            :         }
     406                 :            : 
     407                 :            :         mutex_unlock(&sysfs_lock);
     408                 :            :         return status;
     409                 :            : }
     410                 :            : 
     411                 :            : static const DEVICE_ATTR(value, 0644,
     412                 :            :                 gpio_value_show, gpio_value_store);
     413                 :            : 
     414                 :            : static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
     415                 :            : {
     416                 :            :         struct kernfs_node      *value_sd = priv;
     417                 :            : 
     418                 :            :         sysfs_notify_dirent(value_sd);
     419                 :            :         return IRQ_HANDLED;
     420                 :            : }
     421                 :            : 
     422                 :            : static int gpio_setup_irq(struct gpio_desc *desc, struct device *dev,
     423                 :            :                 unsigned long gpio_flags)
     424                 :            : {
     425                 :            :         struct kernfs_node      *value_sd;
     426                 :            :         unsigned long           irq_flags;
     427                 :            :         int                     ret, irq, id;
     428                 :            : 
     429                 :            :         if ((desc->flags & GPIO_TRIGGER_MASK) == gpio_flags)
     430                 :            :                 return 0;
     431                 :            : 
     432                 :            :         irq = gpiod_to_irq(desc);
     433                 :            :         if (irq < 0)
     434                 :            :                 return -EIO;
     435                 :            : 
     436                 :            :         id = desc->flags >> ID_SHIFT;
     437                 :            :         value_sd = idr_find(&dirent_idr, id);
     438                 :            :         if (value_sd)
     439                 :            :                 free_irq(irq, value_sd);
     440                 :            : 
     441                 :            :         desc->flags &= ~GPIO_TRIGGER_MASK;
     442                 :            : 
     443                 :            :         if (!gpio_flags) {
     444                 :            :                 gpiod_unlock_as_irq(desc);
     445                 :            :                 ret = 0;
     446                 :            :                 goto free_id;
     447                 :            :         }
     448                 :            : 
     449                 :            :         irq_flags = IRQF_SHARED;
     450                 :            :         if (test_bit(FLAG_TRIG_FALL, &gpio_flags))
     451                 :            :                 irq_flags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
     452                 :            :                         IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING;
     453                 :            :         if (test_bit(FLAG_TRIG_RISE, &gpio_flags))
     454                 :            :                 irq_flags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
     455                 :            :                         IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;
     456                 :            : 
     457                 :            :         if (!value_sd) {
     458                 :            :                 value_sd = sysfs_get_dirent(dev->kobj.sd, "value");
     459                 :            :                 if (!value_sd) {
     460                 :            :                         ret = -ENODEV;
     461                 :            :                         goto err_out;
     462                 :            :                 }
     463                 :            : 
     464                 :            :                 ret = idr_alloc(&dirent_idr, value_sd, 1, 0, GFP_KERNEL);
     465                 :            :                 if (ret < 0)
     466                 :            :                         goto free_sd;
     467                 :            :                 id = ret;
     468                 :            : 
     469                 :            :                 desc->flags &= GPIO_FLAGS_MASK;
     470                 :            :                 desc->flags |= (unsigned long)id << ID_SHIFT;
     471                 :            : 
     472                 :            :                 if (desc->flags >> ID_SHIFT != id) {
     473                 :            :                         ret = -ERANGE;
     474                 :            :                         goto free_id;
     475                 :            :                 }
     476                 :            :         }
     477                 :            : 
     478                 :            :         ret = request_any_context_irq(irq, gpio_sysfs_irq, irq_flags,
     479                 :            :                                 "gpiolib", value_sd);
     480                 :            :         if (ret < 0)
     481                 :            :                 goto free_id;
     482                 :            : 
     483                 :            :         ret = gpiod_lock_as_irq(desc);
     484                 :            :         if (ret < 0) {
     485                 :            :                 gpiod_warn(desc, "failed to flag the GPIO for IRQ\n");
     486                 :            :                 goto free_id;
     487                 :            :         }
     488                 :            : 
     489                 :            :         desc->flags |= gpio_flags;
     490                 :            :         return 0;
     491                 :            : 
     492                 :            : free_id:
     493                 :            :         idr_remove(&dirent_idr, id);
     494                 :            :         desc->flags &= GPIO_FLAGS_MASK;
     495                 :            : free_sd:
     496                 :            :         if (value_sd)
     497                 :            :                 sysfs_put(value_sd);
     498                 :            : err_out:
     499                 :            :         return ret;
     500                 :            : }
     501                 :            : 
     502                 :            : static const struct {
     503                 :            :         const char *name;
     504                 :            :         unsigned long flags;
     505                 :            : } trigger_types[] = {
     506                 :            :         { "none",    0 },
     507                 :            :         { "falling", BIT(FLAG_TRIG_FALL) },
     508                 :            :         { "rising",  BIT(FLAG_TRIG_RISE) },
     509                 :            :         { "both",    BIT(FLAG_TRIG_FALL) | BIT(FLAG_TRIG_RISE) },
     510                 :            : };
     511                 :            : 
     512                 :            : static ssize_t gpio_edge_show(struct device *dev,
     513                 :            :                 struct device_attribute *attr, char *buf)
     514                 :            : {
     515                 :            :         const struct gpio_desc  *desc = dev_get_drvdata(dev);
     516                 :            :         ssize_t                 status;
     517                 :            : 
     518                 :            :         mutex_lock(&sysfs_lock);
     519                 :            : 
     520                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags))
     521                 :            :                 status = -EIO;
     522                 :            :         else {
     523                 :            :                 int i;
     524                 :            : 
     525                 :            :                 status = 0;
     526                 :            :                 for (i = 0; i < ARRAY_SIZE(trigger_types); i++)
     527                 :            :                         if ((desc->flags & GPIO_TRIGGER_MASK)
     528                 :            :                                         == trigger_types[i].flags) {
     529                 :            :                                 status = sprintf(buf, "%s\n",
     530                 :            :                                                  trigger_types[i].name);
     531                 :            :                                 break;
     532                 :            :                         }
     533                 :            :         }
     534                 :            : 
     535                 :            :         mutex_unlock(&sysfs_lock);
     536                 :            :         return status;
     537                 :            : }
     538                 :            : 
     539                 :            : static ssize_t gpio_edge_store(struct device *dev,
     540                 :            :                 struct device_attribute *attr, const char *buf, size_t size)
     541                 :            : {
     542                 :            :         struct gpio_desc        *desc = dev_get_drvdata(dev);
     543                 :            :         ssize_t                 status;
     544                 :            :         int                     i;
     545                 :            : 
     546                 :            :         for (i = 0; i < ARRAY_SIZE(trigger_types); i++)
     547                 :            :                 if (sysfs_streq(trigger_types[i].name, buf))
     548                 :            :                         goto found;
     549                 :            :         return -EINVAL;
     550                 :            : 
     551                 :            : found:
     552                 :            :         mutex_lock(&sysfs_lock);
     553                 :            : 
     554                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags))
     555                 :            :                 status = -EIO;
     556                 :            :         else {
     557                 :            :                 status = gpio_setup_irq(desc, dev, trigger_types[i].flags);
     558                 :            :                 if (!status)
     559                 :            :                         status = size;
     560                 :            :         }
     561                 :            : 
     562                 :            :         mutex_unlock(&sysfs_lock);
     563                 :            : 
     564                 :            :         return status;
     565                 :            : }
     566                 :            : 
     567                 :            : static DEVICE_ATTR(edge, 0644, gpio_edge_show, gpio_edge_store);
     568                 :            : 
     569                 :            : static int sysfs_set_active_low(struct gpio_desc *desc, struct device *dev,
     570                 :            :                                 int value)
     571                 :            : {
     572                 :            :         int                     status = 0;
     573                 :            : 
     574                 :            :         if (!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) == !!value)
     575                 :            :                 return 0;
     576                 :            : 
     577                 :            :         if (value)
     578                 :            :                 set_bit(FLAG_ACTIVE_LOW, &desc->flags);
     579                 :            :         else
     580                 :            :                 clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
     581                 :            : 
     582                 :            :         /* reconfigure poll(2) support if enabled on one edge only */
     583                 :            :         if (dev != NULL && (!!test_bit(FLAG_TRIG_RISE, &desc->flags) ^
     584                 :            :                                 !!test_bit(FLAG_TRIG_FALL, &desc->flags))) {
     585                 :            :                 unsigned long trigger_flags = desc->flags & GPIO_TRIGGER_MASK;
     586                 :            : 
     587                 :            :                 gpio_setup_irq(desc, dev, 0);
     588                 :            :                 status = gpio_setup_irq(desc, dev, trigger_flags);
     589                 :            :         }
     590                 :            : 
     591                 :            :         return status;
     592                 :            : }
     593                 :            : 
     594                 :            : static ssize_t gpio_active_low_show(struct device *dev,
     595                 :            :                 struct device_attribute *attr, char *buf)
     596                 :            : {
     597                 :            :         const struct gpio_desc  *desc = dev_get_drvdata(dev);
     598                 :            :         ssize_t                 status;
     599                 :            : 
     600                 :            :         mutex_lock(&sysfs_lock);
     601                 :            : 
     602                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags))
     603                 :            :                 status = -EIO;
     604                 :            :         else
     605                 :            :                 status = sprintf(buf, "%d\n",
     606                 :            :                                 !!test_bit(FLAG_ACTIVE_LOW, &desc->flags));
     607                 :            : 
     608                 :            :         mutex_unlock(&sysfs_lock);
     609                 :            : 
     610                 :            :         return status;
     611                 :            : }
     612                 :            : 
     613                 :            : static ssize_t gpio_active_low_store(struct device *dev,
     614                 :            :                 struct device_attribute *attr, const char *buf, size_t size)
     615                 :            : {
     616                 :            :         struct gpio_desc        *desc = dev_get_drvdata(dev);
     617                 :            :         ssize_t                 status;
     618                 :            : 
     619                 :            :         mutex_lock(&sysfs_lock);
     620                 :            : 
     621                 :            :         if (!test_bit(FLAG_EXPORT, &desc->flags)) {
     622                 :            :                 status = -EIO;
     623                 :            :         } else {
     624                 :            :                 long            value;
     625                 :            : 
     626                 :            :                 status = kstrtol(buf, 0, &value);
     627                 :            :                 if (status == 0)
     628                 :            :                         status = sysfs_set_active_low(desc, dev, value != 0);
     629                 :            :         }
     630                 :            : 
     631                 :            :         mutex_unlock(&sysfs_lock);
     632                 :            : 
     633                 :            :         return status ? : size;
     634                 :            : }
     635                 :            : 
     636                 :            : static const DEVICE_ATTR(active_low, 0644,
     637                 :            :                 gpio_active_low_show, gpio_active_low_store);
     638                 :            : 
     639                 :            : static const struct attribute *gpio_attrs[] = {
     640                 :            :         &dev_attr_value.attr,
     641                 :            :         &dev_attr_active_low.attr,
     642                 :            :         NULL,
     643                 :            : };
     644                 :            : 
     645                 :            : static const struct attribute_group gpio_attr_group = {
     646                 :            :         .attrs = (struct attribute **) gpio_attrs,
     647                 :            : };
     648                 :            : 
     649                 :            : /*
     650                 :            :  * /sys/class/gpio/gpiochipN/
     651                 :            :  *   /base ... matching gpio_chip.base (N)
     652                 :            :  *   /label ... matching gpio_chip.label
     653                 :            :  *   /ngpio ... matching gpio_chip.ngpio
     654                 :            :  */
     655                 :            : 
     656                 :            : static ssize_t chip_base_show(struct device *dev,
     657                 :            :                                struct device_attribute *attr, char *buf)
     658                 :            : {
     659                 :            :         const struct gpio_chip  *chip = dev_get_drvdata(dev);
     660                 :            : 
     661                 :            :         return sprintf(buf, "%d\n", chip->base);
     662                 :            : }
     663                 :            : static DEVICE_ATTR(base, 0444, chip_base_show, NULL);
     664                 :            : 
     665                 :            : static ssize_t chip_label_show(struct device *dev,
     666                 :            :                                struct device_attribute *attr, char *buf)
     667                 :            : {
     668                 :            :         const struct gpio_chip  *chip = dev_get_drvdata(dev);
     669                 :            : 
     670                 :            :         return sprintf(buf, "%s\n", chip->label ? : "");
     671                 :            : }
     672                 :            : static DEVICE_ATTR(label, 0444, chip_label_show, NULL);
     673                 :            : 
     674                 :            : static ssize_t chip_ngpio_show(struct device *dev,
     675                 :            :                                struct device_attribute *attr, char *buf)
     676                 :            : {
     677                 :            :         const struct gpio_chip  *chip = dev_get_drvdata(dev);
     678                 :            : 
     679                 :            :         return sprintf(buf, "%u\n", chip->ngpio);
     680                 :            : }
     681                 :            : static DEVICE_ATTR(ngpio, 0444, chip_ngpio_show, NULL);
     682                 :            : 
     683                 :            : static const struct attribute *gpiochip_attrs[] = {
     684                 :            :         &dev_attr_base.attr,
     685                 :            :         &dev_attr_label.attr,
     686                 :            :         &dev_attr_ngpio.attr,
     687                 :            :         NULL,
     688                 :            : };
     689                 :            : 
     690                 :            : static const struct attribute_group gpiochip_attr_group = {
     691                 :            :         .attrs = (struct attribute **) gpiochip_attrs,
     692                 :            : };
     693                 :            : 
     694                 :            : /*
     695                 :            :  * /sys/class/gpio/export ... write-only
     696                 :            :  *      integer N ... number of GPIO to export (full access)
     697                 :            :  * /sys/class/gpio/unexport ... write-only
     698                 :            :  *      integer N ... number of GPIO to unexport
     699                 :            :  */
     700                 :            : static ssize_t export_store(struct class *class,
     701                 :            :                                 struct class_attribute *attr,
     702                 :            :                                 const char *buf, size_t len)
     703                 :            : {
     704                 :            :         long                    gpio;
     705                 :            :         struct gpio_desc        *desc;
     706                 :            :         int                     status;
     707                 :            : 
     708                 :            :         status = kstrtol(buf, 0, &gpio);
     709                 :            :         if (status < 0)
     710                 :            :                 goto done;
     711                 :            : 
     712                 :            :         desc = gpio_to_desc(gpio);
     713                 :            :         /* reject invalid GPIOs */
     714                 :            :         if (!desc) {
     715                 :            :                 pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);
     716                 :            :                 return -EINVAL;
     717                 :            :         }
     718                 :            : 
     719                 :            :         /* No extra locking here; FLAG_SYSFS just signifies that the
     720                 :            :          * request and export were done by on behalf of userspace, so
     721                 :            :          * they may be undone on its behalf too.
     722                 :            :          */
     723                 :            : 
     724                 :            :         status = gpiod_request(desc, "sysfs");
     725                 :            :         if (status < 0) {
     726                 :            :                 if (status == -EPROBE_DEFER)
     727                 :            :                         status = -ENODEV;
     728                 :            :                 goto done;
     729                 :            :         }
     730                 :            :         status = gpiod_export(desc, true);
     731                 :            :         if (status < 0)
     732                 :            :                 gpiod_free(desc);
     733                 :            :         else
     734                 :            :                 set_bit(FLAG_SYSFS, &desc->flags);
     735                 :            : 
     736                 :            : done:
     737                 :            :         if (status)
     738                 :            :                 pr_debug("%s: status %d\n", __func__, status);
     739                 :            :         return status ? : len;
     740                 :            : }
     741                 :            : 
     742                 :            : static ssize_t unexport_store(struct class *class,
     743                 :            :                                 struct class_attribute *attr,
     744                 :            :                                 const char *buf, size_t len)
     745                 :            : {
     746                 :            :         long                    gpio;
     747                 :            :         struct gpio_desc        *desc;
     748                 :            :         int                     status;
     749                 :            : 
     750                 :            :         status = kstrtol(buf, 0, &gpio);
     751                 :            :         if (status < 0)
     752                 :            :                 goto done;
     753                 :            : 
     754                 :            :         desc = gpio_to_desc(gpio);
     755                 :            :         /* reject bogus commands (gpio_unexport ignores them) */
     756                 :            :         if (!desc) {
     757                 :            :                 pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);
     758                 :            :                 return -EINVAL;
     759                 :            :         }
     760                 :            : 
     761                 :            :         status = -EINVAL;
     762                 :            : 
     763                 :            :         /* No extra locking here; FLAG_SYSFS just signifies that the
     764                 :            :          * request and export were done by on behalf of userspace, so
     765                 :            :          * they may be undone on its behalf too.
     766                 :            :          */
     767                 :            :         if (test_and_clear_bit(FLAG_SYSFS, &desc->flags)) {
     768                 :            :                 status = 0;
     769                 :            :                 gpiod_free(desc);
     770                 :            :         }
     771                 :            : done:
     772                 :            :         if (status)
     773                 :            :                 pr_debug("%s: status %d\n", __func__, status);
     774                 :            :         return status ? : len;
     775                 :            : }
     776                 :            : 
     777                 :            : static struct class_attribute gpio_class_attrs[] = {
     778                 :            :         __ATTR(export, 0200, NULL, export_store),
     779                 :            :         __ATTR(unexport, 0200, NULL, unexport_store),
     780                 :            :         __ATTR_NULL,
     781                 :            : };
     782                 :            : 
     783                 :            : static struct class gpio_class = {
     784                 :            :         .name =         "gpio",
     785                 :            :         .owner =        THIS_MODULE,
     786                 :            : 
     787                 :            :         .class_attrs =  gpio_class_attrs,
     788                 :            : };
     789                 :            : 
     790                 :            : 
     791                 :            : /**
     792                 :            :  * gpiod_export - export a GPIO through sysfs
     793                 :            :  * @gpio: gpio to make available, already requested
     794                 :            :  * @direction_may_change: true if userspace may change gpio direction
     795                 :            :  * Context: arch_initcall or later
     796                 :            :  *
     797                 :            :  * When drivers want to make a GPIO accessible to userspace after they
     798                 :            :  * have requested it -- perhaps while debugging, or as part of their
     799                 :            :  * public interface -- they may use this routine.  If the GPIO can
     800                 :            :  * change direction (some can't) and the caller allows it, userspace
     801                 :            :  * will see "direction" sysfs attribute which may be used to change
     802                 :            :  * the gpio's direction.  A "value" attribute will always be provided.
     803                 :            :  *
     804                 :            :  * Returns zero on success, else an error.
     805                 :            :  */
     806                 :            : int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
     807                 :            : {
     808                 :            :         unsigned long           flags;
     809                 :            :         int                     status;
     810                 :            :         const char              *ioname = NULL;
     811                 :            :         struct device           *dev;
     812                 :            :         int                     offset;
     813                 :            : 
     814                 :            :         /* can't export until sysfs is available ... */
     815                 :            :         if (!gpio_class.p) {
     816                 :            :                 pr_debug("%s: called too early!\n", __func__);
     817                 :            :                 return -ENOENT;
     818                 :            :         }
     819                 :            : 
     820                 :            :         if (!desc) {
     821                 :            :                 pr_debug("%s: invalid gpio descriptor\n", __func__);
     822                 :            :                 return -EINVAL;
     823                 :            :         }
     824                 :            : 
     825                 :            :         mutex_lock(&sysfs_lock);
     826                 :            : 
     827                 :            :         spin_lock_irqsave(&gpio_lock, flags);
     828                 :            :         if (!test_bit(FLAG_REQUESTED, &desc->flags) ||
     829                 :            :              test_bit(FLAG_EXPORT, &desc->flags)) {
     830                 :            :                 spin_unlock_irqrestore(&gpio_lock, flags);
     831                 :            :                 gpiod_dbg(desc, "%s: unavailable (requested=%d, exported=%d)\n",
     832                 :            :                                 __func__,
     833                 :            :                                 test_bit(FLAG_REQUESTED, &desc->flags),
     834                 :            :                                 test_bit(FLAG_EXPORT, &desc->flags));
     835                 :            :                 status = -EPERM;
     836                 :            :                 goto fail_unlock;
     837                 :            :         }
     838                 :            : 
     839                 :            :         if (!desc->chip->direction_input || !desc->chip->direction_output)
     840                 :            :                 direction_may_change = false;
     841                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
     842                 :            : 
     843                 :            :         offset = gpio_chip_hwgpio(desc);
     844                 :            :         if (desc->chip->names && desc->chip->names[offset])
     845                 :            :                 ioname = desc->chip->names[offset];
     846                 :            : 
     847                 :            :         dev = device_create(&gpio_class, desc->chip->dev, MKDEV(0, 0),
     848                 :            :                             desc, ioname ? ioname : "gpio%u",
     849                 :            :                             desc_to_gpio(desc));
     850                 :            :         if (IS_ERR(dev)) {
     851                 :            :                 status = PTR_ERR(dev);
     852                 :            :                 goto fail_unlock;
     853                 :            :         }
     854                 :            : 
     855                 :            :         status = sysfs_create_group(&dev->kobj, &gpio_attr_group);
     856                 :            :         if (status)
     857                 :            :                 goto fail_unregister_device;
     858                 :            : 
     859                 :            :         if (direction_may_change) {
     860                 :            :                 status = device_create_file(dev, &dev_attr_direction);
     861                 :            :                 if (status)
     862                 :            :                         goto fail_unregister_device;
     863                 :            :         }
     864                 :            : 
     865                 :            :         if (gpiod_to_irq(desc) >= 0 && (direction_may_change ||
     866                 :            :                                        !test_bit(FLAG_IS_OUT, &desc->flags))) {
     867                 :            :                 status = device_create_file(dev, &dev_attr_edge);
     868                 :            :                 if (status)
     869                 :            :                         goto fail_unregister_device;
     870                 :            :         }
     871                 :            : 
     872                 :            :         set_bit(FLAG_EXPORT, &desc->flags);
     873                 :            :         mutex_unlock(&sysfs_lock);
     874                 :            :         return 0;
     875                 :            : 
     876                 :            : fail_unregister_device:
     877                 :            :         device_unregister(dev);
     878                 :            : fail_unlock:
     879                 :            :         mutex_unlock(&sysfs_lock);
     880                 :            :         gpiod_dbg(desc, "%s: status %d\n", __func__, status);
     881                 :            :         return status;
     882                 :            : }
     883                 :            : EXPORT_SYMBOL_GPL(gpiod_export);
     884                 :            : 
     885                 :            : static int match_export(struct device *dev, const void *data)
     886                 :            : {
     887                 :            :         return dev_get_drvdata(dev) == data;
     888                 :            : }
     889                 :            : 
     890                 :            : /**
     891                 :            :  * gpiod_export_link - create a sysfs link to an exported GPIO node
     892                 :            :  * @dev: device under which to create symlink
     893                 :            :  * @name: name of the symlink
     894                 :            :  * @gpio: gpio to create symlink to, already exported
     895                 :            :  *
     896                 :            :  * Set up a symlink from /sys/.../dev/name to /sys/class/gpio/gpioN
     897                 :            :  * node. Caller is responsible for unlinking.
     898                 :            :  *
     899                 :            :  * Returns zero on success, else an error.
     900                 :            :  */
     901                 :            : int gpiod_export_link(struct device *dev, const char *name,
     902                 :            :                       struct gpio_desc *desc)
     903                 :            : {
     904                 :            :         int                     status = -EINVAL;
     905                 :            : 
     906                 :            :         if (!desc) {
     907                 :            :                 pr_warn("%s: invalid GPIO\n", __func__);
     908                 :            :                 return -EINVAL;
     909                 :            :         }
     910                 :            : 
     911                 :            :         mutex_lock(&sysfs_lock);
     912                 :            : 
     913                 :            :         if (test_bit(FLAG_EXPORT, &desc->flags)) {
     914                 :            :                 struct device *tdev;
     915                 :            : 
     916                 :            :                 tdev = class_find_device(&gpio_class, NULL, desc, match_export);
     917                 :            :                 if (tdev != NULL) {
     918                 :            :                         status = sysfs_create_link(&dev->kobj, &tdev->kobj,
     919                 :            :                                                 name);
     920                 :            :                 } else {
     921                 :            :                         status = -ENODEV;
     922                 :            :                 }
     923                 :            :         }
     924                 :            : 
     925                 :            :         mutex_unlock(&sysfs_lock);
     926                 :            : 
     927                 :            :         if (status)
     928                 :            :                 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
     929                 :            : 
     930                 :            :         return status;
     931                 :            : }
     932                 :            : EXPORT_SYMBOL_GPL(gpiod_export_link);
     933                 :            : 
     934                 :            : /**
     935                 :            :  * gpiod_sysfs_set_active_low - set the polarity of gpio sysfs value
     936                 :            :  * @gpio: gpio to change
     937                 :            :  * @value: non-zero to use active low, i.e. inverted values
     938                 :            :  *
     939                 :            :  * Set the polarity of /sys/class/gpio/gpioN/value sysfs attribute.
     940                 :            :  * The GPIO does not have to be exported yet.  If poll(2) support has
     941                 :            :  * been enabled for either rising or falling edge, it will be
     942                 :            :  * reconfigured to follow the new polarity.
     943                 :            :  *
     944                 :            :  * Returns zero on success, else an error.
     945                 :            :  */
     946                 :            : int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
     947                 :            : {
     948                 :            :         struct device           *dev = NULL;
     949                 :            :         int                     status = -EINVAL;
     950                 :            : 
     951                 :            :         if (!desc) {
     952                 :            :                 pr_warn("%s: invalid GPIO\n", __func__);
     953                 :            :                 return -EINVAL;
     954                 :            :         }
     955                 :            : 
     956                 :            :         mutex_lock(&sysfs_lock);
     957                 :            : 
     958                 :            :         if (test_bit(FLAG_EXPORT, &desc->flags)) {
     959                 :            :                 dev = class_find_device(&gpio_class, NULL, desc, match_export);
     960                 :            :                 if (dev == NULL) {
     961                 :            :                         status = -ENODEV;
     962                 :            :                         goto unlock;
     963                 :            :                 }
     964                 :            :         }
     965                 :            : 
     966                 :            :         status = sysfs_set_active_low(desc, dev, value);
     967                 :            : 
     968                 :            : unlock:
     969                 :            :         mutex_unlock(&sysfs_lock);
     970                 :            : 
     971                 :            :         if (status)
     972                 :            :                 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
     973                 :            : 
     974                 :            :         return status;
     975                 :            : }
     976                 :            : EXPORT_SYMBOL_GPL(gpiod_sysfs_set_active_low);
     977                 :            : 
     978                 :            : /**
     979                 :            :  * gpiod_unexport - reverse effect of gpio_export()
     980                 :            :  * @gpio: gpio to make unavailable
     981                 :            :  *
     982                 :            :  * This is implicit on gpio_free().
     983                 :            :  */
     984                 :            : void gpiod_unexport(struct gpio_desc *desc)
     985                 :            : {
     986                 :            :         int                     status = 0;
     987                 :            :         struct device           *dev = NULL;
     988                 :            : 
     989                 :            :         if (!desc) {
     990                 :            :                 pr_warn("%s: invalid GPIO\n", __func__);
     991                 :            :                 return;
     992                 :            :         }
     993                 :            : 
     994                 :            :         mutex_lock(&sysfs_lock);
     995                 :            : 
     996                 :            :         if (test_bit(FLAG_EXPORT, &desc->flags)) {
     997                 :            : 
     998                 :            :                 dev = class_find_device(&gpio_class, NULL, desc, match_export);
     999                 :            :                 if (dev) {
    1000                 :            :                         gpio_setup_irq(desc, dev, 0);
    1001                 :            :                         clear_bit(FLAG_EXPORT, &desc->flags);
    1002                 :            :                 } else
    1003                 :            :                         status = -ENODEV;
    1004                 :            :         }
    1005                 :            : 
    1006                 :            :         mutex_unlock(&sysfs_lock);
    1007                 :            : 
    1008                 :            :         if (dev) {
    1009                 :            :                 device_unregister(dev);
    1010                 :            :                 put_device(dev);
    1011                 :            :         }
    1012                 :            : 
    1013                 :            :         if (status)
    1014                 :            :                 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
    1015                 :            : }
    1016                 :            : EXPORT_SYMBOL_GPL(gpiod_unexport);
    1017                 :            : 
    1018                 :            : static int gpiochip_export(struct gpio_chip *chip)
    1019                 :            : {
    1020                 :            :         int             status;
    1021                 :            :         struct device   *dev;
    1022                 :            : 
    1023                 :            :         /* Many systems register gpio chips for SOC support very early,
    1024                 :            :          * before driver model support is available.  In those cases we
    1025                 :            :          * export this later, in gpiolib_sysfs_init() ... here we just
    1026                 :            :          * verify that _some_ field of gpio_class got initialized.
    1027                 :            :          */
    1028                 :            :         if (!gpio_class.p)
    1029                 :            :                 return 0;
    1030                 :            : 
    1031                 :            :         /* use chip->base for the ID; it's already known to be unique */
    1032                 :            :         mutex_lock(&sysfs_lock);
    1033                 :            :         dev = device_create(&gpio_class, chip->dev, MKDEV(0, 0), chip,
    1034                 :            :                                 "gpiochip%d", chip->base);
    1035                 :            :         if (!IS_ERR(dev)) {
    1036                 :            :                 status = sysfs_create_group(&dev->kobj,
    1037                 :            :                                 &gpiochip_attr_group);
    1038                 :            :         } else
    1039                 :            :                 status = PTR_ERR(dev);
    1040                 :            :         chip->exported = (status == 0);
    1041                 :            :         mutex_unlock(&sysfs_lock);
    1042                 :            : 
    1043                 :            :         if (status) {
    1044                 :            :                 unsigned long   flags;
    1045                 :            :                 unsigned        gpio;
    1046                 :            : 
    1047                 :            :                 spin_lock_irqsave(&gpio_lock, flags);
    1048                 :            :                 gpio = 0;
    1049                 :            :                 while (gpio < chip->ngpio)
    1050                 :            :                         chip->desc[gpio++].chip = NULL;
    1051                 :            :                 spin_unlock_irqrestore(&gpio_lock, flags);
    1052                 :            : 
    1053                 :            :                 chip_dbg(chip, "%s: status %d\n", __func__, status);
    1054                 :            :         }
    1055                 :            : 
    1056                 :            :         return status;
    1057                 :            : }
    1058                 :            : 
    1059                 :            : static void gpiochip_unexport(struct gpio_chip *chip)
    1060                 :            : {
    1061                 :            :         int                     status;
    1062                 :            :         struct device           *dev;
    1063                 :            : 
    1064                 :            :         mutex_lock(&sysfs_lock);
    1065                 :            :         dev = class_find_device(&gpio_class, NULL, chip, match_export);
    1066                 :            :         if (dev) {
    1067                 :            :                 put_device(dev);
    1068                 :            :                 device_unregister(dev);
    1069                 :            :                 chip->exported = false;
    1070                 :            :                 status = 0;
    1071                 :            :         } else
    1072                 :            :                 status = -ENODEV;
    1073                 :            :         mutex_unlock(&sysfs_lock);
    1074                 :            : 
    1075                 :            :         if (status)
    1076                 :            :                 chip_dbg(chip, "%s: status %d\n", __func__, status);
    1077                 :            : }
    1078                 :            : 
    1079                 :            : static int __init gpiolib_sysfs_init(void)
    1080                 :            : {
    1081                 :            :         int             status;
    1082                 :            :         unsigned long   flags;
    1083                 :            :         struct gpio_chip *chip;
    1084                 :            : 
    1085                 :            :         status = class_register(&gpio_class);
    1086                 :            :         if (status < 0)
    1087                 :            :                 return status;
    1088                 :            : 
    1089                 :            :         /* Scan and register the gpio_chips which registered very
    1090                 :            :          * early (e.g. before the class_register above was called).
    1091                 :            :          *
    1092                 :            :          * We run before arch_initcall() so chip->dev nodes can have
    1093                 :            :          * registered, and so arch_initcall() can always gpio_export().
    1094                 :            :          */
    1095                 :            :         spin_lock_irqsave(&gpio_lock, flags);
    1096                 :            :         list_for_each_entry(chip, &gpio_chips, list) {
    1097                 :            :                 if (!chip || chip->exported)
    1098                 :            :                         continue;
    1099                 :            : 
    1100                 :            :                 spin_unlock_irqrestore(&gpio_lock, flags);
    1101                 :            :                 status = gpiochip_export(chip);
    1102                 :            :                 spin_lock_irqsave(&gpio_lock, flags);
    1103                 :            :         }
    1104                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1105                 :            : 
    1106                 :            : 
    1107                 :            :         return status;
    1108                 :            : }
    1109                 :            : postcore_initcall(gpiolib_sysfs_init);
    1110                 :            : 
    1111                 :            : #else
    1112                 :            : static inline int gpiochip_export(struct gpio_chip *chip)
    1113                 :            : {
    1114                 :            :         return 0;
    1115                 :            : }
    1116                 :            : 
    1117                 :            : static inline void gpiochip_unexport(struct gpio_chip *chip)
    1118                 :            : {
    1119                 :            : }
    1120                 :            : 
    1121                 :            : #endif /* CONFIG_GPIO_SYSFS */
    1122                 :            : 
    1123                 :            : /*
    1124                 :            :  * Add a new chip to the global chips list, keeping the list of chips sorted
    1125                 :            :  * by base order.
    1126                 :            :  *
    1127                 :            :  * Return -EBUSY if the new chip overlaps with some other chip's integer
    1128                 :            :  * space.
    1129                 :            :  */
    1130                 :          0 : static int gpiochip_add_to_list(struct gpio_chip *chip)
    1131                 :            : {
    1132                 :            :         struct list_head *pos = &gpio_chips;
    1133                 :            :         struct gpio_chip *_chip;
    1134                 :            :         int err = 0;
    1135                 :            : 
    1136                 :            :         /* find where to insert our chip */
    1137         [ #  # ]:          0 :         list_for_each(pos, &gpio_chips) {
    1138                 :            :                 _chip = list_entry(pos, struct gpio_chip, list);
    1139                 :            :                 /* shall we insert before _chip? */
    1140         [ #  # ]:          0 :                 if (_chip->base >= chip->base + chip->ngpio)
    1141                 :            :                         break;
    1142                 :            :         }
    1143                 :            : 
    1144                 :            :         /* are we stepping on the chip right before? */
    1145 [ #  # ][ #  # ]:          0 :         if (pos != &gpio_chips && pos->prev != &gpio_chips) {
    1146                 :            :                 _chip = list_entry(pos->prev, struct gpio_chip, list);
    1147         [ #  # ]:          0 :                 if (_chip->base + _chip->ngpio > chip->base) {
    1148                 :          0 :                         dev_err(chip->dev,
    1149                 :            :                                "GPIO integer space overlap, cannot add chip\n");
    1150                 :            :                         err = -EBUSY;
    1151                 :            :                 }
    1152                 :            :         }
    1153                 :            : 
    1154         [ #  # ]:          0 :         if (!err)
    1155                 :          0 :                 list_add_tail(&chip->list, pos);
    1156                 :            : 
    1157                 :          0 :         return err;
    1158                 :            : }
    1159                 :            : 
    1160                 :            : /**
    1161                 :            :  * gpiochip_add() - register a gpio_chip
    1162                 :            :  * @chip: the chip to register, with chip->base initialized
    1163                 :            :  * Context: potentially before irqs or kmalloc will work
    1164                 :            :  *
    1165                 :            :  * Returns a negative errno if the chip can't be registered, such as
    1166                 :            :  * because the chip->base is invalid or already associated with a
    1167                 :            :  * different chip.  Otherwise it returns zero as a success code.
    1168                 :            :  *
    1169                 :            :  * When gpiochip_add() is called very early during boot, so that GPIOs
    1170                 :            :  * can be freely used, the chip->dev device must be registered before
    1171                 :            :  * the gpio framework's arch_initcall().  Otherwise sysfs initialization
    1172                 :            :  * for GPIOs will fail rudely.
    1173                 :            :  *
    1174                 :            :  * If chip->base is negative, this requests dynamic assignment of
    1175                 :            :  * a range of valid GPIOs.
    1176                 :            :  */
    1177                 :          0 : int gpiochip_add(struct gpio_chip *chip)
    1178                 :            : {
    1179                 :            :         unsigned long   flags;
    1180                 :            :         int             status = 0;
    1181                 :            :         unsigned        id;
    1182                 :          0 :         int             base = chip->base;
    1183                 :            : 
    1184 [ #  # ][ #  # ]:          0 :         if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio - 1))
    1185         [ #  # ]:          0 :                         && base >= 0) {
    1186                 :            :                 status = -EINVAL;
    1187                 :            :                 goto fail;
    1188                 :            :         }
    1189                 :            : 
    1190                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1191                 :            : 
    1192         [ #  # ]:          0 :         if (base < 0) {
    1193                 :          0 :                 base = gpiochip_find_base(chip->ngpio);
    1194         [ #  # ]:          0 :                 if (base < 0) {
    1195                 :            :                         status = base;
    1196                 :            :                         goto unlock;
    1197                 :            :                 }
    1198                 :          0 :                 chip->base = base;
    1199                 :            :         }
    1200                 :            : 
    1201                 :          0 :         status = gpiochip_add_to_list(chip);
    1202                 :            : 
    1203         [ #  # ]:          0 :         if (status == 0) {
    1204                 :          0 :                 chip->desc = &gpio_desc[chip->base];
    1205                 :            : 
    1206         [ #  # ]:          0 :                 for (id = 0; id < chip->ngpio; id++) {
    1207                 :          0 :                         struct gpio_desc *desc = &chip->desc[id];
    1208                 :          0 :                         desc->chip = chip;
    1209                 :            : 
    1210                 :            :                         /* REVISIT:  most hardware initializes GPIOs as
    1211                 :            :                          * inputs (often with pullups enabled) so power
    1212                 :            :                          * usage is minimized.  Linux code should set the
    1213                 :            :                          * gpio direction first thing; but until it does,
    1214                 :            :                          * and in case chip->get_direction is not set,
    1215                 :            :                          * we may expose the wrong direction in sysfs.
    1216                 :            :                          */
    1217         [ #  # ]:          0 :                         desc->flags = !chip->direction_input
    1218                 :            :                                 ? (1 << FLAG_IS_OUT)
    1219                 :            :                                 : 0;
    1220                 :            :                 }
    1221                 :            :         }
    1222                 :            : 
    1223                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1224                 :            : 
    1225                 :            : #ifdef CONFIG_PINCTRL
    1226                 :            :         INIT_LIST_HEAD(&chip->pin_ranges);
    1227                 :            : #endif
    1228                 :            : 
    1229                 :          0 :         of_gpiochip_add(chip);
    1230                 :            :         acpi_gpiochip_add(chip);
    1231                 :            : 
    1232         [ #  # ]:          0 :         if (status)
    1233                 :            :                 goto fail;
    1234                 :            : 
    1235                 :            :         status = gpiochip_export(chip);
    1236                 :            :         if (status)
    1237                 :            :                 goto fail;
    1238                 :            : 
    1239                 :          0 :         pr_debug("%s: registered GPIOs %d to %d on device: %s\n", __func__,
    1240                 :            :                 chip->base, chip->base + chip->ngpio - 1,
    1241                 :            :                 chip->label ? : "generic");
    1242                 :            : 
    1243                 :            :         return 0;
    1244                 :            : 
    1245                 :            : unlock:
    1246                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1247                 :            : fail:
    1248                 :            :         /* failures here can mean systems won't boot... */
    1249         [ #  # ]:          0 :         pr_err("%s: GPIOs %d..%d (%s) failed to register\n", __func__,
    1250                 :            :                 chip->base, chip->base + chip->ngpio - 1,
    1251                 :            :                 chip->label ? : "generic");
    1252                 :          0 :         return status;
    1253                 :            : }
    1254                 :            : EXPORT_SYMBOL_GPL(gpiochip_add);
    1255                 :            : 
    1256                 :            : /**
    1257                 :            :  * gpiochip_remove() - unregister a gpio_chip
    1258                 :            :  * @chip: the chip to unregister
    1259                 :            :  *
    1260                 :            :  * A gpio_chip with any GPIOs still requested may not be removed.
    1261                 :            :  */
    1262                 :          0 : int gpiochip_remove(struct gpio_chip *chip)
    1263                 :            : {
    1264                 :            :         unsigned long   flags;
    1265                 :            :         int             status = 0;
    1266                 :            :         unsigned        id;
    1267                 :            : 
    1268                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1269                 :            : 
    1270                 :            :         gpiochip_remove_pin_ranges(chip);
    1271                 :          0 :         of_gpiochip_remove(chip);
    1272                 :            :         acpi_gpiochip_remove(chip);
    1273                 :            : 
    1274         [ #  # ]:          0 :         for (id = 0; id < chip->ngpio; id++) {
    1275         [ #  # ]:          0 :                 if (test_bit(FLAG_REQUESTED, &chip->desc[id].flags)) {
    1276                 :            :                         status = -EBUSY;
    1277                 :            :                         break;
    1278                 :            :                 }
    1279                 :            :         }
    1280         [ #  # ]:          0 :         if (status == 0) {
    1281         [ #  # ]:          0 :                 for (id = 0; id < chip->ngpio; id++)
    1282                 :          0 :                         chip->desc[id].chip = NULL;
    1283                 :            : 
    1284                 :            :                 list_del(&chip->list);
    1285                 :            :         }
    1286                 :            : 
    1287                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1288                 :            : 
    1289                 :            :         if (status == 0)
    1290                 :            :                 gpiochip_unexport(chip);
    1291                 :            : 
    1292                 :          0 :         return status;
    1293                 :            : }
    1294                 :            : EXPORT_SYMBOL_GPL(gpiochip_remove);
    1295                 :            : 
    1296                 :            : /**
    1297                 :            :  * gpiochip_find() - iterator for locating a specific gpio_chip
    1298                 :            :  * @data: data to pass to match function
    1299                 :            :  * @callback: Callback function to check gpio_chip
    1300                 :            :  *
    1301                 :            :  * Similar to bus_find_device.  It returns a reference to a gpio_chip as
    1302                 :            :  * determined by a user supplied @match callback.  The callback should return
    1303                 :            :  * 0 if the device doesn't match and non-zero if it does.  If the callback is
    1304                 :            :  * non-zero, this function will return to the caller and not iterate over any
    1305                 :            :  * more gpio_chips.
    1306                 :            :  */
    1307                 :          0 : struct gpio_chip *gpiochip_find(void *data,
    1308                 :            :                                 int (*match)(struct gpio_chip *chip,
    1309                 :            :                                              void *data))
    1310                 :            : {
    1311                 :            :         struct gpio_chip *chip;
    1312                 :            :         unsigned long flags;
    1313                 :            : 
    1314                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1315         [ #  # ]:          0 :         list_for_each_entry(chip, &gpio_chips, list)
    1316         [ #  # ]:          0 :                 if (match(chip, data))
    1317                 :            :                         break;
    1318                 :            : 
    1319                 :            :         /* No match? */
    1320         [ #  # ]:          0 :         if (&chip->list == &gpio_chips)
    1321                 :            :                 chip = NULL;
    1322                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1323                 :            : 
    1324                 :          0 :         return chip;
    1325                 :            : }
    1326                 :            : EXPORT_SYMBOL_GPL(gpiochip_find);
    1327                 :            : 
    1328                 :          0 : static int gpiochip_match_name(struct gpio_chip *chip, void *data)
    1329                 :            : {
    1330                 :            :         const char *name = data;
    1331                 :            : 
    1332                 :          0 :         return !strcmp(chip->label, name);
    1333                 :            : }
    1334                 :            : 
    1335                 :            : static struct gpio_chip *find_chip_by_name(const char *name)
    1336                 :            : {
    1337                 :          0 :         return gpiochip_find((void *)name, gpiochip_match_name);
    1338                 :            : }
    1339                 :            : 
    1340                 :            : #ifdef CONFIG_PINCTRL
    1341                 :            : 
    1342                 :            : /**
    1343                 :            :  * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
    1344                 :            :  * @chip: the gpiochip to add the range for
    1345                 :            :  * @pinctrl: the dev_name() of the pin controller to map to
    1346                 :            :  * @gpio_offset: the start offset in the current gpio_chip number space
    1347                 :            :  * @pin_group: name of the pin group inside the pin controller
    1348                 :            :  */
    1349                 :            : int gpiochip_add_pingroup_range(struct gpio_chip *chip,
    1350                 :            :                         struct pinctrl_dev *pctldev,
    1351                 :            :                         unsigned int gpio_offset, const char *pin_group)
    1352                 :            : {
    1353                 :            :         struct gpio_pin_range *pin_range;
    1354                 :            :         int ret;
    1355                 :            : 
    1356                 :            :         pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
    1357                 :            :         if (!pin_range) {
    1358                 :            :                 chip_err(chip, "failed to allocate pin ranges\n");
    1359                 :            :                 return -ENOMEM;
    1360                 :            :         }
    1361                 :            : 
    1362                 :            :         /* Use local offset as range ID */
    1363                 :            :         pin_range->range.id = gpio_offset;
    1364                 :            :         pin_range->range.gc = chip;
    1365                 :            :         pin_range->range.name = chip->label;
    1366                 :            :         pin_range->range.base = chip->base + gpio_offset;
    1367                 :            :         pin_range->pctldev = pctldev;
    1368                 :            : 
    1369                 :            :         ret = pinctrl_get_group_pins(pctldev, pin_group,
    1370                 :            :                                         &pin_range->range.pins,
    1371                 :            :                                         &pin_range->range.npins);
    1372                 :            :         if (ret < 0) {
    1373                 :            :                 kfree(pin_range);
    1374                 :            :                 return ret;
    1375                 :            :         }
    1376                 :            : 
    1377                 :            :         pinctrl_add_gpio_range(pctldev, &pin_range->range);
    1378                 :            : 
    1379                 :            :         chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n",
    1380                 :            :                  gpio_offset, gpio_offset + pin_range->range.npins - 1,
    1381                 :            :                  pinctrl_dev_get_devname(pctldev), pin_group);
    1382                 :            : 
    1383                 :            :         list_add_tail(&pin_range->node, &chip->pin_ranges);
    1384                 :            : 
    1385                 :            :         return 0;
    1386                 :            : }
    1387                 :            : EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);
    1388                 :            : 
    1389                 :            : /**
    1390                 :            :  * gpiochip_add_pin_range() - add a range for GPIO <-> pin mapping
    1391                 :            :  * @chip: the gpiochip to add the range for
    1392                 :            :  * @pinctrl_name: the dev_name() of the pin controller to map to
    1393                 :            :  * @gpio_offset: the start offset in the current gpio_chip number space
    1394                 :            :  * @pin_offset: the start offset in the pin controller number space
    1395                 :            :  * @npins: the number of pins from the offset of each pin space (GPIO and
    1396                 :            :  *      pin controller) to accumulate in this range
    1397                 :            :  */
    1398                 :            : int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
    1399                 :            :                            unsigned int gpio_offset, unsigned int pin_offset,
    1400                 :            :                            unsigned int npins)
    1401                 :            : {
    1402                 :            :         struct gpio_pin_range *pin_range;
    1403                 :            :         int ret;
    1404                 :            : 
    1405                 :            :         pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
    1406                 :            :         if (!pin_range) {
    1407                 :            :                 chip_err(chip, "failed to allocate pin ranges\n");
    1408                 :            :                 return -ENOMEM;
    1409                 :            :         }
    1410                 :            : 
    1411                 :            :         /* Use local offset as range ID */
    1412                 :            :         pin_range->range.id = gpio_offset;
    1413                 :            :         pin_range->range.gc = chip;
    1414                 :            :         pin_range->range.name = chip->label;
    1415                 :            :         pin_range->range.base = chip->base + gpio_offset;
    1416                 :            :         pin_range->range.pin_base = pin_offset;
    1417                 :            :         pin_range->range.npins = npins;
    1418                 :            :         pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
    1419                 :            :                         &pin_range->range);
    1420                 :            :         if (IS_ERR(pin_range->pctldev)) {
    1421                 :            :                 ret = PTR_ERR(pin_range->pctldev);
    1422                 :            :                 chip_err(chip, "could not create pin range\n");
    1423                 :            :                 kfree(pin_range);
    1424                 :            :                 return ret;
    1425                 :            :         }
    1426                 :            :         chip_dbg(chip, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
    1427                 :            :                  gpio_offset, gpio_offset + npins - 1,
    1428                 :            :                  pinctl_name,
    1429                 :            :                  pin_offset, pin_offset + npins - 1);
    1430                 :            : 
    1431                 :            :         list_add_tail(&pin_range->node, &chip->pin_ranges);
    1432                 :            : 
    1433                 :            :         return 0;
    1434                 :            : }
    1435                 :            : EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
    1436                 :            : 
    1437                 :            : /**
    1438                 :            :  * gpiochip_remove_pin_ranges() - remove all the GPIO <-> pin mappings
    1439                 :            :  * @chip: the chip to remove all the mappings for
    1440                 :            :  */
    1441                 :            : void gpiochip_remove_pin_ranges(struct gpio_chip *chip)
    1442                 :            : {
    1443                 :            :         struct gpio_pin_range *pin_range, *tmp;
    1444                 :            : 
    1445                 :            :         list_for_each_entry_safe(pin_range, tmp, &chip->pin_ranges, node) {
    1446                 :            :                 list_del(&pin_range->node);
    1447                 :            :                 pinctrl_remove_gpio_range(pin_range->pctldev,
    1448                 :            :                                 &pin_range->range);
    1449                 :            :                 kfree(pin_range);
    1450                 :            :         }
    1451                 :            : }
    1452                 :            : EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);
    1453                 :            : 
    1454                 :            : #endif /* CONFIG_PINCTRL */
    1455                 :            : 
    1456                 :            : /* These "optional" allocation calls help prevent drivers from stomping
    1457                 :            :  * on each other, and help provide better diagnostics in debugfs.
    1458                 :            :  * They're called even less than the "set direction" calls.
    1459                 :            :  */
    1460                 :          0 : static int gpiod_request(struct gpio_desc *desc, const char *label)
    1461                 :            : {
    1462                 :            :         struct gpio_chip        *chip;
    1463                 :            :         int                     status = -EPROBE_DEFER;
    1464                 :            :         unsigned long           flags;
    1465                 :            : 
    1466         [ #  # ]:          0 :         if (!desc) {
    1467                 :          0 :                 pr_warn("%s: invalid GPIO\n", __func__);
    1468                 :          0 :                 return -EINVAL;
    1469                 :            :         }
    1470                 :            : 
    1471                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1472                 :            : 
    1473                 :          0 :         chip = desc->chip;
    1474         [ #  # ]:          0 :         if (chip == NULL)
    1475                 :            :                 goto done;
    1476                 :            : 
    1477         [ #  # ]:          0 :         if (!try_module_get(chip->owner))
    1478                 :            :                 goto done;
    1479                 :            : 
    1480                 :            :         /* NOTE:  gpio_request() can be called in early boot,
    1481                 :            :          * before IRQs are enabled, for non-sleeping (SOC) GPIOs.
    1482                 :            :          */
    1483                 :            : 
    1484         [ #  # ]:          0 :         if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
    1485         [ #  # ]:          0 :                 desc_set_label(desc, label ? : "?");
    1486                 :            :                 status = 0;
    1487                 :            :         } else {
    1488                 :            :                 status = -EBUSY;
    1489                 :          0 :                 module_put(chip->owner);
    1490                 :          0 :                 goto done;
    1491                 :            :         }
    1492                 :            : 
    1493         [ #  # ]:          0 :         if (chip->request) {
    1494                 :            :                 /* chip->request may sleep */
    1495                 :            :                 spin_unlock_irqrestore(&gpio_lock, flags);
    1496                 :          0 :                 status = chip->request(chip, gpio_chip_hwgpio(desc));
    1497                 :          0 :                 spin_lock_irqsave(&gpio_lock, flags);
    1498                 :            : 
    1499         [ #  # ]:          0 :                 if (status < 0) {
    1500                 :            :                         desc_set_label(desc, NULL);
    1501                 :          0 :                         module_put(chip->owner);
    1502                 :          0 :                         clear_bit(FLAG_REQUESTED, &desc->flags);
    1503                 :          0 :                         goto done;
    1504                 :            :                 }
    1505                 :            :         }
    1506         [ #  # ]:          0 :         if (chip->get_direction) {
    1507                 :            :                 /* chip->get_direction may sleep */
    1508                 :            :                 spin_unlock_irqrestore(&gpio_lock, flags);
    1509                 :          0 :                 gpiod_get_direction(desc);
    1510                 :          0 :                 spin_lock_irqsave(&gpio_lock, flags);
    1511                 :            :         }
    1512                 :            : done:
    1513                 :            :         if (status)
    1514                 :            :                 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
    1515                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1516                 :          0 :         return status;
    1517                 :            : }
    1518                 :            : 
    1519                 :          0 : int gpio_request(unsigned gpio, const char *label)
    1520                 :            : {
    1521                 :          0 :         return gpiod_request(gpio_to_desc(gpio), label);
    1522                 :            : }
    1523                 :            : EXPORT_SYMBOL_GPL(gpio_request);
    1524                 :            : 
    1525                 :          0 : static void gpiod_free(struct gpio_desc *desc)
    1526                 :            : {
    1527                 :            :         unsigned long           flags;
    1528                 :            :         struct gpio_chip        *chip;
    1529                 :            : 
    1530                 :            :         might_sleep();
    1531                 :            : 
    1532         [ #  # ]:          0 :         if (!desc) {
    1533                 :            :                 WARN_ON(extra_checks);
    1534                 :          0 :                 return;
    1535                 :            :         }
    1536                 :            : 
    1537                 :            :         gpiod_unexport(desc);
    1538                 :            : 
    1539                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1540                 :            : 
    1541                 :          0 :         chip = desc->chip;
    1542 [ #  # ][ #  # ]:          0 :         if (chip && test_bit(FLAG_REQUESTED, &desc->flags)) {
    1543         [ #  # ]:          0 :                 if (chip->free) {
    1544                 :            :                         spin_unlock_irqrestore(&gpio_lock, flags);
    1545                 :            :                         might_sleep_if(chip->can_sleep);
    1546                 :          0 :                         chip->free(chip, gpio_chip_hwgpio(desc));
    1547                 :          0 :                         spin_lock_irqsave(&gpio_lock, flags);
    1548                 :            :                 }
    1549                 :            :                 desc_set_label(desc, NULL);
    1550                 :          0 :                 module_put(desc->chip->owner);
    1551                 :          0 :                 clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
    1552                 :          0 :                 clear_bit(FLAG_REQUESTED, &desc->flags);
    1553                 :          0 :                 clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
    1554                 :          0 :                 clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
    1555                 :            :         } else
    1556                 :            :                 WARN_ON(extra_checks);
    1557                 :            : 
    1558                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1559                 :            : }
    1560                 :            : 
    1561                 :          0 : void gpio_free(unsigned gpio)
    1562                 :            : {
    1563                 :          0 :         gpiod_free(gpio_to_desc(gpio));
    1564                 :          0 : }
    1565                 :            : EXPORT_SYMBOL_GPL(gpio_free);
    1566                 :            : 
    1567                 :            : /**
    1568                 :            :  * gpio_request_one - request a single GPIO with initial configuration
    1569                 :            :  * @gpio:       the GPIO number
    1570                 :            :  * @flags:      GPIO configuration as specified by GPIOF_*
    1571                 :            :  * @label:      a literal description string of this GPIO
    1572                 :            :  */
    1573                 :          0 : int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
    1574                 :            : {
    1575                 :            :         struct gpio_desc *desc;
    1576                 :            :         int err;
    1577                 :            : 
    1578                 :          0 :         desc = gpio_to_desc(gpio);
    1579                 :            : 
    1580                 :          0 :         err = gpiod_request(desc, label);
    1581         [ #  # ]:          0 :         if (err)
    1582                 :            :                 return err;
    1583                 :            : 
    1584         [ #  # ]:          0 :         if (flags & GPIOF_OPEN_DRAIN)
    1585                 :          0 :                 set_bit(FLAG_OPEN_DRAIN, &desc->flags);
    1586                 :            : 
    1587         [ #  # ]:          0 :         if (flags & GPIOF_OPEN_SOURCE)
    1588                 :          0 :                 set_bit(FLAG_OPEN_SOURCE, &desc->flags);
    1589                 :            : 
    1590         [ #  # ]:          0 :         if (flags & GPIOF_DIR_IN)
    1591                 :          0 :                 err = gpiod_direction_input(desc);
    1592                 :            :         else
    1593                 :          0 :                 err = gpiod_direction_output(desc,
    1594                 :          0 :                                 (flags & GPIOF_INIT_HIGH) ? 1 : 0);
    1595                 :            : 
    1596         [ #  # ]:          0 :         if (err)
    1597                 :            :                 goto free_gpio;
    1598                 :            : 
    1599         [ #  # ]:          0 :         if (flags & GPIOF_EXPORT) {
    1600                 :            :                 err = gpiod_export(desc, flags & GPIOF_EXPORT_CHANGEABLE);
    1601                 :            :                 if (err)
    1602                 :            :                         goto free_gpio;
    1603                 :            :         }
    1604                 :            : 
    1605                 :            :         return 0;
    1606                 :            : 
    1607                 :            :  free_gpio:
    1608                 :          0 :         gpiod_free(desc);
    1609                 :          0 :         return err;
    1610                 :            : }
    1611                 :            : EXPORT_SYMBOL_GPL(gpio_request_one);
    1612                 :            : 
    1613                 :            : /**
    1614                 :            :  * gpio_request_array - request multiple GPIOs in a single call
    1615                 :            :  * @array:      array of the 'struct gpio'
    1616                 :            :  * @num:        how many GPIOs in the array
    1617                 :            :  */
    1618                 :          0 : int gpio_request_array(const struct gpio *array, size_t num)
    1619                 :            : {
    1620                 :            :         int i, err;
    1621                 :            : 
    1622         [ #  # ]:          0 :         for (i = 0; i < num; i++, array++) {
    1623                 :          0 :                 err = gpio_request_one(array->gpio, array->flags, array->label);
    1624         [ #  # ]:          0 :                 if (err)
    1625                 :            :                         goto err_free;
    1626                 :            :         }
    1627                 :            :         return 0;
    1628                 :            : 
    1629                 :            : err_free:
    1630         [ #  # ]:          0 :         while (i--)
    1631                 :          0 :                 gpio_free((--array)->gpio);
    1632                 :            :         return err;
    1633                 :            : }
    1634                 :            : EXPORT_SYMBOL_GPL(gpio_request_array);
    1635                 :            : 
    1636                 :            : /**
    1637                 :            :  * gpio_free_array - release multiple GPIOs in a single call
    1638                 :            :  * @array:      array of the 'struct gpio'
    1639                 :            :  * @num:        how many GPIOs in the array
    1640                 :            :  */
    1641                 :          0 : void gpio_free_array(const struct gpio *array, size_t num)
    1642                 :            : {
    1643         [ #  # ]:          0 :         while (num--)
    1644                 :          0 :                 gpio_free((array++)->gpio);
    1645                 :          0 : }
    1646                 :            : EXPORT_SYMBOL_GPL(gpio_free_array);
    1647                 :            : 
    1648                 :            : /**
    1649                 :            :  * gpiochip_is_requested - return string iff signal was requested
    1650                 :            :  * @chip: controller managing the signal
    1651                 :            :  * @offset: of signal within controller's 0..(ngpio - 1) range
    1652                 :            :  *
    1653                 :            :  * Returns NULL if the GPIO is not currently requested, else a string.
    1654                 :            :  * If debugfs support is enabled, the string returned is the label passed
    1655                 :            :  * to gpio_request(); otherwise it is a meaningless constant.
    1656                 :            :  *
    1657                 :            :  * This function is for use by GPIO controller drivers.  The label can
    1658                 :            :  * help with diagnostics, and knowing that the signal is used as a GPIO
    1659                 :            :  * can help avoid accidentally multiplexing it to another controller.
    1660                 :            :  */
    1661                 :          0 : const char *gpiochip_is_requested(struct gpio_chip *chip, unsigned offset)
    1662                 :            : {
    1663                 :            :         struct gpio_desc *desc;
    1664                 :            : 
    1665         [ #  # ]:          0 :         if (!GPIO_OFFSET_VALID(chip, offset))
    1666                 :            :                 return NULL;
    1667                 :            : 
    1668                 :          0 :         desc = &chip->desc[offset];
    1669                 :            : 
    1670         [ #  # ]:          0 :         if (test_bit(FLAG_REQUESTED, &desc->flags) == 0)
    1671                 :            :                 return NULL;
    1672                 :            : #ifdef CONFIG_DEBUG_FS
    1673                 :          0 :         return desc->label;
    1674                 :            : #else
    1675                 :            :         return "?";
    1676                 :            : #endif
    1677                 :            : }
    1678                 :            : EXPORT_SYMBOL_GPL(gpiochip_is_requested);
    1679                 :            : 
    1680                 :            : 
    1681                 :            : /* Drivers MUST set GPIO direction before making get/set calls.  In
    1682                 :            :  * some cases this is done in early boot, before IRQs are enabled.
    1683                 :            :  *
    1684                 :            :  * As a rule these aren't called more than once (except for drivers
    1685                 :            :  * using the open-drain emulation idiom) so these are natural places
    1686                 :            :  * to accumulate extra debugging checks.  Note that we can't (yet)
    1687                 :            :  * rely on gpio_request() having been called beforehand.
    1688                 :            :  */
    1689                 :            : 
    1690                 :            : /**
    1691                 :            :  * gpiod_direction_input - set the GPIO direction to input
    1692                 :            :  * @desc:       GPIO to set to input
    1693                 :            :  *
    1694                 :            :  * Set the direction of the passed GPIO to input, such as gpiod_get_value() can
    1695                 :            :  * be called safely on it.
    1696                 :            :  *
    1697                 :            :  * Return 0 in case of success, else an error code.
    1698                 :            :  */
    1699                 :          0 : int gpiod_direction_input(struct gpio_desc *desc)
    1700                 :            : {
    1701                 :            :         unsigned long           flags;
    1702                 :            :         struct gpio_chip        *chip;
    1703                 :            :         int                     status = -EINVAL;
    1704                 :            :         int                     offset;
    1705                 :            : 
    1706 [ #  # ][ #  # ]:          0 :         if (!desc || !desc->chip) {
    1707                 :          0 :                 pr_warn("%s: invalid GPIO\n", __func__);
    1708                 :          0 :                 return -EINVAL;
    1709                 :            :         }
    1710                 :            : 
    1711                 :            :         chip = desc->chip;
    1712 [ #  # ][ #  # ]:          0 :         if (!chip->get || !chip->direction_input) {
    1713         [ #  # ]:          0 :                 gpiod_warn(desc,
    1714                 :            :                         "%s: missing get() or direction_input() operations\n",
    1715                 :            :                         __func__);
    1716                 :          0 :                 return -EIO;
    1717                 :            :         }
    1718                 :            : 
    1719                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1720                 :            : 
    1721                 :          0 :         status = gpio_ensure_requested(desc);
    1722         [ #  # ]:          0 :         if (status < 0)
    1723                 :            :                 goto fail;
    1724                 :            : 
    1725                 :            :         /* now we know the gpio is valid and chip won't vanish */
    1726                 :            : 
    1727                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1728                 :            : 
    1729                 :            :         might_sleep_if(chip->can_sleep);
    1730                 :            : 
    1731                 :            :         offset = gpio_chip_hwgpio(desc);
    1732         [ #  # ]:          0 :         if (status) {
    1733                 :          0 :                 status = chip->request(chip, offset);
    1734         [ #  # ]:          0 :                 if (status < 0) {
    1735                 :          0 :                         gpiod_dbg(desc, "%s: chip request fail, %d\n",
    1736                 :            :                                         __func__, status);
    1737                 :            :                         /* and it's not available to anyone else ...
    1738                 :            :                          * gpio_request() is the fully clean solution.
    1739                 :            :                          */
    1740                 :            :                         goto lose;
    1741                 :            :                 }
    1742                 :            :         }
    1743                 :            : 
    1744                 :          0 :         status = chip->direction_input(chip, offset);
    1745         [ #  # ]:          0 :         if (status == 0)
    1746                 :          0 :                 clear_bit(FLAG_IS_OUT, &desc->flags);
    1747                 :            : 
    1748                 :          0 :         trace_gpio_direction(desc_to_gpio(desc), 1, status);
    1749                 :            : lose:
    1750                 :          0 :         return status;
    1751                 :            : fail:
    1752                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1753                 :            :         if (status)
    1754                 :            :                 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
    1755                 :          0 :         return status;
    1756                 :            : }
    1757                 :            : EXPORT_SYMBOL_GPL(gpiod_direction_input);
    1758                 :            : 
    1759                 :            : /**
    1760                 :            :  * gpiod_direction_output - set the GPIO direction to input
    1761                 :            :  * @desc:       GPIO to set to output
    1762                 :            :  * @value:      initial output value of the GPIO
    1763                 :            :  *
    1764                 :            :  * Set the direction of the passed GPIO to output, such as gpiod_set_value() can
    1765                 :            :  * be called safely on it. The initial value of the output must be specified.
    1766                 :            :  *
    1767                 :            :  * Return 0 in case of success, else an error code.
    1768                 :            :  */
    1769                 :          0 : int gpiod_direction_output(struct gpio_desc *desc, int value)
    1770                 :            : {
    1771                 :            :         unsigned long           flags;
    1772                 :            :         struct gpio_chip        *chip;
    1773                 :            :         int                     status = -EINVAL;
    1774                 :            :         int offset;
    1775                 :            : 
    1776 [ #  # ][ #  # ]:          0 :         if (!desc || !desc->chip) {
    1777                 :          0 :                 pr_warn("%s: invalid GPIO\n", __func__);
    1778                 :          0 :                 return -EINVAL;
    1779                 :            :         }
    1780                 :            : 
    1781                 :            :         /* GPIOs used for IRQs shall not be set as output */
    1782         [ #  # ]:          0 :         if (test_bit(FLAG_USED_AS_IRQ, &desc->flags)) {
    1783         [ #  # ]:          0 :                 gpiod_err(desc,
    1784                 :            :                           "%s: tried to set a GPIO tied to an IRQ as output\n",
    1785                 :            :                           __func__);
    1786                 :          0 :                 return -EIO;
    1787                 :            :         }
    1788                 :            : 
    1789                 :            :         /* Open drain pin should not be driven to 1 */
    1790 [ #  # ][ #  # ]:          0 :         if (value && test_bit(FLAG_OPEN_DRAIN,  &desc->flags))
    1791                 :          0 :                 return gpiod_direction_input(desc);
    1792                 :            : 
    1793                 :            :         /* Open source pin should not be driven to 0 */
    1794 [ #  # ][ #  # ]:          0 :         if (!value && test_bit(FLAG_OPEN_SOURCE,  &desc->flags))
    1795                 :          0 :                 return gpiod_direction_input(desc);
    1796                 :            : 
    1797                 :            :         chip = desc->chip;
    1798 [ #  # ][ #  # ]:          0 :         if (!chip->set || !chip->direction_output) {
    1799         [ #  # ]:          0 :                 gpiod_warn(desc,
    1800                 :            :                        "%s: missing set() or direction_output() operations\n",
    1801                 :            :                        __func__);
    1802                 :          0 :                 return -EIO;
    1803                 :            :         }
    1804                 :            : 
    1805                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1806                 :            : 
    1807                 :          0 :         status = gpio_ensure_requested(desc);
    1808         [ #  # ]:          0 :         if (status < 0)
    1809                 :            :                 goto fail;
    1810                 :            : 
    1811                 :            :         /* now we know the gpio is valid and chip won't vanish */
    1812                 :            : 
    1813                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1814                 :            : 
    1815                 :            :         might_sleep_if(chip->can_sleep);
    1816                 :            : 
    1817                 :            :         offset = gpio_chip_hwgpio(desc);
    1818         [ #  # ]:          0 :         if (status) {
    1819                 :          0 :                 status = chip->request(chip, offset);
    1820         [ #  # ]:          0 :                 if (status < 0) {
    1821                 :          0 :                         gpiod_dbg(desc, "%s: chip request fail, %d\n",
    1822                 :            :                                         __func__, status);
    1823                 :            :                         /* and it's not available to anyone else ...
    1824                 :            :                          * gpio_request() is the fully clean solution.
    1825                 :            :                          */
    1826                 :            :                         goto lose;
    1827                 :            :                 }
    1828                 :            :         }
    1829                 :            : 
    1830                 :          0 :         status = chip->direction_output(chip, offset, value);
    1831         [ #  # ]:          0 :         if (status == 0)
    1832                 :          0 :                 set_bit(FLAG_IS_OUT, &desc->flags);
    1833                 :          0 :         trace_gpio_value(desc_to_gpio(desc), 0, value);
    1834                 :            :         trace_gpio_direction(desc_to_gpio(desc), 0, status);
    1835                 :            : lose:
    1836                 :          0 :         return status;
    1837                 :            : fail:
    1838                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1839                 :            :         if (status)
    1840                 :            :                 gpiod_dbg(desc, "%s: gpio status %d\n", __func__, status);
    1841                 :          0 :         return status;
    1842                 :            : }
    1843                 :            : EXPORT_SYMBOL_GPL(gpiod_direction_output);
    1844                 :            : 
    1845                 :            : /**
    1846                 :            :  * gpiod_set_debounce - sets @debounce time for a @gpio
    1847                 :            :  * @gpio: the gpio to set debounce time
    1848                 :            :  * @debounce: debounce time is microseconds
    1849                 :            :  *
    1850                 :            :  * returns -ENOTSUPP if the controller does not support setting
    1851                 :            :  * debounce.
    1852                 :            :  */
    1853                 :          0 : int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
    1854                 :            : {
    1855                 :            :         unsigned long           flags;
    1856                 :            :         struct gpio_chip        *chip;
    1857                 :            :         int                     status = -EINVAL;
    1858                 :            :         int                     offset;
    1859                 :            : 
    1860 [ #  # ][ #  # ]:          0 :         if (!desc || !desc->chip) {
    1861                 :          0 :                 pr_warn("%s: invalid GPIO\n", __func__);
    1862                 :          0 :                 return -EINVAL;
    1863                 :            :         }
    1864                 :            : 
    1865                 :            :         chip = desc->chip;
    1866 [ #  # ][ #  # ]:          0 :         if (!chip->set || !chip->set_debounce) {
    1867                 :          0 :                 gpiod_dbg(desc,
    1868                 :            :                           "%s: missing set() or set_debounce() operations\n",
    1869                 :            :                           __func__);
    1870                 :            :                 return -ENOTSUPP;
    1871                 :            :         }
    1872                 :            : 
    1873                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    1874                 :            : 
    1875                 :          0 :         status = gpio_ensure_requested(desc);
    1876         [ #  # ]:          0 :         if (status < 0)
    1877                 :            :                 goto fail;
    1878                 :            : 
    1879                 :            :         /* now we know the gpio is valid and chip won't vanish */
    1880                 :            : 
    1881                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1882                 :            : 
    1883                 :            :         might_sleep_if(chip->can_sleep);
    1884                 :            : 
    1885                 :            :         offset = gpio_chip_hwgpio(desc);
    1886                 :          0 :         return chip->set_debounce(chip, offset, debounce);
    1887                 :            : 
    1888                 :            : fail:
    1889                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    1890                 :            :         if (status)
    1891                 :            :                 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
    1892                 :            : 
    1893                 :          0 :         return status;
    1894                 :            : }
    1895                 :            : EXPORT_SYMBOL_GPL(gpiod_set_debounce);
    1896                 :            : 
    1897                 :            : /**
    1898                 :            :  * gpiod_is_active_low - test whether a GPIO is active-low or not
    1899                 :            :  * @desc: the gpio descriptor to test
    1900                 :            :  *
    1901                 :            :  * Returns 1 if the GPIO is active-low, 0 otherwise.
    1902                 :            :  */
    1903                 :          0 : int gpiod_is_active_low(const struct gpio_desc *desc)
    1904                 :            : {
    1905                 :          0 :         return test_bit(FLAG_ACTIVE_LOW, &desc->flags);
    1906                 :            : }
    1907                 :            : EXPORT_SYMBOL_GPL(gpiod_is_active_low);
    1908                 :            : 
    1909                 :            : /* I/O calls are only valid after configuration completed; the relevant
    1910                 :            :  * "is this a valid GPIO" error checks should already have been done.
    1911                 :            :  *
    1912                 :            :  * "Get" operations are often inlinable as reading a pin value register,
    1913                 :            :  * and masking the relevant bit in that register.
    1914                 :            :  *
    1915                 :            :  * When "set" operations are inlinable, they involve writing that mask to
    1916                 :            :  * one register to set a low value, or a different register to set it high.
    1917                 :            :  * Otherwise locking is needed, so there may be little value to inlining.
    1918                 :            :  *
    1919                 :            :  *------------------------------------------------------------------------
    1920                 :            :  *
    1921                 :            :  * IMPORTANT!!!  The hot paths -- get/set value -- assume that callers
    1922                 :            :  * have requested the GPIO.  That can include implicit requesting by
    1923                 :            :  * a direction setting call.  Marking a gpio as requested locks its chip
    1924                 :            :  * in memory, guaranteeing that these table lookups need no more locking
    1925                 :            :  * and that gpiochip_remove() will fail.
    1926                 :            :  *
    1927                 :            :  * REVISIT when debugging, consider adding some instrumentation to ensure
    1928                 :            :  * that the GPIO was actually requested.
    1929                 :            :  */
    1930                 :            : 
    1931                 :          0 : static int _gpiod_get_raw_value(const struct gpio_desc *desc)
    1932                 :            : {
    1933                 :            :         struct gpio_chip        *chip;
    1934                 :            :         int value;
    1935                 :            :         int offset;
    1936                 :            : 
    1937                 :      32934 :         chip = desc->chip;
    1938                 :            :         offset = gpio_chip_hwgpio(desc);
    1939         [ +  - ]:      32934 :         value = chip->get ? chip->get(chip, offset) : 0;
    1940                 :      32934 :         trace_gpio_value(desc_to_gpio(desc), 1, value);
    1941                 :      32934 :         return value;
    1942                 :            : }
    1943                 :            : 
    1944                 :            : /**
    1945                 :            :  * gpiod_get_raw_value() - return a gpio's raw value
    1946                 :            :  * @desc: gpio whose value will be returned
    1947                 :            :  *
    1948                 :            :  * Return the GPIO's raw value, i.e. the value of the physical line disregarding
    1949                 :            :  * its ACTIVE_LOW status.
    1950                 :            :  *
    1951                 :            :  * This function should be called from contexts where we cannot sleep, and will
    1952                 :            :  * complain if the GPIO chip functions potentially sleep.
    1953                 :            :  */
    1954                 :          0 : int gpiod_get_raw_value(const struct gpio_desc *desc)
    1955                 :            : {
    1956         [ #  # ]:          0 :         if (!desc)
    1957                 :            :                 return 0;
    1958                 :            :         /* Should be using gpio_get_value_cansleep() */
    1959         [ #  # ]:          0 :         WARN_ON(desc->chip->can_sleep);
    1960                 :          0 :         return _gpiod_get_raw_value(desc);
    1961                 :            : }
    1962                 :            : EXPORT_SYMBOL_GPL(gpiod_get_raw_value);
    1963                 :            : 
    1964                 :            : /**
    1965                 :            :  * gpiod_get_value() - return a gpio's value
    1966                 :            :  * @desc: gpio whose value will be returned
    1967                 :            :  *
    1968                 :            :  * Return the GPIO's logical value, i.e. taking the ACTIVE_LOW status into
    1969                 :            :  * account.
    1970                 :            :  *
    1971                 :            :  * This function should be called from contexts where we cannot sleep, and will
    1972                 :            :  * complain if the GPIO chip functions potentially sleep.
    1973                 :            :  */
    1974                 :          0 : int gpiod_get_value(const struct gpio_desc *desc)
    1975                 :            : {
    1976                 :            :         int value;
    1977         [ #  # ]:          0 :         if (!desc)
    1978                 :            :                 return 0;
    1979                 :            :         /* Should be using gpio_get_value_cansleep() */
    1980         [ #  # ]:          0 :         WARN_ON(desc->chip->can_sleep);
    1981                 :            : 
    1982                 :          0 :         value = _gpiod_get_raw_value(desc);
    1983         [ #  # ]:          0 :         if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
    1984                 :          0 :                 value = !value;
    1985                 :            : 
    1986                 :          0 :         return value;
    1987                 :            : }
    1988                 :            : EXPORT_SYMBOL_GPL(gpiod_get_value);
    1989                 :            : 
    1990                 :            : /*
    1991                 :            :  *  _gpio_set_open_drain_value() - Set the open drain gpio's value.
    1992                 :            :  * @desc: gpio descriptor whose state need to be set.
    1993                 :            :  * @value: Non-zero for setting it HIGH otherise it will set to LOW.
    1994                 :            :  */
    1995                 :          0 : static void _gpio_set_open_drain_value(struct gpio_desc *desc, int value)
    1996                 :            : {
    1997                 :            :         int err = 0;
    1998                 :          0 :         struct gpio_chip *chip = desc->chip;
    1999                 :            :         int offset = gpio_chip_hwgpio(desc);
    2000                 :            : 
    2001         [ #  # ]:          0 :         if (value) {
    2002                 :          0 :                 err = chip->direction_input(chip, offset);
    2003         [ #  # ]:          0 :                 if (!err)
    2004                 :          0 :                         clear_bit(FLAG_IS_OUT, &desc->flags);
    2005                 :            :         } else {
    2006                 :          0 :                 err = chip->direction_output(chip, offset, 0);
    2007         [ #  # ]:          0 :                 if (!err)
    2008                 :          0 :                         set_bit(FLAG_IS_OUT, &desc->flags);
    2009                 :            :         }
    2010                 :          0 :         trace_gpio_direction(desc_to_gpio(desc), value, err);
    2011         [ #  # ]:          0 :         if (err < 0)
    2012         [ #  # ]:          0 :                 gpiod_err(desc,
    2013                 :            :                           "%s: Error in set_value for open drain err %d\n",
    2014                 :            :                           __func__, err);
    2015                 :          0 : }
    2016                 :            : 
    2017                 :            : /*
    2018                 :            :  *  _gpio_set_open_source_value() - Set the open source gpio's value.
    2019                 :            :  * @desc: gpio descriptor whose state need to be set.
    2020                 :            :  * @value: Non-zero for setting it HIGH otherise it will set to LOW.
    2021                 :            :  */
    2022                 :          0 : static void _gpio_set_open_source_value(struct gpio_desc *desc, int value)
    2023                 :            : {
    2024                 :            :         int err = 0;
    2025                 :          0 :         struct gpio_chip *chip = desc->chip;
    2026                 :            :         int offset = gpio_chip_hwgpio(desc);
    2027                 :            : 
    2028         [ #  # ]:          0 :         if (value) {
    2029                 :          0 :                 err = chip->direction_output(chip, offset, 1);
    2030         [ #  # ]:          0 :                 if (!err)
    2031                 :          0 :                         set_bit(FLAG_IS_OUT, &desc->flags);
    2032                 :            :         } else {
    2033                 :          0 :                 err = chip->direction_input(chip, offset);
    2034         [ #  # ]:          0 :                 if (!err)
    2035                 :          0 :                         clear_bit(FLAG_IS_OUT, &desc->flags);
    2036                 :            :         }
    2037                 :          0 :         trace_gpio_direction(desc_to_gpio(desc), !value, err);
    2038         [ #  # ]:          0 :         if (err < 0)
    2039         [ #  # ]:          0 :                 gpiod_err(desc,
    2040                 :            :                           "%s: Error in set_value for open source err %d\n",
    2041                 :            :                           __func__, err);
    2042                 :          0 : }
    2043                 :            : 
    2044                 :          0 : static void _gpiod_set_raw_value(struct gpio_desc *desc, int value)
    2045                 :            : {
    2046                 :            :         struct gpio_chip        *chip;
    2047                 :            : 
    2048                 :   17265256 :         chip = desc->chip;
    2049                 :   17265256 :         trace_gpio_value(desc_to_gpio(desc), 0, value);
    2050         [ -  + ]:   34652834 :         if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
    2051                 :          0 :                 _gpio_set_open_drain_value(desc, value);
    2052         [ -  + ]:   17387578 :         else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
    2053                 :          0 :                 _gpio_set_open_source_value(desc, value);
    2054                 :            :         else
    2055                 :   17387578 :                 chip->set(chip, gpio_chip_hwgpio(desc), value);
    2056                 :   17370337 : }
    2057                 :            : 
    2058                 :            : /**
    2059                 :            :  * gpiod_set_raw_value() - assign a gpio's raw value
    2060                 :            :  * @desc: gpio whose value will be assigned
    2061                 :            :  * @value: value to assign
    2062                 :            :  *
    2063                 :            :  * Set the raw value of the GPIO, i.e. the value of its physical line without
    2064                 :            :  * regard for its ACTIVE_LOW status.
    2065                 :            :  *
    2066                 :            :  * This function should be called from contexts where we cannot sleep, and will
    2067                 :            :  * complain if the GPIO chip functions potentially sleep.
    2068                 :            :  */
    2069                 :          0 : void gpiod_set_raw_value(struct gpio_desc *desc, int value)
    2070                 :            : {
    2071            [ + ]:   17471597 :         if (!desc)
    2072                 :   17378324 :                 return;
    2073                 :            :         /* Should be using gpio_set_value_cansleep() */
    2074         [ -  + ]:   17477467 :         WARN_ON(desc->chip->can_sleep);
    2075                 :   17477467 :         _gpiod_set_raw_value(desc, value);
    2076                 :            : }
    2077                 :            : EXPORT_SYMBOL_GPL(gpiod_set_raw_value);
    2078                 :            : 
    2079                 :            : /**
    2080                 :            :  * gpiod_set_value() - assign a gpio's value
    2081                 :            :  * @desc: gpio whose value will be assigned
    2082                 :            :  * @value: value to assign
    2083                 :            :  *
    2084                 :            :  * Set the logical value of the GPIO, i.e. taking its ACTIVE_LOW status into
    2085                 :            :  * account
    2086                 :            :  *
    2087                 :            :  * This function should be called from contexts where we cannot sleep, and will
    2088                 :            :  * complain if the GPIO chip functions potentially sleep.
    2089                 :            :  */
    2090                 :          0 : void gpiod_set_value(struct gpio_desc *desc, int value)
    2091                 :            : {
    2092         [ #  # ]:          0 :         if (!desc)
    2093                 :          0 :                 return;
    2094                 :            :         /* Should be using gpio_set_value_cansleep() */
    2095         [ #  # ]:          0 :         WARN_ON(desc->chip->can_sleep);
    2096         [ #  # ]:          0 :         if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
    2097                 :          0 :                 value = !value;
    2098                 :          0 :         _gpiod_set_raw_value(desc, value);
    2099                 :            : }
    2100                 :            : EXPORT_SYMBOL_GPL(gpiod_set_value);
    2101                 :            : 
    2102                 :            : /**
    2103                 :            :  * gpiod_cansleep() - report whether gpio value access may sleep
    2104                 :            :  * @desc: gpio to check
    2105                 :            :  *
    2106                 :            :  */
    2107                 :          0 : int gpiod_cansleep(const struct gpio_desc *desc)
    2108                 :            : {
    2109         [ #  # ]:          0 :         if (!desc)
    2110                 :            :                 return 0;
    2111                 :          0 :         return desc->chip->can_sleep;
    2112                 :            : }
    2113                 :            : EXPORT_SYMBOL_GPL(gpiod_cansleep);
    2114                 :            : 
    2115                 :            : /**
    2116                 :            :  * gpiod_to_irq() - return the IRQ corresponding to a GPIO
    2117                 :            :  * @desc: gpio whose IRQ will be returned (already requested)
    2118                 :            :  *
    2119                 :            :  * Return the IRQ corresponding to the passed GPIO, or an error code in case of
    2120                 :            :  * error.
    2121                 :            :  */
    2122                 :          0 : int gpiod_to_irq(const struct gpio_desc *desc)
    2123                 :            : {
    2124                 :            :         struct gpio_chip        *chip;
    2125                 :            :         int                     offset;
    2126                 :            : 
    2127         [ #  # ]:          0 :         if (!desc)
    2128                 :            :                 return -EINVAL;
    2129                 :          0 :         chip = desc->chip;
    2130                 :            :         offset = gpio_chip_hwgpio(desc);
    2131         [ #  # ]:          0 :         return chip->to_irq ? chip->to_irq(chip, offset) : -ENXIO;
    2132                 :            : }
    2133                 :            : EXPORT_SYMBOL_GPL(gpiod_to_irq);
    2134                 :            : 
    2135                 :            : /**
    2136                 :            :  * gpiod_lock_as_irq() - lock a GPIO to be used as IRQ
    2137                 :            :  * @gpio: the GPIO line to lock as used for IRQ
    2138                 :            :  *
    2139                 :            :  * This is used directly by GPIO drivers that want to lock down
    2140                 :            :  * a certain GPIO line to be used as IRQs, for example in the
    2141                 :            :  * .to_irq() callback of their gpio_chip, or in the .irq_enable()
    2142                 :            :  * of its irq_chip implementation if the GPIO is known from that
    2143                 :            :  * code.
    2144                 :            :  */
    2145                 :          0 : int gpiod_lock_as_irq(struct gpio_desc *desc)
    2146                 :            : {
    2147         [ #  # ]:          0 :         if (!desc)
    2148                 :            :                 return -EINVAL;
    2149                 :            : 
    2150         [ #  # ]:          0 :         if (test_bit(FLAG_IS_OUT, &desc->flags)) {
    2151         [ #  # ]:          0 :                 gpiod_err(desc,
    2152                 :            :                           "%s: tried to flag a GPIO set as output for IRQ\n",
    2153                 :            :                           __func__);
    2154                 :          0 :                 return -EIO;
    2155                 :            :         }
    2156                 :            : 
    2157                 :          0 :         set_bit(FLAG_USED_AS_IRQ, &desc->flags);
    2158                 :          0 :         return 0;
    2159                 :            : }
    2160                 :            : EXPORT_SYMBOL_GPL(gpiod_lock_as_irq);
    2161                 :            : 
    2162                 :          0 : int gpio_lock_as_irq(struct gpio_chip *chip, unsigned int offset)
    2163                 :            : {
    2164                 :          0 :         return gpiod_lock_as_irq(gpiochip_offset_to_desc(chip, offset));
    2165                 :            : }
    2166                 :            : EXPORT_SYMBOL_GPL(gpio_lock_as_irq);
    2167                 :            : 
    2168                 :            : /**
    2169                 :            :  * gpiod_unlock_as_irq() - unlock a GPIO used as IRQ
    2170                 :            :  * @gpio: the GPIO line to unlock from IRQ usage
    2171                 :            :  *
    2172                 :            :  * This is used directly by GPIO drivers that want to indicate
    2173                 :            :  * that a certain GPIO is no longer used exclusively for IRQ.
    2174                 :            :  */
    2175                 :          0 : void gpiod_unlock_as_irq(struct gpio_desc *desc)
    2176                 :            : {
    2177 [ #  # ][ #  # ]:          0 :         if (!desc)
    2178                 :          0 :                 return;
    2179                 :            : 
    2180                 :          0 :         clear_bit(FLAG_USED_AS_IRQ, &desc->flags);
    2181                 :            : }
    2182                 :            : EXPORT_SYMBOL_GPL(gpiod_unlock_as_irq);
    2183                 :            : 
    2184                 :          0 : void gpio_unlock_as_irq(struct gpio_chip *chip, unsigned int offset)
    2185                 :            : {
    2186                 :          0 :         return gpiod_unlock_as_irq(gpiochip_offset_to_desc(chip, offset));
    2187                 :            : }
    2188                 :            : EXPORT_SYMBOL_GPL(gpio_unlock_as_irq);
    2189                 :            : 
    2190                 :            : /**
    2191                 :            :  * gpiod_get_raw_value_cansleep() - return a gpio's raw value
    2192                 :            :  * @desc: gpio whose value will be returned
    2193                 :            :  *
    2194                 :            :  * Return the GPIO's raw value, i.e. the value of the physical line disregarding
    2195                 :            :  * its ACTIVE_LOW status.
    2196                 :            :  *
    2197                 :            :  * This function is to be called from contexts that can sleep.
    2198                 :            :  */
    2199                 :          0 : int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
    2200                 :            : {
    2201                 :            :         might_sleep_if(extra_checks);
    2202         [ +  - ]:      32934 :         if (!desc)
    2203                 :            :                 return 0;
    2204                 :      32934 :         return _gpiod_get_raw_value(desc);
    2205                 :            : }
    2206                 :            : EXPORT_SYMBOL_GPL(gpiod_get_raw_value_cansleep);
    2207                 :            : 
    2208                 :            : /**
    2209                 :            :  * gpiod_get_value_cansleep() - return a gpio's value
    2210                 :            :  * @desc: gpio whose value will be returned
    2211                 :            :  *
    2212                 :            :  * Return the GPIO's logical value, i.e. taking the ACTIVE_LOW status into
    2213                 :            :  * account.
    2214                 :            :  *
    2215                 :            :  * This function is to be called from contexts that can sleep.
    2216                 :            :  */
    2217                 :          0 : int gpiod_get_value_cansleep(const struct gpio_desc *desc)
    2218                 :            : {
    2219                 :            :         int value;
    2220                 :            : 
    2221                 :            :         might_sleep_if(extra_checks);
    2222         [ #  # ]:          0 :         if (!desc)
    2223                 :            :                 return 0;
    2224                 :            : 
    2225                 :          0 :         value = _gpiod_get_raw_value(desc);
    2226         [ #  # ]:          0 :         if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
    2227                 :          0 :                 value = !value;
    2228                 :            : 
    2229                 :          0 :         return value;
    2230                 :            : }
    2231                 :            : EXPORT_SYMBOL_GPL(gpiod_get_value_cansleep);
    2232                 :            : 
    2233                 :            : /**
    2234                 :            :  * gpiod_set_raw_value_cansleep() - assign a gpio's raw value
    2235                 :            :  * @desc: gpio whose value will be assigned
    2236                 :            :  * @value: value to assign
    2237                 :            :  *
    2238                 :            :  * Set the raw value of the GPIO, i.e. the value of its physical line without
    2239                 :            :  * regard for its ACTIVE_LOW status.
    2240                 :            :  *
    2241                 :            :  * This function is to be called from contexts that can sleep.
    2242                 :            :  */
    2243                 :          0 : void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)
    2244                 :            : {
    2245                 :            :         might_sleep_if(extra_checks);
    2246         [ #  # ]:          0 :         if (!desc)
    2247                 :          0 :                 return;
    2248                 :          0 :         _gpiod_set_raw_value(desc, value);
    2249                 :            : }
    2250                 :            : EXPORT_SYMBOL_GPL(gpiod_set_raw_value_cansleep);
    2251                 :            : 
    2252                 :            : /**
    2253                 :            :  * gpiod_set_value_cansleep() - assign a gpio's value
    2254                 :            :  * @desc: gpio whose value will be assigned
    2255                 :            :  * @value: value to assign
    2256                 :            :  *
    2257                 :            :  * Set the logical value of the GPIO, i.e. taking its ACTIVE_LOW status into
    2258                 :            :  * account
    2259                 :            :  *
    2260                 :            :  * This function is to be called from contexts that can sleep.
    2261                 :            :  */
    2262                 :          0 : void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
    2263                 :            : {
    2264                 :            :         might_sleep_if(extra_checks);
    2265         [ #  # ]:          0 :         if (!desc)
    2266                 :          0 :                 return;
    2267                 :            : 
    2268         [ #  # ]:          0 :         if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
    2269                 :          0 :                 value = !value;
    2270                 :          0 :         _gpiod_set_raw_value(desc, value);
    2271                 :            : }
    2272                 :            : EXPORT_SYMBOL_GPL(gpiod_set_value_cansleep);
    2273                 :            : 
    2274                 :            : /**
    2275                 :            :  * gpiod_add_lookup_table() - register GPIO device consumers
    2276                 :            :  * @table: table of consumers to register
    2277                 :            :  */
    2278                 :          0 : void gpiod_add_lookup_table(struct gpiod_lookup_table *table)
    2279                 :            : {
    2280                 :          0 :         mutex_lock(&gpio_lookup_lock);
    2281                 :            : 
    2282                 :          0 :         list_add_tail(&table->list, &gpio_lookup_list);
    2283                 :            : 
    2284                 :          0 :         mutex_unlock(&gpio_lookup_lock);
    2285                 :          0 : }
    2286                 :            : 
    2287                 :            : #ifdef CONFIG_OF
    2288                 :          0 : static struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id,
    2289                 :            :                                       unsigned int idx,
    2290                 :            :                                       enum gpio_lookup_flags *flags)
    2291                 :            : {
    2292                 :            :         char prop_name[32]; /* 32 is max size of property name */
    2293                 :            :         enum of_gpio_flags of_flags;
    2294                 :            :         struct gpio_desc *desc;
    2295                 :            : 
    2296         [ #  # ]:          0 :         if (con_id)
    2297                 :          0 :                 snprintf(prop_name, 32, "%s-gpios", con_id);
    2298                 :            :         else
    2299                 :          0 :                 snprintf(prop_name, 32, "gpios");
    2300                 :            : 
    2301                 :          0 :         desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx,
    2302                 :            :                                         &of_flags);
    2303                 :            : 
    2304         [ #  # ]:          0 :         if (IS_ERR(desc))
    2305                 :            :                 return desc;
    2306                 :            : 
    2307         [ #  # ]:          0 :         if (of_flags & OF_GPIO_ACTIVE_LOW)
    2308                 :          0 :                 *flags |= GPIO_ACTIVE_LOW;
    2309                 :            : 
    2310                 :            :         return desc;
    2311                 :            : }
    2312                 :            : #else
    2313                 :            : static struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id,
    2314                 :            :                                       unsigned int idx,
    2315                 :            :                                       enum gpio_lookup_flags *flags)
    2316                 :            : {
    2317                 :            :         return ERR_PTR(-ENODEV);
    2318                 :            : }
    2319                 :            : #endif
    2320                 :            : 
    2321                 :            : static struct gpio_desc *acpi_find_gpio(struct device *dev, const char *con_id,
    2322                 :            :                                         unsigned int idx,
    2323                 :            :                                         enum gpio_lookup_flags *flags)
    2324                 :            : {
    2325                 :            :         struct acpi_gpio_info info;
    2326                 :            :         struct gpio_desc *desc;
    2327                 :            : 
    2328                 :            :         desc = acpi_get_gpiod_by_index(dev, idx, &info);
    2329                 :            :         if (IS_ERR(desc))
    2330                 :            :                 return desc;
    2331                 :            : 
    2332                 :            :         if (info.gpioint && info.active_low)
    2333                 :            :                 *flags |= GPIO_ACTIVE_LOW;
    2334                 :            : 
    2335                 :            :         return desc;
    2336                 :            : }
    2337                 :            : 
    2338                 :          0 : static struct gpiod_lookup_table *gpiod_find_lookup_table(struct device *dev)
    2339                 :            : {
    2340         [ #  # ]:          0 :         const char *dev_id = dev ? dev_name(dev) : NULL;
    2341                 :            :         struct gpiod_lookup_table *table;
    2342                 :            : 
    2343                 :          0 :         mutex_lock(&gpio_lookup_lock);
    2344                 :            : 
    2345         [ #  # ]:          0 :         list_for_each_entry(table, &gpio_lookup_list, list) {
    2346 [ #  # ][ #  # ]:          0 :                 if (table->dev_id && dev_id) {
    2347                 :            :                         /*
    2348                 :            :                          * Valid strings on both ends, must be identical to have
    2349                 :            :                          * a match
    2350                 :            :                          */
    2351         [ #  # ]:          0 :                         if (!strcmp(table->dev_id, dev_id))
    2352                 :            :                                 goto found;
    2353                 :            :                 } else {
    2354                 :            :                         /*
    2355                 :            :                          * One of the pointers is NULL, so both must be to have
    2356                 :            :                          * a match
    2357                 :            :                          */
    2358         [ #  # ]:          0 :                         if (dev_id == table->dev_id)
    2359                 :            :                                 goto found;
    2360                 :            :                 }
    2361                 :            :         }
    2362                 :            :         table = NULL;
    2363                 :            : 
    2364                 :            : found:
    2365                 :          0 :         mutex_unlock(&gpio_lookup_lock);
    2366                 :          0 :         return table;
    2367                 :            : }
    2368                 :            : 
    2369                 :          0 : static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
    2370                 :            :                                     unsigned int idx,
    2371                 :            :                                     enum gpio_lookup_flags *flags)
    2372                 :            : {
    2373                 :            :         struct gpio_desc *desc = ERR_PTR(-ENOENT);
    2374                 :            :         struct gpiod_lookup_table *table;
    2375                 :            :         struct gpiod_lookup *p;
    2376                 :            : 
    2377                 :          0 :         table = gpiod_find_lookup_table(dev);
    2378         [ #  # ]:          0 :         if (!table)
    2379                 :            :                 return desc;
    2380                 :            : 
    2381         [ #  # ]:          0 :         for (p = &table->table[0]; p->chip_label; p++) {
    2382                 :            :                 struct gpio_chip *chip;
    2383                 :            : 
    2384                 :            :                 /* idx must always match exactly */
    2385         [ #  # ]:          0 :                 if (p->idx != idx)
    2386                 :          0 :                         continue;
    2387                 :            : 
    2388                 :            :                 /* If the lookup entry has a con_id, require exact match */
    2389 [ #  # ][ #  # ]:          0 :                 if (p->con_id && (!con_id || strcmp(p->con_id, con_id)))
                 [ #  # ]
    2390                 :          0 :                         continue;
    2391                 :            : 
    2392                 :            :                 chip = find_chip_by_name(p->chip_label);
    2393                 :            : 
    2394         [ #  # ]:          0 :                 if (!chip) {
    2395                 :          0 :                         dev_err(dev, "cannot find GPIO chip %s\n",
    2396                 :            :                                 p->chip_label);
    2397                 :          0 :                         return ERR_PTR(-ENODEV);
    2398                 :            :                 }
    2399                 :            : 
    2400         [ #  # ]:          0 :                 if (chip->ngpio <= p->chip_hwnum) {
    2401                 :          0 :                         dev_err(dev,
    2402                 :            :                                 "requested GPIO %d is out of range [0..%d] for chip %s\n",
    2403                 :            :                                 idx, chip->ngpio, chip->label);
    2404                 :          0 :                         return ERR_PTR(-EINVAL);
    2405                 :            :                 }
    2406                 :            : 
    2407                 :          0 :                 desc = gpiochip_offset_to_desc(chip, p->chip_hwnum);
    2408                 :          0 :                 *flags = p->flags;
    2409                 :            : 
    2410                 :          0 :                 return desc;
    2411                 :            :         }
    2412                 :            : 
    2413                 :            :         return desc;
    2414                 :            : }
    2415                 :            : 
    2416                 :            : /**
    2417                 :            :  * gpio_get - obtain a GPIO for a given GPIO function
    2418                 :            :  * @dev:        GPIO consumer, can be NULL for system-global GPIOs
    2419                 :            :  * @con_id:     function within the GPIO consumer
    2420                 :            :  *
    2421                 :            :  * Return the GPIO descriptor corresponding to the function con_id of device
    2422                 :            :  * dev, -ENOENT if no GPIO has been assigned to the requested function, or
    2423                 :            :  * another IS_ERR() code if an error occured while trying to acquire the GPIO.
    2424                 :            :  */
    2425                 :          0 : struct gpio_desc *__must_check gpiod_get(struct device *dev, const char *con_id)
    2426                 :            : {
    2427                 :          0 :         return gpiod_get_index(dev, con_id, 0);
    2428                 :            : }
    2429                 :            : EXPORT_SYMBOL_GPL(gpiod_get);
    2430                 :            : 
    2431                 :            : /**
    2432                 :            :  * gpiod_get_index - obtain a GPIO from a multi-index GPIO function
    2433                 :            :  * @dev:        GPIO consumer, can be NULL for system-global GPIOs
    2434                 :            :  * @con_id:     function within the GPIO consumer
    2435                 :            :  * @idx:        index of the GPIO to obtain in the consumer
    2436                 :            :  *
    2437                 :            :  * This variant of gpiod_get() allows to access GPIOs other than the first
    2438                 :            :  * defined one for functions that define several GPIOs.
    2439                 :            :  *
    2440                 :            :  * Return a valid GPIO descriptor, -ENOENT if no GPIO has been assigned to the
    2441                 :            :  * requested function and/or index, or another IS_ERR() code if an error
    2442                 :            :  * occured while trying to acquire the GPIO.
    2443                 :            :  */
    2444                 :          0 : struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
    2445                 :            :                                                const char *con_id,
    2446                 :            :                                                unsigned int idx)
    2447                 :            : {
    2448                 :            :         struct gpio_desc *desc = NULL;
    2449                 :            :         int status;
    2450                 :          0 :         enum gpio_lookup_flags flags = 0;
    2451                 :            : 
    2452                 :            :         dev_dbg(dev, "GPIO lookup for consumer %s\n", con_id);
    2453                 :            : 
    2454                 :            :         /* Using device tree? */
    2455 [ #  # ][ #  # ]:          0 :         if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node) {
    2456                 :            :                 dev_dbg(dev, "using device tree for GPIO lookup\n");
    2457                 :          0 :                 desc = of_find_gpio(dev, con_id, idx, &flags);
    2458                 :            :         } else if (IS_ENABLED(CONFIG_ACPI) && dev && ACPI_HANDLE(dev)) {
    2459                 :            :                 dev_dbg(dev, "using ACPI for GPIO lookup\n");
    2460                 :            :                 desc = acpi_find_gpio(dev, con_id, idx, &flags);
    2461                 :            :         }
    2462                 :            : 
    2463                 :            :         /*
    2464                 :            :          * Either we are not using DT or ACPI, or their lookup did not return
    2465                 :            :          * a result. In that case, use platform lookup as a fallback.
    2466                 :            :          */
    2467 [ #  # ][ #  # ]:          0 :         if (!desc || desc == ERR_PTR(-ENOENT)) {
    2468                 :            :                 dev_dbg(dev, "using lookup tables for GPIO lookup");
    2469                 :          0 :                 desc = gpiod_find(dev, con_id, idx, &flags);
    2470                 :            :         }
    2471                 :            : 
    2472         [ #  # ]:          0 :         if (IS_ERR(desc)) {
    2473                 :            :                 dev_dbg(dev, "lookup for GPIO %s failed\n", con_id);
    2474                 :            :                 return desc;
    2475                 :            :         }
    2476                 :            : 
    2477                 :          0 :         status = gpiod_request(desc, con_id);
    2478                 :            : 
    2479         [ #  # ]:          0 :         if (status < 0)
    2480                 :          0 :                 return ERR_PTR(status);
    2481                 :            : 
    2482         [ #  # ]:          0 :         if (flags & GPIO_ACTIVE_LOW)
    2483                 :          0 :                 set_bit(FLAG_ACTIVE_LOW, &desc->flags);
    2484         [ #  # ]:          0 :         if (flags & GPIO_OPEN_DRAIN)
    2485                 :          0 :                 set_bit(FLAG_OPEN_DRAIN, &desc->flags);
    2486         [ #  # ]:          0 :         if (flags & GPIO_OPEN_SOURCE)
    2487                 :          0 :                 set_bit(FLAG_OPEN_SOURCE, &desc->flags);
    2488                 :            : 
    2489                 :          0 :         return desc;
    2490                 :            : }
    2491                 :            : EXPORT_SYMBOL_GPL(gpiod_get_index);
    2492                 :            : 
    2493                 :            : /**
    2494                 :            :  * gpiod_put - dispose of a GPIO descriptor
    2495                 :            :  * @desc:       GPIO descriptor to dispose of
    2496                 :            :  *
    2497                 :            :  * No descriptor can be used after gpiod_put() has been called on it.
    2498                 :            :  */
    2499                 :          0 : void gpiod_put(struct gpio_desc *desc)
    2500                 :            : {
    2501                 :          0 :         gpiod_free(desc);
    2502                 :          0 : }
    2503                 :            : EXPORT_SYMBOL_GPL(gpiod_put);
    2504                 :            : 
    2505                 :            : #ifdef CONFIG_DEBUG_FS
    2506                 :            : 
    2507                 :          0 : static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
    2508                 :            : {
    2509                 :            :         unsigned                i;
    2510                 :          0 :         unsigned                gpio = chip->base;
    2511                 :          0 :         struct gpio_desc        *gdesc = &chip->desc[0];
    2512                 :            :         int                     is_out;
    2513                 :            :         int                     is_irq;
    2514                 :            : 
    2515         [ #  # ]:          0 :         for (i = 0; i < chip->ngpio; i++, gpio++, gdesc++) {
    2516         [ #  # ]:          0 :                 if (!test_bit(FLAG_REQUESTED, &gdesc->flags))
    2517                 :          0 :                         continue;
    2518                 :            : 
    2519                 :          0 :                 gpiod_get_direction(gdesc);
    2520                 :            :                 is_out = test_bit(FLAG_IS_OUT, &gdesc->flags);
    2521                 :            :                 is_irq = test_bit(FLAG_USED_AS_IRQ, &gdesc->flags);
    2522 [ #  # ][ #  # ]:          0 :                 seq_printf(s, " gpio-%-3d (%-20.20s) %s %s %s",
                 [ #  # ]
    2523                 :            :                         gpio, gdesc->label,
    2524                 :            :                         is_out ? "out" : "in ",
    2525                 :          0 :                         chip->get
    2526         [ #  # ]:          0 :                                 ? (chip->get(chip, i) ? "hi" : "lo")
    2527                 :            :                                 : "?  ",
    2528                 :            :                         is_irq ? "IRQ" : "   ");
    2529                 :          0 :                 seq_printf(s, "\n");
    2530                 :            :         }
    2531                 :          0 : }
    2532                 :            : 
    2533                 :          0 : static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)
    2534                 :            : {
    2535                 :            :         unsigned long flags;
    2536                 :            :         struct gpio_chip *chip = NULL;
    2537                 :          0 :         loff_t index = *pos;
    2538                 :            : 
    2539                 :          0 :         s->private = "";
    2540                 :            : 
    2541                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    2542         [ #  # ]:          0 :         list_for_each_entry(chip, &gpio_chips, list)
    2543         [ #  # ]:          0 :                 if (index-- == 0) {
    2544                 :            :                         spin_unlock_irqrestore(&gpio_lock, flags);
    2545                 :          0 :                         return chip;
    2546                 :            :                 }
    2547                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    2548                 :            : 
    2549                 :          0 :         return NULL;
    2550                 :            : }
    2551                 :            : 
    2552                 :          0 : static void *gpiolib_seq_next(struct seq_file *s, void *v, loff_t *pos)
    2553                 :            : {
    2554                 :            :         unsigned long flags;
    2555                 :            :         struct gpio_chip *chip = v;
    2556                 :            :         void *ret = NULL;
    2557                 :            : 
    2558                 :          0 :         spin_lock_irqsave(&gpio_lock, flags);
    2559         [ #  # ]:          0 :         if (list_is_last(&chip->list, &gpio_chips))
    2560                 :            :                 ret = NULL;
    2561                 :            :         else
    2562                 :          0 :                 ret = list_entry(chip->list.next, struct gpio_chip, list);
    2563                 :            :         spin_unlock_irqrestore(&gpio_lock, flags);
    2564                 :            : 
    2565                 :          0 :         s->private = "\n";
    2566                 :          0 :         ++*pos;
    2567                 :            : 
    2568                 :          0 :         return ret;
    2569                 :            : }
    2570                 :            : 
    2571                 :          0 : static void gpiolib_seq_stop(struct seq_file *s, void *v)
    2572                 :            : {
    2573                 :          0 : }
    2574                 :            : 
    2575                 :          0 : static int gpiolib_seq_show(struct seq_file *s, void *v)
    2576                 :            : {
    2577                 :            :         struct gpio_chip *chip = v;
    2578                 :            :         struct device *dev;
    2579                 :            : 
    2580                 :          0 :         seq_printf(s, "%sGPIOs %d-%d", (char *)s->private,
    2581                 :          0 :                         chip->base, chip->base + chip->ngpio - 1);
    2582                 :          0 :         dev = chip->dev;
    2583         [ #  # ]:          0 :         if (dev)
    2584         [ #  # ]:          0 :                 seq_printf(s, ", %s/%s", dev->bus ? dev->bus->name : "no-bus",
    2585                 :            :                         dev_name(dev));
    2586         [ #  # ]:          0 :         if (chip->label)
    2587                 :          0 :                 seq_printf(s, ", %s", chip->label);
    2588         [ #  # ]:          0 :         if (chip->can_sleep)
    2589                 :          0 :                 seq_printf(s, ", can sleep");
    2590                 :          0 :         seq_printf(s, ":\n");
    2591                 :            : 
    2592         [ #  # ]:          0 :         if (chip->dbg_show)
    2593                 :          0 :                 chip->dbg_show(s, chip);
    2594                 :            :         else
    2595                 :          0 :                 gpiolib_dbg_show(s, chip);
    2596                 :            : 
    2597                 :          0 :         return 0;
    2598                 :            : }
    2599                 :            : 
    2600                 :            : static const struct seq_operations gpiolib_seq_ops = {
    2601                 :            :         .start = gpiolib_seq_start,
    2602                 :            :         .next = gpiolib_seq_next,
    2603                 :            :         .stop = gpiolib_seq_stop,
    2604                 :            :         .show = gpiolib_seq_show,
    2605                 :            : };
    2606                 :            : 
    2607                 :          0 : static int gpiolib_open(struct inode *inode, struct file *file)
    2608                 :            : {
    2609                 :          0 :         return seq_open(file, &gpiolib_seq_ops);
    2610                 :            : }
    2611                 :            : 
    2612                 :            : static const struct file_operations gpiolib_operations = {
    2613                 :            :         .owner          = THIS_MODULE,
    2614                 :            :         .open           = gpiolib_open,
    2615                 :            :         .read           = seq_read,
    2616                 :            :         .llseek         = seq_lseek,
    2617                 :            :         .release        = seq_release,
    2618                 :            : };
    2619                 :            : 
    2620                 :          0 : static int __init gpiolib_debugfs_init(void)
    2621                 :            : {
    2622                 :            :         /* /sys/kernel/debug/gpio */
    2623                 :          0 :         (void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
    2624                 :            :                                 NULL, NULL, &gpiolib_operations);
    2625                 :          0 :         return 0;
    2626                 :            : }
    2627                 :            : subsys_initcall(gpiolib_debugfs_init);
    2628                 :            : 
    2629                 :            : #endif  /* DEBUG_FS */

Generated by: LCOV version 1.9