On 12/13/2018 12:03 PM, Kieran Bingham wrote: > Hi Marek, Hi, > On 12/12/2018 01:39, Marek Vasut wrote: >> The bank_shift = fls(...) code was duplicated in the driver 5 times, >> pull it into separate function. >> > > This looks like a good fix-up to me. > > As it's just a single line, it might have warranted being a macro - but > I think the function helps a lot and is readable. The compiler will > likely inline it anyway. The compiler will inline it , and the bonus point is that you get type checking . There is no type checking with a macro. >> Signed-off-by: Marek Vasut <marek.vasut+renesas@xxxxxxxxx> > > Reviewed-by: Kieran Bingham <kieran.bingham+renesas@xxxxxxxxxxxxxxxx> > > >> Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> >> Cc: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx> >> --- >> V2: Replace bank_size with bank_shift in commit message >> --- >> drivers/gpio/gpio-pca953x.c | 18 +++++++++++------- >> 1 file changed, 11 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c >> index 540166443c34..afe6de4c48c4 100644 >> --- a/drivers/gpio/gpio-pca953x.c >> +++ b/drivers/gpio/gpio-pca953x.c >> @@ -159,11 +159,16 @@ struct pca953x_chip { >> int (*read_regs)(struct pca953x_chip *, int, u8 *); >> }; >> >> +static int pca953x_bank_shift(struct pca953x_chip *chip) >> +{ >> + return fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); >> +} >> + >> static int pca953x_read_single(struct pca953x_chip *chip, int reg, u32 *val, >> int off) >> { >> int ret; >> - int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); >> + int bank_shift = pca953x_bank_shift(chip); >> int offset = off / BANK_SZ; >> >> ret = i2c_smbus_read_byte_data(chip->client, >> @@ -182,7 +187,7 @@ static int pca953x_write_single(struct pca953x_chip *chip, int reg, u32 val, >> int off) >> { >> int ret; >> - int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); >> + int bank_shift = pca953x_bank_shift(chip); >> int offset = off / BANK_SZ; >> >> ret = i2c_smbus_write_byte_data(chip->client, >> @@ -221,7 +226,7 @@ static int pca957x_write_regs_16(struct pca953x_chip *chip, int reg, u8 *val) >> >> static int pca953x_write_regs_24(struct pca953x_chip *chip, int reg, u8 *val) >> { >> - int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); >> + int bank_shift = pca953x_bank_shift(chip); >> int addr = (reg & PCAL_GPIO_MASK) << bank_shift; >> int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1; >> >> @@ -265,7 +270,7 @@ static int pca953x_read_regs_16(struct pca953x_chip *chip, int reg, u8 *val) >> >> static int pca953x_read_regs_24(struct pca953x_chip *chip, int reg, u8 *val) >> { >> - int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); >> + int bank_shift = pca953x_bank_shift(chip); >> int addr = (reg & PCAL_GPIO_MASK) << bank_shift; >> int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1; >> >> @@ -402,13 +407,12 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc, >> unsigned long *mask, unsigned long *bits) >> { >> struct pca953x_chip *chip = gpiochip_get_data(gc); >> + int bank_shift = pca953x_bank_shift(chip); >> unsigned int bank_mask, bank_val; >> - int bank_shift, bank; >> + int bank; >> u8 reg_val[MAX_BANK]; >> int ret; >> >> - bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); >> - >> mutex_lock(&chip->i2c_lock); >> memcpy(reg_val, chip->reg_output, NBANK(chip)); >> for (bank = 0; bank < NBANK(chip); bank++) { >> > > -- Best regards, Marek Vasut