| From 0dcb8b6a014055f4cdfc1d2f3edc47da809613e1 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl> |
| Date: Wed, 11 Dec 2019 03:40:55 +0100 |
| Subject: [PATCH] gpio: add gpiod_toggle_active_low() |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit d3a5bcb4a17f1ad072484bb92c42519ff3aba6e1 upstream. |
| |
| Add possibility to toggle active-low flag of a gpio descriptor. This is |
| useful for compatibility code, where defaults are inverted vs DT gpio |
| flags or the active-low flag is taken from elsewhere. |
| |
| Acked-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> |
| Link: https://lore.kernel.org/r/7ce0338e01ad17fa5a227176813941b41a7c35c1.1576031637.git.mirq-linux@rere.qmqm.pl |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c |
| index e64059f10542..8d27c632e41d 100644 |
| --- a/drivers/gpio/gpiolib.c |
| +++ b/drivers/gpio/gpiolib.c |
| @@ -2878,6 +2878,17 @@ int gpiod_is_active_low(const struct gpio_desc *desc) |
| } |
| EXPORT_SYMBOL_GPL(gpiod_is_active_low); |
| |
| +/** |
| + * gpiod_toggle_active_low - toggle whether a GPIO is active-low or not |
| + * @desc: the gpio descriptor to change |
| + */ |
| +void gpiod_toggle_active_low(struct gpio_desc *desc) |
| +{ |
| + VALIDATE_DESC_VOID(desc); |
| + change_bit(FLAG_ACTIVE_LOW, &desc->flags); |
| +} |
| +EXPORT_SYMBOL_GPL(gpiod_toggle_active_low); |
| + |
| /* I/O calls are only valid after configuration completed; the relevant |
| * "is this a valid GPIO" error checks should already have been done. |
| * |
| diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h |
| index a7f08fb0f865..ae6c80c49443 100644 |
| --- a/include/linux/gpio/consumer.h |
| +++ b/include/linux/gpio/consumer.h |
| @@ -158,6 +158,7 @@ int gpiod_set_raw_array_value_cansleep(unsigned int array_size, |
| |
| int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce); |
| int gpiod_set_transitory(struct gpio_desc *desc, bool transitory); |
| +void gpiod_toggle_active_low(struct gpio_desc *desc); |
| |
| int gpiod_is_active_low(const struct gpio_desc *desc); |
| int gpiod_cansleep(const struct gpio_desc *desc); |
| @@ -489,6 +490,12 @@ static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory) |
| return -ENOSYS; |
| } |
| |
| +static inline void gpiod_toggle_active_low(struct gpio_desc *desc) |
| +{ |
| + /* GPIO can never have been requested */ |
| + WARN_ON(desc); |
| +} |
| + |
| static inline int gpiod_is_active_low(const struct gpio_desc *desc) |
| { |
| /* GPIO can never have been requested */ |
| -- |
| 2.7.4 |
| |