LKML Archive on lore.kernel.org
 help / color / Atom feed
From: Janusz Krzysztofik <jmkrzyszt@gmail.com>
To: Boris Brezillon <boris.brezillon@bootlin.com>,
	Linus Walleij <linus.walleij@linaro.org>
Cc: Jonathan Corbet <corbet@lwn.net>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Richard Weinberger <richard@nod.at>,
	David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Marek Vasut <marek.vasut@gmail.com>,
	Tony Lindgren <tony@atomide.com>,
	Aaro Koskinen <aaro.koskinen@iki.fi>,
	linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
	linux-mtd@lists.infradead.org, linux-doc@vger.kernel.org,
	linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
	Janusz Krzysztofik <jmkrzyszt@gmail.com>
Subject: [RFC PATCH v2 10/12] gpiolib: Introduce bitmap get/set array API extension
Date: Tue,  7 Aug 2018 00:29:16 +0200
Message-ID: <20180806222918.12644-11-jmkrzyszt@gmail.com> (raw)
In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com>

Certain GPIO array lookups may return arrays marked as applicable for
fast get/set array operations.  In order to make use of that
information, a new API extension which allows passing it to get/set
functions is needed.

Create a set of frontends to get/set array functions which accept
strict descriptor array structures returned by gpiod_get_array()
instead of arbitrary descriptor arrays.

Since the intended purpose of the new API extension is to speed up
get/set array operations, also replace array of integer values argument
with their bitmap representation, ready for being passed directly to
chip callback functions, without iterating them.

Applicability of the new API is limited to arrays not exceeding bit
length of type unsigned long (32 pins).

Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com>
---
 Documentation/driver-api/gpio/consumer.rst |  26 ++++
 drivers/gpio/gpiolib.c                     | 209 +++++++++++++++++++++++++++++
 include/linux/gpio/consumer.h              |  14 ++
 3 files changed, 249 insertions(+)

diff --git a/Documentation/driver-api/gpio/consumer.rst b/Documentation/driver-api/gpio/consumer.rst
index 38a990b5f3b6..bec4eab3b87c 100644
--- a/Documentation/driver-api/gpio/consumer.rst
+++ b/Documentation/driver-api/gpio/consumer.rst
@@ -383,6 +383,32 @@ or negative on error. Note the difference to gpiod_get_value(), which returns
 0 or 1 on success to convey the GPIO value. With the array functions, the GPIO
 values are stored in value_array rather than passed back as return value.
 
+Additionally, the following variants of the above functions exist which operate
+on bitmaps of values instead of arrays of values::
+
+	int gpiod_get_array_bitmap(struct gpio_descs *desc_array,
+				   unsigned long *bits);
+	int gpiod_get_raw_array_bitmap(struct gpio_descs *desc_array,
+				       unsigned long *bits);
+	int gpiod_get_array_bitmap_cansleep(struct gpio_desc *desc_array,
+					    unsigned long *bits);
+	int gpiod_get_raw_array_bitmap_cansleep(struct gpio_desc **desc_array,
+						unsigned long *bits)
+
+	void gpiod_set_array_bitmap(struct gpio_descs *desc_array,
+				    unsigned long *bits)
+	void gpiod_set_raw_array_bitmap(struct gpio_descs *desc_array,
+				        unsigned long *bitmap)
+	void gpiod_set_array_bitmap_cansleep(struct gpio_descs *desc_array,
+					     unsigned long *bits)
+	void gpiod_set_raw_array_bitmap_cansleep(struct gpio_descs *desc_array,
+						 unsigned long *bits)
+
+Unlike their counterparts, these functions don't accept arbitrary GPIO
+descriptor arrays, only those of type struct gpio_descs returned by
+gpiod_get_array() and its variants.  Supported array size is limited to the size
+of the bitmap, i.e., sizeof(unsigned long).
+
 
 GPIOs mapped to IRQs
 --------------------
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index c50bcec6e2d7..5b541364dee0 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -2836,6 +2836,27 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
 	return 0;
 }
 
