On Thu, Apr 4, 2019 at 4:22 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:> > On Thu, Apr 04, 2019 at 11:52:20AM +0300, Mika Westerberg wrote: > > On Thu, Apr 04, 2019 at 11:37:35AM +0300, Andy Shevchenko wrote: > > > On Wed, Apr 03, 2019 at 09:36:24PM +0300, Mika Westerberg wrote: > > > > On Tue, Apr 02, 2019 at 01:57:32PM +0300, Andy Shevchenko wrote: > > > > > Most of the code inside GPIO library is using enum gpio_lookup_flags. > > > > > Some of the function still operate with unsigned long. > > > > > > > > > > In order to be more consistent and better type checking, convert > > > > > gpiod_hog() and gpiod_configure_flags() to use enum gpio_lookup_flags > > > > > instead of unsigned long. > > > > > > > > > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > > > > > --- > > > > > drivers/gpio/gpiolib.c | 4 ++-- > > > > > drivers/gpio/gpiolib.h | 4 ++-- > > > > > 2 files changed, 4 insertions(+), 4 deletions(-) > > > > > > > > > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > > > > > index a3fe41a2c6c0..ea0d38164b06 100644 > > > > > --- a/drivers/gpio/gpiolib.c > > > > > +++ b/drivers/gpio/gpiolib.c > > > > > @@ -4078,7 +4078,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_optional); > > > > > * occurred while trying to acquire the GPIO. > > > > > */ > > > > > int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id, > > > > > - unsigned long lflags, enum gpiod_flags dflags) > > > > > + enum gpio_lookup_flags lflags, enum gpiod_flags dflags) > > > > > > > > I actually think unsigned long here is more correct because enum is > > > > supposed to present a single enumerated value and here we pass several of > > > > them as bitmask. > > > > > > There are more functions that are using enum to keep bit mask, for example, > > > gpiochip_request_own_desc(). Are you suggesting to change them all to unsigned > > > long? > > > > No just wanted to mention it. For example enum gpiod_flags used by > > gpiochip_request_own_desc() encodes bitmask as part of the enumeration > > value which is fine but enum gpio_lookup_flags on the other hand does > > not. So for the latter I would prefer to use unsigned int/long instead. > > Ah, okay, so, basically using enum gpio_lookup_flags as a parameter to > functions doesn't feel right. The enum gpio_lookup_flags is essentially something I came up with for <linux/gpio/machine.h> to use used by struct gpiod_lookup. It looks like it does (not just 0, 1, 2, 3... ) because it mirrors the defines for e.g. <linux/gpio.h> so if we can get rid of that legacy file we can change the values for enum gpio_lookup_flags. Maybe it was stupid of me. We could change the enum gpio_lookup_flags to just #define GPIO_ACTIVE_HIGH 0 #define GPIO_ACTIVE_LOW BIT(0) etc. And then just have some unsigned long in struct gpiod_lookup. What do you folks think makes most sense? Yours, Linus Walleij