From: Archit More <architmore303@gmail.com>
To: linux-gpio@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, linus.walleij@linaro.org,
brgl@bgdev.pl, Archit More <architmore303@gmail.com>
Subject: [PATCH] gpio: make gpio_chip_guard accept const gpio_desc
Date: Fri, 19 Jun 2026 14:20:36 +0530 [thread overview]
Message-ID: <20260619085036.85242-1-architmore303@gmail.com> (raw)
Make gpio_chip_guard accept a const struct gpio_desc pointer,
allowing gpiod_get_raw_value_commit() and gpiod_to_irq() to use
the helper instead of open-coding SRCU-protected chip lookups.
This removes duplicated code and eliminates the FIXME comments
about gpio_chip_guard being unusable with const descriptors.
Signed-off-by: Archit More <architmore303@gmail.com>
---
drivers/gpio/gpiolib.c | 28 ++++++++--------------------
drivers/gpio/gpiolib.h | 2 +-
2 files changed, 9 insertions(+), 21 deletions(-)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 1e6dce430dca..3ee924b2ab94 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -3406,20 +3406,13 @@ static int gpio_chip_get_value(struct gpio_chip *gc, const struct gpio_desc *des
static int gpiod_get_raw_value_commit(const struct gpio_desc *desc)
{
- struct gpio_device *gdev;
- struct gpio_chip *gc;
int value;
- /* FIXME Unable to use gpio_chip_guard due to const desc. */
- gdev = desc->gdev;
-
- guard(srcu)(&gdev->srcu);
-
- gc = srcu_dereference(gdev->chip, &gdev->srcu);
- if (!gc)
+ CLASS(gpio_chip_guard, guard)(desc);
+ if (!guard.gc)
return -ENODEV;
- value = gpio_chip_get_value(gc, desc);
+ value = gpio_chip_get_value(guard.gc, desc);
value = value < 0 ? value : !!value;
trace_gpio_value(desc_to_gpio(desc), 1, value);
return value;
@@ -4126,8 +4119,6 @@ EXPORT_SYMBOL_GPL(gpiod_is_shared);
*/
int gpiod_to_irq(const struct gpio_desc *desc)
{
- struct gpio_device *gdev;
- struct gpio_chip *gc;
int offset;
int ret;
@@ -4135,16 +4126,13 @@ int gpiod_to_irq(const struct gpio_desc *desc)
if (ret <= 0)
return -EINVAL;
- gdev = desc->gdev;
- /* FIXME Cannot use gpio_chip_guard due to const desc. */
- guard(srcu)(&gdev->srcu);
- gc = srcu_dereference(gdev->chip, &gdev->srcu);
- if (!gc)
+ CLASS(gpio_chip_guard, guard)(desc);
+ if (!guard.gc)
return -ENODEV;
offset = gpiod_hwgpio(desc);
- if (gc->to_irq) {
- ret = gc->to_irq(gc, offset);
+ if (guard.gc->to_irq) {
+ ret = guard.gc->to_irq(guard.gc, offset);
if (ret)
return ret;
@@ -4152,7 +4140,7 @@ int gpiod_to_irq(const struct gpio_desc *desc)
return -ENXIO;
}
#ifdef CONFIG_GPIOLIB_IRQCHIP
- if (gc->irq.chip) {
+ if (guard.gc->irq.chip) {
/*
* Avoid race condition with other code, which tries to lookup
* an IRQ before the irqchip has been properly registered,
diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
index dc4cb61a9318..841b7f8dba6c 100644
--- a/drivers/gpio/gpiolib.h
+++ b/drivers/gpio/gpiolib.h
@@ -244,7 +244,7 @@ DEFINE_CLASS(gpio_chip_guard,
_guard;
}),
- struct gpio_desc *desc)
+ const struct gpio_desc *desc)
int gpiod_request(struct gpio_desc *desc, const char *label);
int gpiod_request_commit(struct gpio_desc *desc, const char *label);
--
2.34.1
next reply other threads:[~2026-06-19 8:50 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-19 8:50 Archit More [this message]
2026-06-19 8:57 ` [PATCH] gpio: make gpio_chip_guard accept const gpio_desc Bartosz Golaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260619085036.85242-1-architmore303@gmail.com \
--to=architmore303@gmail.com \
--cc=brgl@bgdev.pl \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.