linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chen-Yu Tsai <wenst@chromium.org>
To: Rob Herring <robh@kernel.org>,
	Saravana Kannan <saravanak@google.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	Wolfram Sang <wsa@kernel.org>, Benson Leung <bleung@chromium.org>,
	Tzung-Bi Shih <tzungbi@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>
Cc: Chen-Yu Tsai <wenst@chromium.org>,
	chrome-platform@lists.linux.dev, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org,
	Douglas Anderson <dianders@chromium.org>,
	Johan Hovold <johan@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	linux-i2c@vger.kernel.org
Subject: [PATCH v6 06/12] gpiolib: Add gpio_get_property_name_length()
Date: Wed,  4 Sep 2024 17:00:08 +0800	[thread overview]
Message-ID: <20240904090016.2841572-7-wenst@chromium.org> (raw)
In-Reply-To: <20240904090016.2841572-1-wenst@chromium.org>

The I2C device tree component prober needs to get and toggle GPIO lines
for the components it intends to probe. These components may not use the
same name for their GPIO lines, so the prober must go through the device
tree, check each property to see it is a GPIO property, and get the GPIO
line.

Instead of duplicating the GPIO suffixes, or exporting them to the
prober to do pattern matching, simply add and export a new function that
does the pattern matching and returns the length of the GPIO name. The
caller can then use that to copy out the name if it needs to.

Andy suggested a much shorter implementation.

Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>

---
Changes since v5:
- Changed function name to "gpio_get_property_name_length()"
- Changed argument name to "propname"
- Clarified return value for "*-<GPIO suffix>" case
- Reworked according to Andy's suggestion
- Added stub function

Changes since v4:
- new patch
---
 drivers/gpio/gpiolib.c        | 25 +++++++++++++++++++++++++
 include/linux/gpio/consumer.h |  7 +++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 3903d0a75304..86527cc7991b 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -4295,6 +4295,31 @@ struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
 }
 EXPORT_SYMBOL_GPL(fwnode_gpiod_get_index);
 
+/**
+ * gpio_get_property_name_length - Returns the GPIO name length from a property name
+ * @propname:	name of the property to check
+ *
+ * This function checks if the given property name matches the GPIO property
+ * patterns, and returns the length of the name of the GPIO. The pattern is
+ * "*-<GPIO suffix>" or just "<GPIO suffix>".
+ *
+ * Returns:
+ * The length of the string before '-<GPIO suffix>' if it matches
+ * "*-<GPIO suffix>", or 0 if no name part, just the suffix, or
+ * -EINVAL if the string doesn't match the pattern.
+ */
+int gpio_get_property_name_length(const char *propname)
+{
+	const char *dash = strrchr(propname, '-');
+
+	for (const char *const *p = gpio_suffixes; *p; p++)
+		if (!strcmp(dash ? dash + 1 : propname, *p))
+			return dash ? dash - propname : 0;
+
+	return -EINVAL;
+}
+EXPORT_SYMBOL_GPL(gpio_get_property_name_length);
+
 /**
  * gpiod_count - return the number of GPIOs associated with a device / function
  *		or -ENOENT if no GPIO has been assigned to the requested function
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
index db2dfbae8edb..494dde33ca44 100644
--- a/include/linux/gpio/consumer.h
+++ b/include/linux/gpio/consumer.h
@@ -56,6 +56,8 @@ enum gpiod_flags {
 
 #ifdef CONFIG_GPIOLIB
 
+int gpio_get_property_name_length(const char *propname);
+
 /* Return the number of GPIOs associated with a device / function */
 int gpiod_count(struct device *dev, const char *con_id);
 
@@ -188,6 +190,11 @@ struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
 
 #include <asm/bug.h>
 
