|
@@ -222,9 +222,11 @@ 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 addr = (reg & PCAL_GPIO_MASK) << bank_shift;
|
|
|
+ int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1;
|
|
|
|
|
|
return i2c_smbus_write_i2c_block_data(chip->client,
|
|
|
- (reg << bank_shift) | REG_ADDR_AI,
|
|
|
+ pinctrl | addr | REG_ADDR_AI,
|
|
|
NBANK(chip), val);
|
|
|
}
|
|
|
|
|
@@ -264,9 +266,11 @@ 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 addr = (reg & PCAL_GPIO_MASK) << bank_shift;
|
|
|
+ int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1;
|
|
|
|
|
|
return i2c_smbus_read_i2c_block_data(chip->client,
|
|
|
- (reg << bank_shift) | REG_ADDR_AI,
|
|
|
+ pinctrl | addr | REG_ADDR_AI,
|
|
|
NBANK(chip), val);
|
|
|
}
|
|
|
|