[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <5b24887e97f3093e4832d7c50a1093f537e91ab4.1570641097.git.vilhelm.gray@gmail.com>
Date: Wed, 9 Oct 2019 13:14:45 -0400
From: William Breathitt Gray <vilhelm.gray@...il.com>
To: linus.walleij@...aro.org, bgolaszewski@...libre.com,
akpm@...ux-foundation.org
Cc: linux-gpio@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arch@...r.kernel.org, andriy.shevchenko@...ux.intel.com,
linux@...musvillemoes.dk, yamada.masahiro@...ionext.com,
linux-arm-kernel@...ts.infradead.org, linux-pm@...r.kernel.org,
geert@...ux-m68k.org, preid@...ctromag.com.au, lukas@...ner.de,
William Breathitt Gray <vilhelm.gray@...il.com>
Subject: [PATCH v18 09/14] gpio: uniphier: Utilize for_each_set_clump8 macro
Replace verbose implementation in set_multiple callback with
for_each_set_clump8 macro to simplify code and improve clarity. An
improvement in this case is that banks that are not masked will now be
skipped.
Cc: Masahiro Yamada <yamada.masahiro@...ionext.com>
Signed-off-by: William Breathitt Gray <vilhelm.gray@...il.com>
---
drivers/gpio/gpio-uniphier.c | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-uniphier.c b/drivers/gpio/gpio-uniphier.c
index 93cdcc41e9fb..3db9c41b7954 100644
--- a/drivers/gpio/gpio-uniphier.c
+++ b/drivers/gpio/gpio-uniphier.c
@@ -15,9 +15,6 @@
#include <linux/spinlock.h>
#include <dt-bindings/gpio/uniphier-gpio.h>
-#define UNIPHIER_GPIO_BANK_MASK \
- GENMASK((UNIPHIER_GPIO_LINES_PER_BANK) - 1, 0)
-
#define UNIPHIER_GPIO_IRQ_MAX_NUM 24
#define UNIPHIER_GPIO_PORT_DATA 0x0 /* data */
@@ -147,15 +144,11 @@ static void uniphier_gpio_set(struct gpio_chip *chip,
static void uniphier_gpio_set_multiple(struct gpio_chip *chip,
unsigned long *mask, unsigned long *bits)
{
- unsigned int bank, shift, bank_mask, bank_bits;
- int i;
+ unsigned long i, bank, bank_mask, bank_bits;
- for (i = 0; i < chip->ngpio; i += UNIPHIER_GPIO_LINES_PER_BANK) {
+ for_each_set_clump8(i, bank_mask, mask, chip->ngpio) {
bank = i / UNIPHIER_GPIO_LINES_PER_BANK;
- shift = i % BITS_PER_LONG;
- bank_mask = (mask[BIT_WORD(i)] >> shift) &
- UNIPHIER_GPIO_BANK_MASK;
- bank_bits = bits[BIT_WORD(i)] >> shift;
+ bank_bits = bitmap_get_value8(bits, i);
uniphier_gpio_bank_write(chip, bank, UNIPHIER_GPIO_PORT_DATA,
bank_mask, bank_bits);
--
2.23.0
Powered by blists - more mailing lists