Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <vilhelm.gray@gmail.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukas Wunner <lukas@wunner.de>
Cc: Mathias Duckeck <m.duckeck@kunbus.de>
Cc: Morten Hein Tiljeset <morten.tiljeset@prevas.dk>
Cc: Phil Reid <preid@electromag.com.au>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Sean Nyekjaer <sean.nyekjaer@prevas.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

William Breathitt Gray and committed by
Linus Torvalds
17b60389 c586aa8f

+3 -10
+3 -10
drivers/gpio/gpio-uniphier.c
··· 15 15 #include <linux/spinlock.h> 16 16 #include <dt-bindings/gpio/uniphier-gpio.h> 17 17 18 - #define UNIPHIER_GPIO_BANK_MASK \ 19 - GENMASK((UNIPHIER_GPIO_LINES_PER_BANK) - 1, 0) 20 - 21 18 #define UNIPHIER_GPIO_IRQ_MAX_NUM 24 22 19 23 20 #define UNIPHIER_GPIO_PORT_DATA 0x0 /* data */ ··· 147 150 static void uniphier_gpio_set_multiple(struct gpio_chip *chip, 148 151 unsigned long *mask, unsigned long *bits) 149 152 { 150 - unsigned int bank, shift, bank_mask, bank_bits; 151 - int i; 153 + unsigned long i, bank, bank_mask, bank_bits; 152 154 153 - for (i = 0; i < chip->ngpio; i += UNIPHIER_GPIO_LINES_PER_BANK) { 155 + for_each_set_clump8(i, bank_mask, mask, chip->ngpio) { 154 156 bank = i / UNIPHIER_GPIO_LINES_PER_BANK; 155 - shift = i % BITS_PER_LONG; 156 - bank_mask = (mask[BIT_WORD(i)] >> shift) & 157 - UNIPHIER_GPIO_BANK_MASK; 158 - bank_bits = bits[BIT_WORD(i)] >> shift; 157 + bank_bits = bitmap_get_value8(bits, i); 159 158 160 159 uniphier_gpio_bank_write(chip, bank, UNIPHIER_GPIO_PORT_DATA, 161 160 bank_mask, bank_bits);