On Wed, Sep 30, 2020 at 4:20 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > When driver has been converted to the bitmap API the non-bitmap functions > started behaving differently on 32-bit BE architectures since the bytes in > two consequent unsigned longs are in different order in comparison to byte > array. Hence if the chip had had more than 32 lines the memset() call over > it would have not set up upper lines correctly. > Although it's currently a theoretical case (no supported chips of this type > has 32+ lines), it's better to provide a clean code to avoid people thinking > this is okay and potentially producing not fully working things. > > Fixes: 35d13d94893f ("gpio: pca953x: convert to use bitmap API") > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > drivers/gpio/gpio-pca953x.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c > index 3f24cfabb1d7..6263a4d55f8b 100644 > --- a/drivers/gpio/gpio-pca953x.c > +++ b/drivers/gpio/gpio-pca953x.c > @@ -942,6 +942,7 @@ static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert) > static int device_pca957x_init(struct pca953x_chip *chip, u32 invert) > { > DECLARE_BITMAP(val, MAX_LINE); > + unsigned int i; > int ret; > > ret = device_pca95xx_init(chip, invert); > @@ -949,7 +950,9 @@ static int device_pca957x_init(struct pca953x_chip *chip, u32 invert) > goto out; > > /* To enable register 6, 7 to control pull up and pull down */ > - memset(val, 0x02, NBANK(chip)); > + for (i = 0; i < NBANK(chip); i++) > + bitmap_set_value8(val, 0x02, i * BANK_SZ); > + > ret = pca953x_write_regs(chip, PCA957X_BKEN, val); > if (ret) > goto out; > -- > 2.28.0 > Reviewed-by: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>