From: Janusz Krzysztofik <jmkrzyszt@gmail.com> To: Linus Walleij <linus.walleij@linaro.org> Cc: "Jonathan Corbet" <corbet@lwn.net>, "Miguel Ojeda Sandonis" <miguel.ojeda.sandonis@gmail.com>, "Peter Korsgaard" <peter.korsgaard@barco.com>, "Peter Rosin" <peda@axentia.se>, "Ulf Hansson" <ulf.hansson@linaro.org>, "Andrew Lunn" <andrew@lunn.ch>, "Florian Fainelli" <f.fainelli@gmail.com>, "David S. Miller" <davem@davemloft.net>, "Dominik Brodowski" <linux@dominikbrodowski.net>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, "Kishon Vijay Abraham I" <kishon@ti.com>, "Lars-Peter Clausen" <lars@metafoo.de>, "Michael Hennerich" <Michael.Hennerich@analog.com>, "Jonathan Cameron" <jic23@kernel.org>, "Hartmut Knaack" <knaack.h@gmx.de>, "Peter Meerwald-Stadler" <pmeerw@pmeerw.net>, "Jiri Slaby" <jslaby@suse.com>, "Willy Tarreau" <w@1wt.eu>, "Geert Uytterhoeven" <geert@linux-m68k.org>, linux-doc@vger.kernel.org, linux-i2c@vger.kernel.org, linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-iio@vger.kernel.org, devel@driverdev.osuosl.org, linux-serial@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, "Janusz Krzysztofik" <jmkrzyszt@gmail.com>, "Sebastien Bourdelin" <sebastien.bourdelin@savoirfairelinux.com>, "Lukas Wunner" <lukas@wunner.de>, "Rojhalat Ibrahim" <imr@rtschenk.de>, "Russell King" <rmk+kernel@armlinux.org.uk>, "Tony Lindgren" <tony@atomide.com>, "Yegor Yefremov" <yegorslists@googlemail.com>, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> Subject: [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Date: Sun, 2 Sep 2018 14:01:44 +0200 Message-ID: <20180902120144.6855-5-jmkrzyszt@gmail.com> (raw) In-Reply-To: <20180902120144.6855-1-jmkrzyszt@gmail.com> Certain GPIO descriptor arrays returned by gpio_get_array() may contain information on direct mapping of array members to pins of a single GPIO chip in hardware order. In such cases, bitmaps of values can be passed directly from/to the chip's .get/set_multiple() callbacks without wasting time on iterations. Add respective code to gpiod_get/set_array_bitmap_complex() functions. Pins not applicable for fast path are processed as before, skipping over the 'fast' ones. Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> --- Documentation/driver-api/gpio/board.rst | 15 ++++++ Documentation/driver-api/gpio/consumer.rst | 8 +++ drivers/gpio/gpiolib.c | 87 ++++++++++++++++++++++++++++-- 3 files changed, 105 insertions(+), 5 deletions(-) diff --git a/Documentation/driver-api/gpio/board.rst b/Documentation/driver-api/gpio/board.rst index 2c112553df84..c66821e033c2 100644 --- a/Documentation/driver-api/gpio/board.rst +++ b/Documentation/driver-api/gpio/board.rst @@ -193,3 +193,18 @@ And the table can be added to the board code as follows:: The line will be hogged as soon as the gpiochip is created or - in case the chip was created earlier - when the hog table is registered. + +Arrays of pins +-------------- +In addition to requesting pins belonging to a function one by one, a device may +also request an array of pins assigned to the function. The way those pins are +mapped to the device determines if the array qualifies for fast bitmap +processing. If yes, a bitmap is passed over get/set array functions directly +between a caller and a respective .get/set_multiple() callback of a GPIO chip. + +In order to qualify for fast bitmap processing, the pin mapping must meet the +following requirements: +- it must belong to the same chip as other 'fast' pins of the function, +- its index within the function must match its hardware number within the chip. + +Open drain and open source pins are excluded from fast bitmap output processing. diff --git a/Documentation/driver-api/gpio/consumer.rst b/Documentation/driver-api/gpio/consumer.rst index 0afd95a12b10..cf992e5ab976 100644 --- a/Documentation/driver-api/gpio/consumer.rst +++ b/Documentation/driver-api/gpio/consumer.rst @@ -388,6 +388,14 @@ array_info should be set to NULL. Note that for optimal performance GPIOs belonging to the same chip should be contiguous within the array of descriptors. +Still better performance may be achieved if array indexes of the descriptors +match hardware pin numbers of a single chip. If an array passed to a get/set +array function matches the one obtained from gpiod_get_array() and array_info +associated with the array is also passed, the function may take a fast bitmap +processing path, passing the value_bitmap argument directly to the respective +.get/set_multiple() callback of the chip. That allows for utilization of GPIO +banks as data I/O ports without much loss of performance. + The return value of gpiod_get_array_value() and its variants is 0 on success 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 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index cef6ee31fe05..b9d083fb13ee 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -2789,7 +2789,36 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep, struct gpio_array *array_info, unsigned long *value_bitmap) { - int i = 0; + int err, i = 0; + + /* + * Validate array_info against desc_array and its size. + * It should immediately follow desc_array if both + * have been obtained from the same gpiod_get_array() call. + */ + if (array_info && array_info->desc == desc_array && + array_size <= array_info->size && + (void *)array_info == desc_array + array_info->size) { + if (!can_sleep) + WARN_ON(array_info->chip->can_sleep); + + err = gpio_chip_get_multiple(array_info->chip, + array_info->get_mask, + value_bitmap); + if (err) + return err; + + if (!raw && !bitmap_empty(array_info->invert_mask, array_size)) + bitmap_xor(value_bitmap, value_bitmap, + array_info->invert_mask, array_size); + + if (bitmap_full(array_info->get_mask, array_size)) + return 0; + + i = find_first_zero_bit(array_info->get_mask, array_size); + } else { + array_info = NULL; + } while (i < array_size) { struct gpio_chip *chip = desc_array[i]->gdev->chip; @@ -2820,7 +2849,12 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep, int hwgpio = gpio_chip_hwgpio(desc); __set_bit(hwgpio, mask); - i++; + + if (array_info) + find_next_zero_bit(array_info->get_mask, + array_size, i); + else + i++; } while ((i < array_size) && (desc_array[i]->gdev->chip == chip)); @@ -2831,7 +2865,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep, return ret; } - for (j = first; j < i; j++) { + for (j = first; j < i; ) { const struct gpio_desc *desc = desc_array[j]; int hwgpio = gpio_chip_hwgpio(desc); int value = test_bit(hwgpio, bits); @@ -2840,6 +2874,11 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep, value = !value; __assign_bit(j, value_bitmap, value); trace_gpio_value(desc_to_gpio(desc), 1, value); + + if (array_info) + find_next_zero_bit(array_info->get_mask, i, j); + else + j++; } if (mask != fastpath) @@ -3041,6 +3080,32 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep, { int i = 0; + /* + * Validate array_info against desc_array and its size. + * It should immediately follow desc_array if both + * have been obtained from the same gpiod_get_array() call. + */ + if (array_info && array_info->desc == desc_array && + array_size <= array_info->size && + (void *)array_info == desc_array + array_info->size) { + if (!can_sleep) + WARN_ON(array_info->chip->can_sleep); + + if (!raw && !bitmap_empty(array_info->invert_mask, array_size)) + bitmap_xor(value_bitmap, value_bitmap, + array_info->invert_mask, array_size); + + gpio_chip_set_multiple(array_info->chip, array_info->set_mask, + value_bitmap); + + if (bitmap_full(array_info->set_mask, array_size)) + return 0; + + i = find_first_zero_bit(array_info->set_mask, array_size); + } else { + array_info = NULL; + } + while (i < array_size) { struct gpio_chip *chip = desc_array[i]->gdev->chip; unsigned long fastpath[2 * BITS_TO_LONGS(FASTPATH_NGPIO)]; @@ -3068,7 +3133,14 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep, int hwgpio = gpio_chip_hwgpio(desc); int value = test_bit(i, value_bitmap); - if (!raw && test_bit(FLAG_ACTIVE_LOW, &desc->flags)) + /* + * Pins applicable for fast input but not for + * fast output processing may have been already + * inverted inside the fast path, skip them. + */ + if (!raw && !(array_info && + test_bit(i, array_info->invert_mask)) && + test_bit(FLAG_ACTIVE_LOW, &desc->flags)) value = !value; trace_gpio_value(desc_to_gpio(desc), 0, value); /* @@ -3087,7 +3159,12 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep, __clear_bit(hwgpio, bits); count++; } - i++; + + if (array_info) + find_next_zero_bit(array_info->set_mask, + array_size, i); + else + i++; } while ((i < array_size) && (desc_array[i]->gdev->chip == chip)); /* push collected bits to outputs */ -- 2.16.4
next prev 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 ` [RFC PATCH v2 10/12] gpiolib: Introduce bitmap get/set array API extension Janusz Krzysztofik 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 ` Janusz Krzysztofik [this message] [not found] ` <CGME20180920101151eucas1p221f5a1715b8556bb9d99bf08fe09ce6f@eucas1p2.samsung.com> 2018-09-20 10:11 ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array 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=20180902120144.6855-5-jmkrzyszt@gmail.com \ --to=jmkrzyszt@gmail.com \ --cc=Michael.Hennerich@analog.com \ --cc=andrew@lunn.ch \ --cc=corbet@lwn.net \ --cc=davem@davemloft.net \ --cc=devel@driverdev.osuosl.org \ --cc=f.fainelli@gmail.com \ --cc=geert@linux-m68k.org \ --cc=gregkh@linuxfoundation.org \ --cc=imr@rtschenk.de \ --cc=jic23@kernel.org \ --cc=jslaby@suse.com \ --cc=kishon@ti.com \ --cc=knaack.h@gmx.de \ --cc=lars@metafoo.de \ --cc=linus.walleij@linaro.org \ --cc=linux-doc@vger.kernel.org \ --cc=linux-gpio@vger.kernel.org \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-iio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mmc@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=linux@dominikbrodowski.net \ --cc=lukas@wunner.de \ --cc=miguel.ojeda.sandonis@gmail.com \ --cc=netdev@vger.kernel.org \ --cc=peda@axentia.se \ --cc=peter.korsgaard@barco.com \ --cc=pmeerw@pmeerw.net \ --cc=rmk+kernel@armlinux.org.uk \ --cc=sebastien.bourdelin@savoirfairelinux.com \ --cc=tony@atomide.com \ --cc=u.kleine-koenig@pengutronix.de \ --cc=ulf.hansson@linaro.org \ --cc=w@1wt.eu \ --cc=yegorslists@googlemail.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