linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Markus Pargmann <mpa@pengutronix.de>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: "Alexandre Courbot" <gnurou@gmail.com>,
	"Arun Bharadwaj" <arun@gumstix.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Johan Hovold" <johan@kernel.org>,
	linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	kernel@pengutronix.de, "Markus Pargmann" <mpa@pengutronix.de>
Subject: [PATCH v3 2/9] gpio: Introduce gpio descriptor 'name'
Date: Fri, 14 Aug 2015 16:10:59 +0200	[thread overview]
Message-ID: <1439561466-14350-3-git-send-email-mpa@pengutronix.de> (raw)
In-Reply-To: <1439561466-14350-1-git-send-email-mpa@pengutronix.de>

The latest gpio hogging mechanism assigns each gpio a 'line-name' in the
devicetree. The 'name' field is different from the 'label' field.
'label' is only used for requested GPIOs to describe its current use by
driver or userspace.

The 'name' field describes the GPIO itself, not the use. This is most
likely identical to the label in the schematic on the GPIO line and
should help to find this particular GPIO.

This is equivalent to the gpiochip->names array. However names should be
stored in the GPIO descriptor. We will use gpiochip->names in the future
only as initializer for the GPIO descriptors for drivers that assign
GPIO names hardcoded. All other GPIO names will be parsed from DT and
directly assigned to the GPIO descriptor.

This patch adds a helper function to find gpio descriptors by name
instead of gpio number.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 drivers/gpio/gpiolib.c        | 32 ++++++++++++++++++++++++++++++++
 drivers/gpio/gpiolib.h        |  3 +++
 include/linux/gpio/consumer.h |  7 +++++++
 3 files changed, 42 insertions(+)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index bf4bd1d120c3..eed3751fe14f 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -90,6 +90,38 @@ struct gpio_desc *gpio_to_desc(unsigned gpio)
 EXPORT_SYMBOL_GPL(gpio_to_desc);
 
 /**
+ * Convert a GPIO name to its descriptor
+ */
+struct gpio_desc *gpio_name_to_desc(const char * const name)
+{
+	struct gpio_chip *chip;
+	unsigned long flags;
+
+	spin_lock_irqsave(&gpio_lock, flags);
+
+	list_for_each_entry(chip, &gpio_chips, list) {
+		int i;
+
+		for (i = 0; i != chip->ngpio; ++i) {
+			struct gpio_desc *gpio = &chip->desc[i];
+
+			if (!gpio->name)
+				continue;
+
+			if (!strcmp(gpio->name, name)) {
+				spin_unlock_irqrestore(&gpio_lock, flags);
+				return gpio;
+			}
+		}
+	}
+
+	spin_unlock_irqrestore(&gpio_lock, flags);
+
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(gpio_name_to_desc);
+
+/**
  * Get the GPIO descriptor corresponding to the given hw number for this chip.
  */
 struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
index bf343004b008..78e634d1c719 100644
--- a/drivers/gpio/gpiolib.h
+++ b/drivers/gpio/gpiolib.h
@@ -89,7 +89,10 @@ struct gpio_desc {
 #define FLAG_USED_AS_IRQ 9	/* GPIO is connected to an IRQ */
 #define FLAG_IS_HOGGED	11	/* GPIO is hogged */
 
+	/* Connection label */
 	const char		*label;
+	/* Name of the GPIO */
+	const char		*name;
 };
 
 int gpiod_request(struct gpio_desc *desc, const char *label);
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
index adac255aee86..a873b8b47ab3 100644
--- a/include/linux/gpio/consumer.h
+++ b/include/linux/gpio/consumer.h
@@ -130,6 +130,7 @@ int gpiod_to_irq(const struct gpio_desc *desc);
 /* Convert between the old gpio_ and new gpiod_ interfaces */
 struct gpio_desc *gpio_to_desc(unsigned gpio);
 int desc_to_gpio(const struct gpio_desc *desc);
+struct gpio_desc *gpio_name_to_desc(const char *name);
 
 /* Child properties interface */
 struct fwnode_handle;
@@ -400,6 +401,12 @@ static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
 {
 	return ERR_PTR(-EINVAL);
 }
+
+static inline struct gpio_desc *gpio_name_to_desc(const char *name)
+{
+	return ERR_PTR(-EINVAL);
+}
+
 static inline int desc_to_gpio(const struct gpio_desc *desc)
 {
 	/* GPIO can never have been requested */
-- 
2.4.6


  parent reply	other threads:[~2015-08-14 14:12 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-14 14:10 [PATCH v3 0/9] gpiolib: Add GPIO name support Markus Pargmann
2015-08-14 14:10 ` [PATCH v3 1/9] gpiolib-of: Rename gpio_hog functions to be generic Markus Pargmann
2015-09-22  0:48   ` Linus Walleij
2015-08-14 14:10 ` Markus Pargmann [this message]
2015-09-22  0:51   ` [PATCH v3 2/9] gpio: Introduce gpio descriptor 'name' Linus Walleij
2015-08-14 14:11 ` [PATCH v3 3/9] gpiolib: Use GPIO name from names array for gpio descriptor Markus Pargmann
2015-09-22  0:56   ` Linus Walleij
2015-09-23 22:02   ` Johan Hovold
2015-09-24 21:50     ` Linus Walleij
2015-08-14 14:11 ` [PATCH v3 4/9] gpio-sysfs: Use gpio descriptor name instead of gpiochip names array Markus Pargmann
2015-09-22  0:57   ` Linus Walleij
2015-08-14 14:11 ` [PATCH v3 5/9] gpiolib: Add gpio name information to /sys/kernel/debug/gpio Markus Pargmann
2015-09-22  1:05   ` Linus Walleij
2015-08-14 14:11 ` [PATCH v3 6/9] gpiolib-sysfs: Show gpio-name in /sys/class/gpio/gpio*/name Markus Pargmann
2015-09-22  1:07   ` Linus Walleij
2015-09-24  7:14     ` Markus Pargmann
2015-08-14 14:11 ` [PATCH v3 7/9] gpiolib-sysfs: Add gpio name parsing for sysfs export Markus Pargmann
2015-09-22  1:09   ` Linus Walleij
2015-09-24  7:23     ` Markus Pargmann
2015-08-14 14:11 ` [PATCH v3 8/9] gpiolib-of: Reuse 'line-name' from DT as gpio descriptor name Markus Pargmann
2015-08-14 14:11 ` [PATCH v3 9/9] gpiolib-of: Use dev_warn instead of pr_warn Markus Pargmann
2015-09-21 10:58 ` [PATCH v3 0/9] gpiolib: Add GPIO name support Markus Pargmann

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=1439561466-14350-3-git-send-email-mpa@pengutronix.de \
    --to=mpa@pengutronix.de \
    --cc=arun@gumstix.com \
    --cc=gnurou@gmail.com \
    --cc=johan@kernel.org \
    --cc=kernel@pengutronix.de \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=u.kleine-koenig@pengutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).