Message ID | 20240214-mbly-gpio-v1-17-f88c0ccf372b@bootlin.com |
---|---|
State | New |
Headers | show |
Series | Rework Nomadik GPIO to add Mobileye EyeQ5 support | expand |
On Wed, Feb 14, 2024 at 5:24 PM Théo Lebrun <theo.lebrun@bootlin.com> 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@bootlin.com> > --- > 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 >
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)) { + 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;
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@bootlin.com> --- drivers/gpio/gpio-nomadik.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)