[v13,10/11] gpio: 74x164: Utilize the for_each_set_clump8 macro
diff mbox series

Message ID 645f16f1d1ad3f215e34a82f457e06725fcf8f56.1553661964.git.vilhelm.gray@gmail.com
State New
Headers show
Series
  • Introduce the for_each_set_clump8 macro
Related show

Commit Message

William Breathitt Gray March 27, 2019, 5:02 a.m. UTC
Replace verbose implementation in set_multiple callback with
for_each_set_clump8 macro to simplify code and improve clarity.

Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Phil Reid <preid@electromag.com.au>
Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com>
---
 drivers/gpio/gpio-74x164.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

Comments

Andy Shevchenko March 27, 2019, 12:33 p.m. UTC | #1
On Wed, Mar 27, 2019 at 02:02:39PM +0900, William Breathitt Gray wrote:
> Replace verbose implementation in set_multiple callback with
> for_each_set_clump8 macro to simplify code and improve clarity.

> +	for_each_set_clump8(offset, bankmask, mask, chip->registers * 8) {

> +		bank = (chip->registers - 1) - (offset / 8);

Excessive parens, but it's minor.

> +		bitmask = bitmap_get_value8(bits, offset) & bankmask;
>  
>  		chip->buffer[bank] &= ~bankmask;
> +		chip->buffer[bank] |= bitmask;
>  	}
William Breathitt Gray March 28, 2019, 4:40 a.m. UTC | #2
On Wed, Mar 27, 2019 at 02:33:14PM +0200, Andy Shevchenko wrote:
> On Wed, Mar 27, 2019 at 02:02:39PM +0900, William Breathitt Gray wrote:
> > Replace verbose implementation in set_multiple callback with
> > for_each_set_clump8 macro to simplify code and improve clarity.
> 
> > +	for_each_set_clump8(offset, bankmask, mask, chip->registers * 8) {
> 
> > +		bank = (chip->registers - 1) - (offset / 8);
> 
> Excessive parens, but it's minor.

Fair point, this could do without parens around (chip->registers - 1).

Since this and renaming 'idx' to 'index' in find_bit.c are such a minor
changes, I'll wait first to see if something else comes up to be fixed
in this review. If so, I'll add these changes to the next version of
this patchset.

William Breathitt Gray

> 
> > +		bitmask = bitmap_get_value8(bits, offset) & bankmask;
> >  
> >  		chip->buffer[bank] &= ~bankmask;
> > +		chip->buffer[bank] |= bitmask;
> >  	}
> 
> -- 
> With Best Regards,
> Andy Shevchenko
> 
>
Andy Shevchenko March 28, 2019, 9:11 a.m. UTC | #3
On Thu, Mar 28, 2019 at 01:40:04PM +0900, William Breathitt Gray wrote:
> On Wed, Mar 27, 2019 at 02:33:14PM +0200, Andy Shevchenko wrote:
> > On Wed, Mar 27, 2019 at 02:02:39PM +0900, William Breathitt Gray wrote:
> > > Replace verbose implementation in set_multiple callback with
> > > for_each_set_clump8 macro to simplify code and improve clarity.
> > 
> > > +	for_each_set_clump8(offset, bankmask, mask, chip->registers * 8) {
> > 
> > > +		bank = (chip->registers - 1) - (offset / 8);
> > 
> > Excessive parens, but it's minor.
> 
> Fair point, this could do without parens around (chip->registers - 1).

And around division too.

> Since this and renaming 'idx' to 'index' in find_bit.c are such a minor
> changes, I'll wait first to see if something else comes up to be fixed
> in this review. If so, I'll add these changes to the next version of
> this patchset.

It seems inline proposal would going to be implemented.

Patch
diff mbox series

diff --git a/drivers/gpio/gpio-74x164.c b/drivers/gpio/gpio-74x164.c
index fb7b620763a2..0bbf1162bb31 100644
--- a/drivers/gpio/gpio-74x164.c
+++ b/drivers/gpio/gpio-74x164.c
@@ -9,6 +9,7 @@ 
  *  published by the Free Software Foundation.
  */
 
+#include <linux/bitops.h>
 #include <linux/init.h>
 #include <linux/mutex.h>
 #include <linux/spi/spi.h>
@@ -75,20 +76,18 @@  static void gen_74x164_set_multiple(struct gpio_chip *gc, unsigned long *mask,
 				    unsigned long *bits)
 {
 	struct gen_74x164_chip *chip = gpiochip_get_data(gc);
-	unsigned int i, idx, shift;
-	u8 bank, bankmask;
+	unsigned long offset;
+	unsigned long bankmask;
+	size_t bank;
+	unsigned long bitmask;
 
 	mutex_lock(&chip->lock);
-	for (i = 0, bank = chip->registers - 1; i < chip->registers;
-	     i++, bank--) {
-		idx = i / sizeof(*mask);
-		shift = i % sizeof(*mask) * BITS_PER_BYTE;
-		bankmask = mask[idx] >> shift;
-		if (!bankmask)
-			continue;
+	for_each_set_clump8(offset, bankmask, mask, chip->registers * 8) {
+		bank = (chip->registers - 1) - (offset / 8);
+		bitmask = bitmap_get_value8(bits, offset) & bankmask;
 
 		chip->buffer[bank] &= ~bankmask;
-		chip->buffer[bank] |= bankmask & (bits[idx] >> shift);
+		chip->buffer[bank] |= bitmask;
 	}
 	__gen_74x164_write_config(chip);
 	mutex_unlock(&chip->lock);