2016-09-07 15:56 GMT+02:00 Andy Shevchenko <andriy.shevche...@linux.intel.com>: > On Wed, 2016-09-07 at 15:37 +0200, Bartosz Golaszewski wrote: >> Avoid the unnecessary if-else in pca953x_read_regs() by spltting the >> routine into smaller, specialized functions and calling the right one >> via a function pointer held in struct pca953x. >> >> Signed-off-by: Bartosz Golaszewski <bgolaszew...@baylibre.com> >> --- >> drivers/gpio/gpio-pca953x.c | 56 +++++++++++++++++++++++++++++++----- >> --------- >> 1 file changed, 39 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c >> index b3020ee..018bd18 100644 >> --- a/drivers/gpio/gpio-pca953x.c >> +++ b/drivers/gpio/gpio-pca953x.c >> @@ -135,6 +135,7 @@ struct pca953x_chip { >> const struct pca953x_offset *offset; >> >> int (*write_regs)(struct pca953x_chip *, int, u8 *); >> + int (*read_regs)(struct pca953x_chip *, int, u8 *); >> }; >> >> static int pca953x_read_single(struct pca953x_chip *chip, int reg, >> u32 *val, >> @@ -220,24 +221,41 @@ static int pca953x_write_regs(struct >> pca953x_chip *chip, int reg, u8 *val) >> return 0; >> } >> >> -static int pca953x_read_regs(struct pca953x_chip *chip, int reg, u8 >> *val) >> +static int pca953x_read_regs_8(struct pca953x_chip *chip, int reg, u8 >> *val) >> { >> int ret; >> >> - if (chip->gpio_chip.ngpio <= 8) { >> - ret = i2c_smbus_read_byte_data(chip->client, reg); >> - *val = ret; >> - } else if (chip->gpio_chip.ngpio >= 24) { >> - int bank_shift = fls((chip->gpio_chip.ngpio - 1) / >> BANK_SZ); >> + ret = i2c_smbus_read_byte_data(chip->client, reg); >> + *val = ret; > > It's probably of out scope of this series, but looks like > > if (ret < 0) > return ret; > > *val = ret; > return 0 (?); >
I'll look into it. Thanks, Bartosz