Hi Dough, thanks for your patch! I'm a bit confused here: On Wed, Apr 24, 2024 at 8:51 PM Doug Berger <opendmb@xxxxxxxxx> wrote: > + /* Ignore ranges outside of this GPIO chip */ > + if (pinspec.args[0] >= (chip->offset + chip->ngpio)) > + continue; > + if (pinspec.args[0] + pinspec.args[2] <= chip->offset) > + continue; Here pinspec.args[0] and [2] comes directly from the device tree. The documentation in Documentation/devicetree/bindings/gpio/gpio.txt says: > 2.2) Ordinary (numerical) GPIO ranges > ------------------------------------- > > It is useful to represent which GPIOs correspond to which pins on which pin > controllers. The gpio-ranges property described below represents this with > a discrete set of ranges mapping pins from the pin controller local number space > to pins in the GPIO controller local number space. > > The format is: <[pin controller phandle], [GPIO controller offset], > [pin controller offset], [number of pins]>; > > The GPIO controller offset pertains to the GPIO controller node containing the > range definition. So I do not understand how pinspec[0] and [2] can ever be compared to something involving chip->offset which is a Linux-specific offset. It rather looks like you are trying to accomodate the Linux numberspace in the ranges, which it was explicitly designed to avoid. I just don't get it. So NACK until I understand what is going on here. Yours, Linus Walleij