On Fri Jul 11, 2025 at 8:06 PM CEST, Linus Walleij wrote: > On Fri, Jul 11, 2025 at 7:45 PM Andrew Lunn wrote: > > On Fri, Jul 11, 2025 at 07:43:13PM +0200, Linus Walleij wrote: > > > On Wed, Jul 9, 2025 at 5:09 PM Andrew Lunn wrote: > > > > > > > This is not my area, so i will deffer to the GPIO > > > > Maintainers. However, it is not clear to me what get_direction() > > > > should return. > > > > > > This callback should return the current direction as set up > > > in the hardware. > > > > > > A major usecase is that this is called when the gpiochip is > > > registered to read out all the current directions of the GPIO > > > lines, so the kernel has a clear idea of the state of the > > > hardware. > > > > > > Calling this should ideally result in a read of the status from > > > a hardware register. > > > > O.K, so completely different to what is proposed in this patch. > > > > Maybe you can suggest a better name. > > If the hardware only supports one direction, then .get_direction() > should return that direction. > > What the patch does is to > read the direction from the hardware and use that in the > set_direction() callback, as if all regmapped hardware in the > world had fixed direction, that's wrong. > > I'd just add something custom in gpio-regmap if this is > something reoccuring in regmapped GPIO drivers. > > bool is_fixed_direction(struct gpio_regmap *gpio, unsigned int offset) > > or so? > > Then the core can use is_fixed_direction() together > with gpio_get_direction() to check if it can do > a certain set_direction(). > > Pseudocode: > > mydir = get_direction(line) > if (is_fixed_direction(line) && (mydir != requested_dir) > return -ERROR; You don't need a .is_fixed_direction(). You can deduce that if only .get_direction() is set in the gpio-regmap config. mydir = get_direction(line) if (!config->set_direction && mydir != requested_dir) return -ERROR; That or either Andrew's idea of setting a bitmap within the gpio-regmap config which already tells the gpio-regmap core and then amend gpio_regmap_get_direction() to return that fixed direction if that bitmap is not NULL. I'm fine with both. -michael