Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.14-rc2 159 lines 3.6 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/bitops.h> 3#include <linux/device.h> 4#include <linux/errno.h> 5#include <linux/export.h> 6#include <linux/gfp.h> 7 8#include <linux/gpio/consumer.h> 9#include <linux/gpio/driver.h> 10 11#include <linux/gpio.h> 12 13#include "gpiolib.h" 14 15/* 16 * **DEPRECATED** This function is deprecated and must not be used in new code. 17 */ 18void gpio_free(unsigned gpio) 19{ 20 gpiod_free(gpio_to_desc(gpio)); 21} 22EXPORT_SYMBOL_GPL(gpio_free); 23 24/** 25 * gpio_request_one - request a single GPIO with initial configuration 26 * @gpio: the GPIO number 27 * @flags: GPIO configuration as specified by GPIOF_* 28 * @label: a literal description string of this GPIO 29 * 30 * **DEPRECATED** This function is deprecated and must not be used in new code. 31 * 32 * Returns: 33 * 0 on success, or negative errno on failure. 34 */ 35int gpio_request_one(unsigned gpio, unsigned long flags, const char *label) 36{ 37 struct gpio_desc *desc; 38 int err; 39 40 /* Compatibility: assume unavailable "valid" GPIOs will appear later */ 41 desc = gpio_to_desc(gpio); 42 if (!desc) 43 return -EPROBE_DEFER; 44 45 err = gpiod_request(desc, label); 46 if (err) 47 return err; 48 49 if (flags & GPIOF_IN) 50 err = gpiod_direction_input(desc); 51 else 52 err = gpiod_direction_output_raw(desc, !!(flags & GPIOF_OUT_INIT_HIGH)); 53 54 if (err) 55 goto free_gpio; 56 57 return 0; 58 59 free_gpio: 60 gpiod_free(desc); 61 return err; 62} 63EXPORT_SYMBOL_GPL(gpio_request_one); 64 65/* 66 * **DEPRECATED** This function is deprecated and must not be used in new code. 67 */ 68int gpio_request(unsigned gpio, const char *label) 69{ 70 struct gpio_desc *desc; 71 72 /* Compatibility: assume unavailable "valid" GPIOs will appear later */ 73 desc = gpio_to_desc(gpio); 74 if (!desc) 75 return -EPROBE_DEFER; 76 77 return gpiod_request(desc, label); 78} 79EXPORT_SYMBOL_GPL(gpio_request); 80 81static void devm_gpio_release(struct device *dev, void *res) 82{ 83 unsigned *gpio = res; 84 85 gpio_free(*gpio); 86} 87 88/** 89 * devm_gpio_request - request a GPIO for a managed device 90 * @dev: device to request the GPIO for 91 * @gpio: GPIO to allocate 92 * @label: the name of the requested GPIO 93 * 94 * Except for the extra @dev argument, this function takes the 95 * same arguments and performs the same function as gpio_request(). 96 * GPIOs requested with this function will be automatically freed 97 * on driver detach. 98 * 99 * **DEPRECATED** This function is deprecated and must not be used in new code. 100 * 101 * Returns: 102 * 0 on success, or negative errno on failure. 103 */ 104int devm_gpio_request(struct device *dev, unsigned gpio, const char *label) 105{ 106 unsigned *dr; 107 int rc; 108 109 dr = devres_alloc(devm_gpio_release, sizeof(unsigned), GFP_KERNEL); 110 if (!dr) 111 return -ENOMEM; 112 113 rc = gpio_request(gpio, label); 114 if (rc) { 115 devres_free(dr); 116 return rc; 117 } 118 119 *dr = gpio; 120 devres_add(dev, dr); 121 122 return 0; 123} 124EXPORT_SYMBOL_GPL(devm_gpio_request); 125 126/** 127 * devm_gpio_request_one - request a single GPIO with initial setup 128 * @dev: device to request for 129 * @gpio: the GPIO number 130 * @flags: GPIO configuration as specified by GPIOF_* 131 * @label: a literal description string of this GPIO 132 * 133 * **DEPRECATED** This function is deprecated and must not be used in new code. 134 * 135 * Returns: 136 * 0 on success, or negative errno on failure. 137 */ 138int devm_gpio_request_one(struct device *dev, unsigned gpio, 139 unsigned long flags, const char *label) 140{ 141 unsigned *dr; 142 int rc; 143 144 dr = devres_alloc(devm_gpio_release, sizeof(unsigned), GFP_KERNEL); 145 if (!dr) 146 return -ENOMEM; 147 148 rc = gpio_request_one(gpio, flags, label); 149 if (rc) { 150 devres_free(dr); 151 return rc; 152 } 153 154 *dr = gpio; 155 devres_add(dev, dr); 156 157 return 0; 158} 159EXPORT_SYMBOL_GPL(devm_gpio_request_one);