śr., 27 lis 2019 o 14:59 Marco Felsch <m.felsch@xxxxxxxxxxxxxx> napisał(a): > > Sometimes consumers needs to know the gpio-chip local gpio number of a > 'struct gpio_desc' for further configuration. This is often the case for > mfd devices. > We already have this support. It's just a matter of exporting it, so maybe adjust the commit message to not be confusing. That being said: I'm not really a fan of this - the whole idea of gpio descriptors was to make them opaque and their hardware offsets irrelevant. :( > Signed-off-by: Marco Felsch <m.felsch@xxxxxxxxxxxxxx> > --- > drivers/gpio/gpiolib.c | 6 ++++++ > include/linux/gpio/consumer.h | 10 ++++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index 104ed299d5ea..7709648313fc 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -4377,6 +4377,12 @@ int gpiod_count(struct device *dev, const char *con_id) > } > EXPORT_SYMBOL_GPL(gpiod_count); > > +int gpiod_to_offset(struct gpio_desc *desc) Maybe call it: gpiod_desc_to_offset()? > +{ > + return gpio_chip_hwgpio(desc); > +} > +EXPORT_SYMBOL_GPL(gpiod_to_offset); > + > /** > * gpiod_get - obtain a GPIO for a given GPIO function > * @dev: GPIO consumer, can be NULL for system-global GPIOs > diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h > index b70af921c614..e2178c3bf7fd 100644 > --- a/include/linux/gpio/consumer.h > +++ b/include/linux/gpio/consumer.h > @@ -60,6 +60,9 @@ enum gpiod_flags { > /* Return the number of GPIOs associated with a device / function */ > int gpiod_count(struct device *dev, const char *con_id); > > +/* Get the local chip offset from a global desc */ > +int gpiod_to_offset(struct gpio_desc *desc); > + > /* Acquire and dispose GPIOs */ > struct gpio_desc *__must_check gpiod_get(struct device *dev, > const char *con_id, > @@ -189,6 +192,13 @@ static inline int gpiod_count(struct device *dev, const char *con_id) > return 0; > } > > +static inline int gpiod_to_offset(struct gpio_desc *desc) > +{ > + /* GPIO can never have been requested */ > + WARN_ON(desc); > + return 0; > +} > + > static inline struct gpio_desc *__must_check gpiod_get(struct device *dev, > const char *con_id, > enum gpiod_flags flags) > -- > 2.20.1 >