aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-uniphier.c
diff options
context:
space:
mode:
authorWilliam Breathitt Gray <[email protected]>2019-12-05 00:51:25 +0000
committerLinus Torvalds <[email protected]>2019-12-05 03:44:12 +0000
commit17b6038942e304c522d0688c2b29b1c630f1cfa6 (patch)
tree03f76ea4ec384f3a748e4c422f48fa5665a0efd8 /drivers/gpio/gpio-uniphier.c
parentgpio: pcie-idio-24: utilize for_each_set_clump8 macro (diff)
downloadkernel-17b6038942e304c522d0688c2b29b1c630f1cfa6.tar.gz
kernel-17b6038942e304c522d0688c2b29b1c630f1cfa6.zip
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. Link: http://lkml.kernel.org/r/5b24887e97f3093e4832d7c50a1093f537e91ab4.1570641097.git.vilhelm.gray@gmail.com Signed-off-by: William Breathitt Gray <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Arnd Bergmann <[email protected]> Cc: Bartosz Golaszewski <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: Linus Walleij <[email protected]> Cc: Lukas Wunner <[email protected]> Cc: Mathias Duckeck <[email protected]> Cc: Morten Hein Tiljeset <[email protected]> Cc: Phil Reid <[email protected]> Cc: Rasmus Villemoes <[email protected]> Cc: Sean Nyekjaer <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'drivers/gpio/gpio-uniphier.c')
-rw-r--r--drivers/gpio/gpio-uniphier.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/gpio/gpio-uniphier.c b/drivers/gpio/gpio-uniphier.c
index bd203e8fa58e..7ec97499b7f7 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 */
@@ -150,15 +147,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);