On Fri, May 3, 2024 at 10:21 PM Doug Berger <opendmb@xxxxxxxxx> wrote: > > On 5/3/2024 1:25 AM, Linus Walleij wrote: > > Hi Dough, > > > > thanks for your patch! > Thanks for your review! > > > > > I'm a bit confused here: > "Communication is hard" and I may be confused about your confusion, but > hopefully we can work it out. > > > > > 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. > I think we are in agreement here. For extra clarity, I will add that in > my understanding pinspec.args[0] corresponds to [GPIO controller offset] > and pinspec.args[2] corresponds to [number of pins]. > > > > > 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. > The struct gpio_chip documentation in include/linux/gpio/driver.h says: > > > * @offset: when multiple gpio chips belong to the same device this > > * can be used as offset within the device so friendly names can > > * be properly assigned. > > It is my understanding that this value represents the offset of a > gpiochip relative to the GPIO controller device defined by the GPIO > controller node in device tree. This puts it in the same number space as > [GPIO controller offset]. I believe it was introduced for the specific > purpose of translating [GPIO controller offset] values into > Linux-specific offsets, which is why it is being reused for that purpose > in this patch. > > For GPIO Controllers that contain a single gpiochip the 'offset' member > is 0 and the device tree node offsets can be applied directly to the > gpiochip. However, when a GPIO Controller contains multiple gpiochips, > the device tree node offsets must be translated to each individual gpiochip. > > > > > I just don't get it. > > > > So NACK until I understand what is going on here. > > > > Yours, > > Linus Walleij > I hope it makes sense now, but if not please help me understand what I > may be missing. > > Thanks, > Doug > Linus, Please let me know if this is still a NAK, if so, I'll drop this series from my tree at least for this release. Bart