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. 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) +{ + 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