+static inline int gpio_get_property_name_length(const char *propname)
+{
+	return ERR_PTR(-ENOSYS);
+}
+
 static inline int gpiod_count(struct device *dev, const char *con_id)
 {
 	return 0;
-- 
2.46.0.469.g59c65b2a67-goog


  parent reply	other threads:[~2024-09-04  9:00 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-04  9:00 [PATCH v6 00/12] platform/chrome: Introduce DT hardware prober Chen-Yu Tsai
2024-09-04  9:00 ` [PATCH v6 01/12] of: dynamic: Add of_changeset_update_prop_string Chen-Yu Tsai
2024-09-04  9:00 ` [PATCH v6 02/12] of: base: Add for_each_child_of_node_with_prefix_scoped() Chen-Yu Tsai
2024-09-04 13:03   ` Andy Shevchenko
2024-09-04 13:43     ` Rob Herring
2024-09-04  9:00 ` [PATCH v6 03/12] regulator: Move OF-specific regulator lookup code to of_regulator.c Chen-Yu Tsai
2024-09-04 13:09   ` Andy Shevchenko
2024-09-04 13:14     ` Andy Shevchenko
2024-09-05  8:11       ` Chen-Yu Tsai
2024-09-05  8:29         ` Andy Shevchenko
2024-09-04  9:00 ` [PATCH v6 04/12] regulator: Split up _regulator_get() Chen-Yu Tsai
2024-09-04  9:00 ` [PATCH v6 05/12] regulator: Do pure DT regulator lookup in of_regulator_bulk_get_all() Chen-Yu Tsai
2024-09-04 13:13   ` Andy Shevchenko
2024-09-09  2:39     ` Chen-Yu Tsai
2024-09-04  9:00 ` Chen-Yu Tsai [this message]
2024-09-04 13:40   ` [PATCH v6 06/12] gpiolib: Add gpio_get_property_name_length() Andy Shevchenko
2024-09-09  2:45     ` Chen-Yu Tsai
2024-09-11  7:37       ` Chen-Yu Tsai
2024-09-11 14:39         ` Andy Shevchenko
2024-09-04  9:00 ` [PATCH v6 07/12] i2c: core: Remove extra space in Makefile Chen-Yu Tsai
2024-09-04 13:41   ` Andy Shevchenko
2024-09-04  9:00 ` [PATCH v6 08/12] i2c: Introduce OF component probe function Chen-Yu Tsai
2024-09-04 13:47   ` Andy Shevchenko
2024-09-09  3:02     ` Chen-Yu Tsai
2024-09-04 15:37   ` Rob Herring
2024-09-04  9:00 ` [PATCH v6 09/12] i2c: of-prober: Add regulator support Chen-Yu Tsai
2024-09-04 13:53   ` Andy Shevchenko
2024-09-04 22:57   ` Doug Anderson
2024-09-05 15:10     ` Chen-Yu Tsai
2024-09-05 18:14       ` Doug Anderson
2024-09-05 18:42         ` Mark Brown
2024-09-05 19:13         ` Andy Shevchenko
2024-09-06  3:45         ` Chen-Yu Tsai
2024-09-11  0:30           ` Doug Anderson
2024-09-11  6:12             ` Chen-Yu Tsai
2024-09-11 14:38             ` Andy Shevchenko
2024-09-11 14:49               ` Mark Brown
2024-09-04  9:00 ` [PATCH v6 10/12] i2c: of-prober: Add GPIO support Chen-Yu Tsai
2024-09-04 14:04   ` Andy Shevchenko
2024-09-04  9:00 ` [PATCH v6 11/12] platform/chrome: Introduce device tree hardware prober Chen-Yu Tsai
2024-09-04 10:08   ` Tzung-Bi Shih
2024-09-05  3:52     ` Chen-Yu Tsai
2024-09-05  4:34       ` Tzung-Bi Shih
2024-09-04  9:00 ` [PATCH v6 12/12] arm64: dts: mediatek: mt8173-elm-hana: Mark touchscreens and trackpads as fail Chen-Yu Tsai
2024-09-04 17:19 ` (subset) [PATCH v6 00/12] platform/chrome: Introduce DT hardware prober Mark Brown
2024-09-07 16:58 ` Wolfram Sang
2024-09-09  3:24   ` Chen-Yu Tsai

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=20240904090016.2841572-7-wenst@chromium.org \
    --to=wenst@chromium.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=bleung@chromium.org \
    --cc=broonie@kernel.org \
    --cc=chrome-platform@lists.linux.dev \
    --cc=devicetree@vger.kernel.org \
    --cc=dianders@chromium.org \
    --cc=jikos@kernel.org \
    --cc=johan@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=robh@kernel.org \
    --cc=saravanak@google.com \
    --cc=tzungbi@kernel.org \
    --cc=wsa@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 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).