On Wed, Feb 14, 2024 at 5:24 PM Théo Lebrun <theo.lebrun@xxxxxxxxxxx> wrote: > > Read the "ngpios" device-tree property to determine the number of GPIOs > for a bank. If not available, fallback to NMK_GPIO_PER_CHIP ie 32 ie > the current behavior. > > The IP block always supports 32 GPIOs, but platforms can expose a lesser > amount. The Mobileye EyeQ5 is in this case; one bank is 29 GPIOs and > the other is 23. > > Signed-off-by: Théo Lebrun <theo.lebrun@xxxxxxxxxxx> > --- > drivers/gpio/gpio-nomadik.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpio/gpio-nomadik.c b/drivers/gpio/gpio-nomadik.c > index 5b1e3b3efcff..02b53c58adf7 100644 > --- a/drivers/gpio/gpio-nomadik.c > +++ b/drivers/gpio/gpio-nomadik.c > @@ -490,7 +490,7 @@ struct nmk_gpio_chip *nmk_gpio_populate_chip(struct device_node *np, > struct resource *res; > struct clk *clk; > void __iomem *base; > - u32 id; > + u32 id, ngpio; > > gpio_pdev = of_find_device_by_node(np); > if (!gpio_pdev) { > @@ -518,10 +518,15 @@ struct nmk_gpio_chip *nmk_gpio_populate_chip(struct device_node *np, > return ERR_PTR(-ENOMEM); > } > > + if (of_property_read_u32(np, "ngpios", &ngpio)) { As commented elsewhere - please try to use device_property_read_u32(). Bart > + ngpio = NMK_GPIO_PER_CHIP; > + dev_dbg(&pdev->dev, "populate: using default ngpio (%d)\n", ngpio); > + } > + > nmk_chip->bank = id; > chip = &nmk_chip->chip; > chip->base = -1; > - chip->ngpio = NMK_GPIO_PER_CHIP; > + chip->ngpio = ngpio; > chip->label = dev_name(&gpio_pdev->dev); > chip->parent = &gpio_pdev->dev; > > > -- > 2.43.1 >