]> Git Repo - J-linux.git/blob - drivers/gpio/gpiolib-legacy.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / drivers / gpio / gpiolib-legacy.c
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  */
18 void gpio_free(unsigned gpio)
19 {
20         gpiod_free(gpio_to_desc(gpio));
21 }
22 EXPORT_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  */
35 int 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 }
63 EXPORT_SYMBOL_GPL(gpio_request_one);
64
65 /*
66  * **DEPRECATED** This function is deprecated and must not be used in new code.
67  */
68 int 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 }
79 EXPORT_SYMBOL_GPL(gpio_request);
80
81 static 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  */
104 int 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 }
124 EXPORT_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  */
138 int 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 }
159 EXPORT_SYMBOL_GPL(devm_gpio_request_one);
This page took 0.032484 seconds and 4 git commands to generate.