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 <bgolaszewski@xxxxxxxxxxxx> > --- > 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 (?); > @@ -762,14 +780,18 @@ static int pca953x_probe(struct i2c_client > *client, > */ > pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK); > > - if (chip->gpio_chip.ngpio <= 8) > + if (chip->gpio_chip.ngpio <= 8) { > chip->write_regs = pca953x_write_regs_8; > - else if (chip->gpio_chip.ngpio >= 24) > + chip->read_regs = pca953x_read_regs_8; > + } else if (chip->gpio_chip.ngpio >= 24) { > chip->write_regs = pca953x_write_regs_24; > - else > + chip->read_regs = pca953x_read_regs_24; > + } else { > chip->write_regs = chip->chip_type == PCA953X_TYPE ? > pca953x_write_regs_16 : > pca957x_write_regs_16; > + chip->read_regs = pca953x_read_regs_16; > + } Would you move {} to the previous patch? -- Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> Intel Finland Oy -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html