+int gpiod_get_array_bitmap_complex(bool raw, bool can_sleep,
+				   struct gpio_descs *array,
+				   unsigned long *bits)
+{
+	int value_array[sizeof(*bits)];
+	int i;
+
+	if (array->ndescs > sizeof(*bits))
+		return -EINVAL;
+
+	i = gpiod_get_array_value_complex(raw, can_sleep, array->ndescs,
+					  array->desc, value_array);
+	if (i)
+		return i;
+
+	for (i = 0; i < array->ndescs; i++)
+		__assign_bit(i, bits, value_array[i]);
+
+	return 0;
+}
+
 /**
  * gpiod_get_raw_value() - return a gpio's raw value
  * @desc: gpio whose value will be returned
@@ -2929,6 +2950,50 @@ int gpiod_get_array_value(unsigned int array_size,
 }
 EXPORT_SYMBOL_GPL(gpiod_get_array_value);
 
+/**
+ * gpiod_get_raw_array_bitmap() - read raw values from an array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be read, obtained
+ *		with gpiod_get_array(),
+ * @bits: bitmap to store the read values
+ *
+ * Read the raw values of the GPIOs, i.e. the values of the physical lines
+ * without regard for their ACTIVE_LOW status.  Return 0 in case of success,
+ * else an error code.
+ *
+ * This function should be called from contexts where we cannot sleep,
+ * and it will complain if the GPIO chip functions potentially sleep.
+ */
+int gpiod_get_raw_array_bitmap(struct gpio_descs *desc_array,
+			       unsigned long *bits)
+{
+	if (!desc_array)
+		return -EINVAL;
+	return gpiod_get_array_bitmap_complex(true, false, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_get_raw_array_bitmap);
+
+/**
+ * gpiod_get_array_bitmap() - read values from an array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be read, obtained
+ *		with gpiod_get_array(),
+ * @bits: bitmap to store the read values
+ *
+ * Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
+ * into account.  Return 0 in case of success, else an error code.
+ *
+ * This function should be called from contexts where we cannot sleep,
+ * and it will complain if the GPIO chip functions potentially sleep.
+ */
+
+int gpiod_get_array_bitmap(struct gpio_descs *desc_array,
+			   unsigned long *bits)
+{
+	if (!desc_array)
+		return -EINVAL;
+	return gpiod_get_array_bitmap_complex(false, false, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_get_raw_array_bitmap);
+
 /*
  *  gpio_set_open_drain_value_commit() - Set the open drain gpio's value.
  * @desc: gpio descriptor whose state need to be set.
@@ -3081,6 +3146,23 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep,
 	return 0;
 }
 
+int gpiod_set_array_bitmap_complex(bool raw, bool can_sleep,
+				   struct gpio_descs *array,
+				   unsigned long *bits)
+{
+	int value_array[sizeof(*bits)];
+	int i;
+
+	if (array->ndescs > sizeof(*bits))
+		return -EINVAL;
+
+	for (i = 0; i < array->ndescs; i++)
+		value_array[i] = test_bit(i, bits);
+
+	return gpiod_set_array_value_complex(raw, can_sleep, array->ndescs,
+					     array->desc, value_array);
+}
+
 /**
  * gpiod_set_raw_value() - assign a gpio's raw value
  * @desc: gpio whose value will be assigned
@@ -3185,6 +3267,48 @@ void gpiod_set_array_value(unsigned int array_size,
 }
 EXPORT_SYMBOL_GPL(gpiod_set_array_value);
 
+/**
+ * gpiod_set_raw_array_bitmap() - assign values to an array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be assigned,
+ *		obtained with gpiod_get_array(),
+ * @bits: bitmap of values to assign
+ *
+ * Set the raw values of the GPIOs, i.e. the values of the physical lines
+ * without regard for their ACTIVE_LOW status.
+ *
+ * This function should be called from contexts where we cannot sleep, and will
+ * complain if the GPIO chip functions potentially sleep.
+ */
+int gpiod_set_raw_array_bitmap(struct gpio_descs *desc_array,
+			       unsigned long *bits)
+{
+	if (!desc_array)
+		return -EINVAL;
+	return gpiod_set_array_bitmap_complex(true, false, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_set_raw_array_bitmap);
+
+/**
+ * gpiod_set_array_bitmap() - assign values to an array of GPIOs
+ * @array_size: number of elements in the descriptor / value arrays
+ * @desc_array: array of GPIO descriptors whose values will be assigned
+ * @bits: bitmap of values to assign
+ *
+ * Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
+ * into account.
+ *
+ * This function should be called from contexts where we cannot sleep, and will
+ * complain if the GPIO chip functions potentially sleep.
+ */
+void gpiod_set_array_bitmap(struct gpio_descs *desc_array,
+			    unsigned long *bits)
+{
+	if (!desc_array)
+		return;
+	gpiod_set_array_bitmap_complex(false, false, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_set_array_bitmap);
+
 /**
  * gpiod_cansleep() - report whether gpio value access may sleep
  * @desc: gpio to check
@@ -3446,6 +3570,49 @@ int gpiod_get_array_value_cansleep(unsigned int array_size,
 }
 EXPORT_SYMBOL_GPL(gpiod_get_array_value_cansleep);
 
+/**
+ * gpiod_get_raw_array_bitmap_cansleep() - read raw values from array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be read, obtained
+ *		with gpiod_get_array(),
+ * @bits: bitmap to store the read values
+ *
+ * Read the raw values of the GPIOs, i.e. the values of the physical lines
+ * without regard for their ACTIVE_LOW status.  Return 0 in case of success,
+ * else an error code.
+ *
+ * This function is to be called from contexts that can sleep.
+ */
+int gpiod_get_raw_array_bitmap_cansleep(struct gpio_descs *desc_array,
+					unsigned long *bits)
+{
+	might_sleep_if(extra_checks);
+	if (!desc_array)
+		return -EINVAL;
+	return gpiod_get_array_bitmap_complex(true, true, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_get_raw_array_bitmap_cansleep);
+
+/**
+ * gpiod_get_array_bitmap_cansleep() - read values from an array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be read, obtained
+ *		with gpiod_get_array(),
+ * @bits: bitmap to store the read values
+ *
+ * Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
+ * into account.  Return 0 in case of success, else an error code.
+ *
+ * This function is to be called from contexts that can sleep.
+ */
+int gpiod_get_array_bitmap_cansleep(struct gpio_descs *desc_array,
+				    unsigned long *bits)
+{
+	might_sleep_if(extra_checks);
+	if (!desc_array)
+		return -EINVAL;
+	return gpiod_get_array_bitmap_complex(false, true, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_get_array_bitmap_cansleep);
+
 /**
  * gpiod_set_raw_value_cansleep() - assign a gpio's raw value
  * @desc: gpio whose value will be assigned
@@ -3545,6 +3712,48 @@ void gpiod_set_array_value_cansleep(unsigned int array_size,
 }
 EXPORT_SYMBOL_GPL(gpiod_set_array_value_cansleep);
 
+/**
+ * gpiod_set_raw_array_bitmap_cansleep() - assign values to an array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be assigned,
+ *		obtained with gpiod_get_array(),
+ * @bits: bitmap of values to assign
+ *
+ * Set the raw values of the GPIOs, i.e. the values of the physical lines
+ * without regard for their ACTIVE_LOW status.
+ *
+ * This function is to be called from contexts that can sleep.
+ */
+int gpiod_set_raw_array_bitmap_cansleep(struct gpio_descs *desc_array,
+					unsigned long *bits)
+{
+	might_sleep_if(extra_checks);
+	if (!desc_array)
+		return -EINVAL;
+	return gpiod_set_array_bitmap_complex(true, true, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_set_raw_array_bitmap_cansleep);
+
+/**
+ * gpiod_set_array_bitmap_cansleep() - assign values to an array of GPIOs
+ * @desc_array: array of GPIO descriptors whose values will be assigned,
+ *		obtained with gpiod_get_array(),
+ * @bits: bitmap of values to assign
+ *
+ * Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
+ * into account.
+ *
+ * This function is to be called from contexts that can sleep.
+ */
+void gpiod_set_array_bitmap_cansleep(struct gpio_descs *desc_array,
+				     unsigned long *bits)
+{
+	might_sleep_if(extra_checks);
+	if (!desc_array)
+		return;
+	gpiod_set_array_bitmap_complex(false, true, desc_array, bits);
+}
+EXPORT_SYMBOL_GPL(gpiod_set_array_bitmap_cansleep);
+
 /**
  * gpiod_add_lookup_table() - register GPIO device consumers
  * @table: table of consumers to register
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
index 862ee027a02f..1eabce4fc6c5 100644
--- a/include/linux/gpio/consumer.h
+++ b/include/linux/gpio/consumer.h
@@ -106,35 +106,49 @@ int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
 int gpiod_get_value(const struct gpio_desc *desc);
 int gpiod_get_array_value(unsigned int array_size,
 			  struct gpio_desc **desc_array, int *value_array);
+int gpiod_get_array_bitmap(struct gpio_descs *desc_array, unsigned long *bits);
 void gpiod_set_value(struct gpio_desc *desc, int value);
 void gpiod_set_array_value(unsigned int array_size,
 			   struct gpio_desc **desc_array, int *value_array);
+void gpiod_set_array_bitmap(struct gpio_descs *desc_array, unsigned long *bits);
 int gpiod_get_raw_value(const struct gpio_desc *desc);
 int gpiod_get_raw_array_value(unsigned int array_size,
 			      struct gpio_desc **desc_array,
 			      int *value_array);
+int gpiod_get_raw_array_bitmap(struct gpio_descs *desc_array,
+			       unsigned long *bits);
 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
 int gpiod_set_raw_array_value(unsigned int array_size,
 			       struct gpio_desc **desc_array,
 			       int *value_array);
+int gpiod_set_raw_array_bitmap(struct gpio_descs *desc_array,
+			       unsigned long *bits);
 
 /* Value get/set from sleeping context */
 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
 int gpiod_get_array_value_cansleep(unsigned int array_size,
 				   struct gpio_desc **desc_array,
 				   int *value_array);
+int gpiod_get_array_bitmap_cansleep(struct gpio_descs *desc_array,
+				    unsigned long *bits);
 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
 void gpiod_set_array_value_cansleep(unsigned int array_size,
 				    struct gpio_desc **desc_array,
 				    int *value_array);
+void gpiod_set_array_bitmap_cansleep(struct gpio_descs *desc_array,
+				     unsigned long *bits);
 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
 int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
 				       struct gpio_desc **desc_array,
 				       int *value_array);
+int gpiod_get_raw_array_bitmap_cansleep(struct gpio_descs *desc_array,
+					unsigned long *bits);
 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
 int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
 					struct gpio_desc **desc_array,
 					int *value_array);
+int gpiod_set_raw_array_bitmap_cansleep(struct gpio_descs *desc_array,
+					unsigned long *bits);
 
 int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
 int gpiod_set_transitory(struct gpio_desc *desc, bool transitory);
-- 
2.16.4


  parent reply index

Thread overview: 206+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-18 23:57 [RFC PATCH 0/8] mtd: rawnand: ams-delta: Use gpio-omap accessors for data I/O Janusz Krzysztofik
2018-07-18 23:57 ` [RFC PATCH 1/8] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik
2018-07-19  6:17   ` Boris Brezillon
2018-07-20 17:57     ` Janusz Krzysztofik
2018-07-18 23:57 ` [RFC PATCH 2/8] mtd: rawnand: ams-delta: Write protect device during probe Janusz Krzysztofik
2018-07-19  6:22   ` Boris Brezillon
2018-07-20 18:02     ` Janusz Krzysztofik
2018-07-18 23:57 ` [RFC PATCH 3/8] mtd: rawnand: ams-delta: Set port direction once per transfer Janusz Krzysztofik
2018-07-19  6:23   ` Boris Brezillon
2018-07-20 18:12     ` Janusz Krzysztofik
2018-07-20 19:29       ` Boris Brezillon
2018-07-18 23:57 ` [RFC PATCH 4/8] mtd: rawnand: ams-delta: Optimize pointer resolution on read/write Janusz Krzysztofik
2018-07-19  6:25   ` Boris Brezillon
2018-07-20 18:14     ` Janusz Krzysztofik
2018-07-20 19:29       ` Boris Brezillon
2018-07-18 23:57 ` [RFC PATCH 5/8] mtd: rawnand: ams-delta: Request data port GPIO resource Janusz Krzysztofik
2018-07-19  6:28   ` Boris Brezillon
2018-07-18 23:57 ` [RFC PATCH 6/8] gpio: omap: Add get/set_multiple() callbacks Janusz Krzysztofik
2018-07-29 20:29   ` Linus Walleij
2018-08-03  1:52     ` Grygorii Strashko
2018-08-03 16:47   ` Linus Walleij
2018-07-18 23:57 ` [RFC PATCH 7/8] mtd: rawnand: ams-delta: Check sanity of data GPIO resource Janusz Krzysztofik
2018-07-19  6:44   ` Boris Brezillon
2018-07-29 20:36     ` Linus Walleij
2018-07-29 21:16       ` Boris Brezillon
2018-07-29 20:33   ` Linus Walleij
2018-07-18 23:57 ` [RFC PATCH 8/8] mtd: rawnand: ams-delta: Use GPIO callbacks for data I/O Janusz Krzysztofik
2018-07-19  6:47   ` Boris Brezillon
2018-07-20 18:38     ` Janusz Krzysztofik
2018-07-20 19:48       ` Boris Brezillon
2018-07-19  6:15 ` [RFC PATCH 0/8] mtd: rawnand: ams-delta: Use gpio-omap accessors " Boris Brezillon
2018-07-20 17:55   ` Janusz Krzysztofik
2018-07-20 19:25     ` Boris Brezillon
2018-10-03 12:00   ` [RFC PATCH] mtd: rawnand: ams-delta: use ->exec_op() Janusz Krzysztofik
2018-10-03 12:30     ` Boris Brezillon
2018-10-03 13:55       ` Janusz Krzysztofik
2018-10-03 14:06         ` Boris Brezillon
2018-10-04 13:52           ` Janusz Krzysztofik
2018-10-04 13:59             ` Boris Brezillon
2018-10-04 14:11               ` Janusz Krzysztofik
2018-10-04 14:22                 ` Boris Brezillon
2018-10-12 20:41     ` [PATCH v2 1/2] mtd: rawnand: Provide helper for polling GPIO R/B pin Janusz Krzysztofik
2018-10-12 20:41       ` [PATCH v2 2/2] mtd: rawnand: ams-delta: Use ->exec_op() Janusz Krzysztofik
2018-10-13  6:05         ` Boris Brezillon
2018-10-13  5:55       ` [PATCH v2 1/2] mtd: rawnand: Provide helper for polling GPIO R/B pin Boris Brezillon
2018-10-15 19:41       ` [PATCH v3 1/3] " Janusz Krzysztofik
2018-10-15 19:41         ` [PATCH v3 2/3] mtd: rawnand: ams-delta: Stop using legacy .IOADDR_R/W Janusz Krzysztofik
2018-10-15 19:41         ` [PATCH v3 3/3] mtd: rawnand: ams-delta: Convert the driver to ->exec_op() Janusz Krzysztofik
2018-11-11 20:53         ` [PATCH v3 1/3] mtd: rawnand: Provide helper for polling GPIO R/B pin Miquel Raynal
2018-08-06 22:29 ` [RFC PATCH v2] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik
2018-08-06 22:29   ` [RFC PATCH v2 01/12] mtd: rawnand: ams-delta: Assign mtd->dev.parent, not mtd->owner Janusz Krzysztofik
2018-08-06 23:54     ` Marek Vasut
2018-08-07 21:55       ` Janusz Krzysztofik
2018-08-07 16:57     ` Boris Brezillon
2018-08-06 22:29   ` [RFC PATCH v2 02/12] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik
2018-08-07 16:59     ` Boris Brezillon
2018-08-06 22:29   ` [RFC PATCH v2 03/12] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Janusz Krzysztofik
2018-08-07 16:59     ` Boris Brezillon
2018-08-10 10:10     ` Linus Walleij
2018-08-06 22:29   ` [RFC PATCH v2 04/12] mtd: rawnand: ams-delta: request data port GPIO resource Janusz Krzysztofik
2018-08-07 17:00     ` Boris Brezillon
2018-08-10 10:11     ` Linus Walleij
2018-08-06 22:29   ` [RFC PATCH v2 05/12] mtd: rawnand: ams-delta: use GPIO API for data read/write Janusz Krzysztofik
2018-08-06 23:57     ` Marek Vasut
2018-08-07 17:06     ` Boris Brezillon
2018-08-07 17:11       ` Janusz Krzysztofik
2018-08-10 10:25     ` Linus Walleij
2018-08-06 22:29   ` [RFC PATCH v2 06/12] ARM: OMAP1: ams-delta: drop obsolete NAND resources Janusz Krzysztofik
2018-08-06 22:29   ` [RFC PATCH v2 07/12] mtd: rawnand: ams-delta: Set port direction once per transfer Janusz Krzysztofik
2018-08-07 18:57     ` Boris Brezillon
2018-08-08 16:55       ` Janusz Krzysztofik
2018-08-08 17:42         ` Miquel Raynal
2018-08-06 22:29   ` [RFC PATCH v2 08/12] mtd: rawnand: ams-delta: Simplify pointer resolution on read/write Janusz Krzysztofik
2018-08-07 17:02     ` Boris Brezillon
2018-08-07 17:15       ` Janusz Krzysztofik
2018-08-06 22:29   ` [RFC PATCH v2 09/12] gpiolib: Identify GPIO descriptor arrays with direct mapping Janusz Krzysztofik
2018-08-06 23:29     ` Linus Walleij
2018-08-07 16:50       ` Janusz Krzysztofik
2018-08-07 17:10         ` Boris Brezillon
2018-08-07 17:14     ` Boris Brezillon
2018-08-07 17:19       ` Janusz Krzysztofik
2018-08-06 22:29   ` Janusz Krzysztofik [this message]
2018-08-06 22:29   ` [RFC PATCH v2 11/12] mtd: rawnand: ams-delta: Use GPIO API bitmap extension Janusz Krzysztofik
2018-08-06 22:29   ` [RFC PATCH v2 12/12] gpiolib: Add fast processing path to bitmap API functions Janusz Krzysztofik
2018-08-06 23:43     ` Linus Walleij
2018-08-07 17:29       ` Janusz Krzysztofik
2018-08-07 17:47         ` Boris Brezillon
2018-08-10 10:55           ` Linus Walleij
2018-08-13 22:34   ` [PATCH v3 0/7] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik
2018-08-13 22:34     ` [PATCH v3 1/7] mtd: rawnand: ams-delta: show parent device in sysfs Janusz Krzysztofik
2018-08-13 22:34     ` [PATCH v3 2/7] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik
2018-08-13 22:34     ` [PATCH v3 3/7] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Janusz Krzysztofik
2018-08-13 22:34     ` [PATCH v3 4/7] mtd: rawnand: ams-delta: request data port GPIO resource Janusz Krzysztofik
2018-08-13 22:34     ` [PATCH v3 5/7] mtd: rawnand: ams-delta: Set port direction when needed Janusz Krzysztofik
2018-08-16  7:30       ` Boris Brezillon
2018-08-13 22:34     ` [PATCH v3 6/7] mtd: rawnand: ams-delta: Simplify pointer resolution on read/write Janusz Krzysztofik
2018-08-13 22:34     ` [PATCH v3 7/7] mtd: rawnand: ams-delta: use GPIO API for data I/O Janusz Krzysztofik
2018-08-16  7:39       ` Boris Brezillon
2018-08-20 21:39     ` [PATCH v4 0/3] mtd: rawnand: ams-delta: Cleanups and optimizations Janusz Krzysztofik
2018-08-20 21:39       ` [PATCH v4 1/3] mtd: rawnand: ams-delta: show parent device in sysfs Janusz Krzysztofik
2018-08-20 21:39       ` [PATCH v4 2/3] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik
2018-08-20 21:39       ` [PATCH v4 3/3] mtd: rawnand: ams-delta: Set port direction when needed Janusz Krzysztofik
2018-08-24 12:57         ` Boris Brezillon
2018-09-05  6:47       ` [PATCH v4 0/3] mtd: rawnand: ams-delta: Cleanups and optimizations Miquel Raynal
2018-09-05 20:53         ` Janusz Krzysztofik
2018-09-07 16:45           ` Tony Lindgren
2018-09-19  8:46             ` Miquel Raynal
2018-09-19 22:52       ` [PATCH v5 " Janusz Krzysztofik
2018-09-19 22:52         ` [PATCH v5 1/3] mtd: rawnand: ams-delta: show parent device in sysfs Janusz Krzysztofik
2018-09-19 22:52         ` [PATCH v5 2/3] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik
2018-09-19 22:52         ` [PATCH v5 3/3] mtd: rawnand: ams-delta: Set port direction when needed Janusz Krzysztofik
2018-09-23 11:35         ` [PATCH v5 0/3] mtd: rawnand: ams-delta: Cleanups and optimizations Miquel Raynal
2018-08-20 23:43     ` [RFC RFT PATCH 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-08-20 23:43       ` [RFC RFT PATCH v4 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-08-21  6:49         ` Peter Rosin
2018-08-21  6:52           ` Peter Rosin
2018-08-29 12:03         ` Miguel Ojeda
2018-08-29 18:01           ` Janusz Krzysztofik
2018-08-20 23:43       ` [RFC RFT PATCH v4 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-08-20 23:43       ` [RFC RFT PATCH v4 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-08-20 23:43       ` [RFC RFT PATCH v4 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-08-29  9:06       ` [RFC RFT PATCH 0/4] gpiolib: speed up GPIO array processing Linus Walleij
2018-08-29 18:16         ` Janusz Krzysztofik
2018-08-29 10:19       ` Ulf Hansson
2018-08-29 20:48       ` [PATH v5 " Janusz Krzysztofik
2018-08-29 20:48         ` [PATCH v5 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-08-30  4:30           ` Peter Rosin
2018-08-30  7:40           ` Geert Uytterhoeven
2018-08-30 11:10           ` Miguel Ojeda
2018-08-30 15:35             ` David Laight
2018-09-02 10:19             ` Janusz Krzysztofik
2018-08-31  9:14           ` Linus Walleij
2018-08-29 20:48         ` [PATCH v5 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-08-29 20:48         ` [PATCH v5 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-08-29 20:49         ` [PATCH v5 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-08-31 22:56         ` [PATH v6 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-08-31 22:56           ` [PATCH v6 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-09-01  0:23             ` Peter Rosin
2018-09-04 15:28             ` kbuild test robot
2018-09-04 15:28             ` kbuild test robot
2018-08-31 22:56           ` [PATCH v6 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-08-31 22:56           ` [PATCH v6 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-09-04 15:27             ` kbuild test robot
2018-08-31 22:56           ` [PATCH v6 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-09-02 12:01           ` [PATCH v7 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-09-02 12:01             ` [PATCH v7 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-09-02 13:21               ` Lukas Wunner
2018-09-03  4:31               ` Matthew Wilcox
2018-09-03 14:24                 ` Geert Uytterhoeven
2018-09-03 15:07               ` Geert Uytterhoeven
2018-09-04 15:29               ` kbuild test robot
2018-09-05  6:46               ` kbuild test robot
2018-09-02 12:01             ` [PATCH v7 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-09-02 12:01             ` [PATCH v7 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-09-03 14:21               ` Geert Uytterhoeven
2018-09-04 15:23               ` kbuild test robot
2018-09-05  7:11               ` kbuild test robot
2018-09-02 12:01             ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
     [not found]               ` <CGME20180920101151eucas1p221f5a1715b8556bb9d99bf08fe09ce6f@eucas1p2.samsung.com>
2018-09-20 10:11                 ` Marek Szyprowski
2018-09-20 15:48                   ` Janusz Krzysztofik
2018-09-20 16:21                     ` Janusz Krzysztofik
2018-09-21  8:18                       ` Marek Szyprowski
2018-09-21 10:51                         ` Janusz Krzysztofik
2018-09-21 11:26                           ` Janusz Krzysztofik
2018-09-21 14:14                           ` Marek Szyprowski
2018-09-23 10:43                             ` Janusz Krzysztofik
2018-09-23 23:53                               ` [PATCH 0/2] gpiolib: Fix issues introduced by fast bitmap processing path Janusz Krzysztofik
2018-09-23 23:53                                 ` [PATCH 1/2] gpiolib: Fix missing updates of bitmap index Janusz Krzysztofik
2018-09-24  8:11                                   ` Linus Walleij
2018-09-29 12:20                                   ` [PATCH] gpiolib: Fix incorrect use of find_next_zero_bit() Janusz Krzysztofik
2018-10-01  6:46                                     ` Marek Szyprowski
2018-10-01  9:37                                     ` Linus Walleij
2018-09-23 23:53                                 ` [PATCH 2/2] gpiolib: Fix array members of same chip processed separately Janusz Krzysztofik
2018-09-24  8:13                                   ` Linus Walleij
2018-09-24  9:43                                 ` [PATCH 0/2] gpiolib: Fix issues introduced by fast bitmap processing path Marek Szyprowski
2018-09-24 11:08                                   ` Janusz Krzysztofik
2018-09-24 11:38                                     ` Marek Szyprowski
2018-09-24 14:18                                       ` Janusz Krzysztofik
2018-09-25 19:24                                         ` [PATCH] mmc: pwrseq_simple: Fix incorrect handling of GPIO bitmap Janusz Krzysztofik
2018-09-26  7:50                                           ` Linus Walleij
2018-09-26  8:14                                           ` Marek Szyprowski
     [not found]                                           ` <7a4906d9-ffb1-f2af-07e7-d5815dcd0d8c@samsung.com>
2018-09-26  8:27                                             ` Marek Szyprowski
2018-10-12 19:09                                           ` [RFT PATCH] " Janusz Krzysztofik
2018-10-15  8:32                                             ` Marek Szyprowski
2018-10-15 10:29                                             ` Ulf Hansson
2018-10-15 14:27                                             ` Linus Walleij
2018-09-20 18:05                     ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Dan Carpenter
2018-09-20 15:49                   ` Linus Walleij
2018-09-05 21:50             ` [PATCH v8 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik
2018-09-05 21:50               ` [PATCH v8 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik
2018-09-05 21:50               ` [PATCH v8 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik
2018-09-05 21:50               ` [PATCH v8 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik
2018-09-05 21:50               ` [PATCH v8 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik
2018-09-13  9:22               ` [PATCH v8 0/4] gpiolib: speed up GPIO array processing Linus Walleij
2018-09-19 18:08                 ` Linus Walleij
2018-11-21 11:08     ` Subject: [PATCH v4 0/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik
2018-11-21 11:08       ` [PATCH v4 1/4] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Janusz Krzysztofik
2018-11-23 17:02         ` Tony Lindgren
2018-11-21 11:08       ` [PATCH v4 2/4] mtd: rawnand: ams-delta: Request data port GPIO resource Janusz Krzysztofik
2018-11-21 11:08       ` [PATCH v4 3/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik
2018-11-21 14:53         ` Boris Brezillon
2018-11-21 11:08       ` [PATCH v4 4/4] ARM: OMAP1: ams-delta: Drop obsolete NAND resources Janusz Krzysztofik
2018-11-21 14:56       ` Subject: [PATCH v4 0/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Boris Brezillon
2018-11-23 17:03         ` Tony Lindgren
2018-12-07  8:04           ` Miquel Raynal
2018-12-07 16:10             ` Tony Lindgren

Reply instructions:

You may reply publically 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=20180806222918.12644-11-jmkrzyszt@gmail.com \
    --to=jmkrzyszt@gmail.com \
    --cc=aaro.koskinen@iki.fi \
    --cc=boris.brezillon@bootlin.com \
    --cc=computersforpeace@gmail.com \
    --cc=corbet@lwn.net \
    --cc=dwmw2@infradead.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=marek.vasut@gmail.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=richard@nod.at \
    --cc=tony@atomide.com \
    /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

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org
	public-inbox-index lkml

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git