RE: [PATCH v4 1/2] gpio: gpio-mlxbf3: Add gpio driver support

From: Asmaa Mnebhi
Date: Thu Feb 23 2023 - 14:09:02 EST


> > > + npins = MLXBF3_GPIO_MAX_PINS_PER_BLOCK;
> > > + device_property_read_u32(dev, "npins", &npins);
> >
> > I don't see DT bindings for this property (being added in this series). Is it
> already established one?
> >
> > Ah that’s my bad. The property should be called "ngpios" like in the DT
> documentation. Will fix.
>
> And why do you need it? What's a corner case that the GPIO library doesn't
> handle yet?

We have 2 gpiochips, gpiochip 0 supports 32 gpio pins and gpiochip 1 supports only 24 pins.
If I remove the logic from gpio-mlxbf3.c, the gpiolib.c logic will correctly set the ngpios = 32 for gpiochip 0 but will wrongly set ngpios=32 for gpiogchip 1:

gpiochip_add_data_with_key {
[...]
ngpios = gc->ngpio;
if (ngpios == 0) {
ret = device_property_read_u32(&gdev->dev, "ngpios", &ngpios);
if (ret == -ENODATA)
/*
* -ENODATA means that there is no property found and
* we want to issue the error message to the user.
* Besides that, we want to return different error code
* to state that supplied value is not valid.
*/
ngpios = 0;
else if (ret)
goto err_free_dev_name;

gc->ngpio = ngpios;
}
[...]
}

bgpio_init {
gc->bgpio_bits = sz * 8;
gc->ngpio = gc->bgpio_bits;
}