On Fri, Feb 24, 2023 at 9:20 PM Asmaa Mnebhi <asmaa@xxxxxxxxxx> wrote: > > bgpio_init() uses "sz" argument to populate ngpio, which is not > accurate. Instead, read the "ngpios" property from the DT and if it > doesn't exist, use the "sz" argument. With this change, drivers no > longer need to overwrite the ngpio variable after calling bgpio_init. ... > + ret = device_property_present(dev, "ngpios"); > + if (!ret) ret is not of the correct type for this call. Why not simply if (!device_property_present(dev, "ngpios")) > + gc->ngpio = gc->bgpio_bits; ... The problem with this change is that you need to provide bgpio_bits. So, if there is a property when bgpio_bits will be updated? That's said what you need is something like this: 1) split "ngpios" handling code (lines ~718-744 in gpiolib.c) into a helper function that is available inside drivers/gpio; 2) use it in bgpio_init() by overriding bgpio_bits. ret = new_helper(); if (ret) gc->bgpio_bits = sz * 8; else ... = gc->ngpio; -- With Best Regards, Andy Shevchenko