lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 10 Oct 2019 16:16:55 +0300 From: Andy Shevchenko <andriy.shevchenko@...ux.intel.com> To: William Breathitt Gray <vilhelm.gray@...il.com> Cc: linus.walleij@...aro.org, bgolaszewski@...libre.com, akpm@...ux-foundation.org, linux-gpio@...r.kernel.org, linux-kernel@...r.kernel.org, linux-arch@...r.kernel.org, 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 Subject: Re: [PATCH v18 14/14] gpio: pca953x: Utilize the for_each_set_clump8 macro On Wed, Oct 09, 2019 at 01:14:50PM -0400, William Breathitt Gray wrote: > Replace verbose implementation in set_multiple callback with > for_each_set_clump8 macro to simplify code and improve clarity. Tested-by: Andy Shevchenko <andriy.shevchenko@...ux.intel.com> > Cc: Phil Reid <preid@...ctromag.com.au> > Signed-off-by: William Breathitt Gray <vilhelm.gray@...il.com> > --- > drivers/gpio/gpio-pca953x.c | 17 +++++++---------- > 1 file changed, 7 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c > index de5d1383f28d..10b669b8f27d 100644 > --- a/drivers/gpio/gpio-pca953x.c > +++ b/drivers/gpio/gpio-pca953x.c > @@ -10,6 +10,7 @@ > > #include <linux/acpi.h> > #include <linux/bits.h> > +#include <linux/bitops.h> > #include <linux/gpio/driver.h> > #include <linux/gpio/consumer.h> > #include <linux/i2c.h> > @@ -456,7 +457,8 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc, > unsigned long *mask, unsigned long *bits) > { > struct pca953x_chip *chip = gpiochip_get_data(gc); > - unsigned int bank_mask, bank_val; > + unsigned long offset; > + unsigned long bank_mask; > int bank; > u8 reg_val[MAX_BANK]; > int ret; > @@ -466,15 +468,10 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc, > if (ret) > goto exit; > > - for (bank = 0; bank < NBANK(chip); bank++) { > - bank_mask = mask[bank / sizeof(*mask)] >> > - ((bank % sizeof(*mask)) * 8); > - if (bank_mask) { > - bank_val = bits[bank / sizeof(*bits)] >> > - ((bank % sizeof(*bits)) * 8); > - bank_val &= bank_mask; > - reg_val[bank] = (reg_val[bank] & ~bank_mask) | bank_val; > - } > + for_each_set_clump8(offset, bank_mask, mask, gc->ngpio) { > + bank = offset / 8; > + reg_val[bank] &= ~bank_mask; > + reg_val[bank] |= bitmap_get_value8(bits, offset) & bank_mask; > } > > pca953x_write_regs(chip, chip->regs->output, reg_val); > -- > 2.23.0 > -- With Best Regards, Andy Shevchenko
Powered by blists - more mailing lists