Re: [PATCH V2 01/14] gpio: pca953x: Deduplicate the bank_shift

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux