mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
c586aa8f48
commit
17b6038942
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue