On Mon, May 12, 2025 at 04:08:35PM +0200, Thomas Richard wrote: > On 5/9/25 11:07, Geert Uytterhoeven wrote: > > On Tue, 6 May 2025 at 17:21, Thomas Richard <thomas.rich...@bootlin.com> > > wrote:
... > >> +int gpio_fwd_set_config(struct gpio_chip *chip, unsigned int offset, > >> + unsigned long config); > >> + > >> +int gpio_fwd_to_irq(struct gpio_chip *chip, unsigned int offset); > > > > I would expect all of these to take gpiochip_fwd pointers instead of > > gpio_chip pointers. What prevents you from passing a gpio_chip pointer > > that does not correspond to a gpiochip_fwd object, causing a crash? > > Indeed nothing prevents from passing gpio_chip pointer which does not > correspond to a gpiochip_fwd object. > And it is also a bit weird to pass a gpiochip_fwd pointer in some cases > (for example gpio_fwd_gpio_add()) and a gpio_chip in other cases. > > I can keep GPIO operations as is, and create exported wrappers which > take a gpiochip_fwd pointer as parameter, for example: > > int gpiochip_fwd_get_multiple(struct gpiochip_fwd *fwd, > unsigned long *mask, > unsigned long *bits) > { > struct gpio_chip *gc = gpiochip_fwd_get_gpiochip(fwd); > > return gpio_fwd_get_multiple_locked(chip, mask, bits); > } > EXPORT_SYMBOL_NS_GPL(gpiochip_fwd_get_multiple, "GPIO_FORWARDER"); > > So exported functions are gpiochip_fwd_*(). Sounds good for me. Let's wait for Geert's opinoin on this. -- With Best Regards, Andy Shevchenko