[PATCH] gpio-nct5104d: switch to dynamic gpio allocation

Robert Marko robimarko at gmail.com
Fri Oct 16 05:56:17 PDT 2026


On Fri, 16 Oct 2026 at 14:37, James Buren <braewoods+mgh at braewoods.net> wrote:
>
> The kernel complains about this module using a static GPIO base address
> when it is inserted, calling it a deprecated feature. This commit switches
> the GPIO base address to -1 for all instances of struct gpio_chip, which
> is what enables dynamically allocated GPIO base addresses, the feature
> intended to replace the static allocation that was previously used.
>
> Furthermore, each GPIO bank was also given a new label that allows a
> specific bank to be referenced via a unique label since the static base
> address is no longer usable to identify a specific bank. This brings this
> module into line with how the new GPIO subsystem exposes GPIO providers to
> userspace and the rest of the kernel.
>
> Consequently, this means that existing userspace software will break if
> they were using this module. The GPIO of this module can still be accessed
> via the ioctl APIs for gpiochip devices, and also the libgpiod userspace
> library and tools that were written for this new GPIO API.
>
> The legacy sysfs GPIO interface is still usable, as long as you look up the
> new dynamic GPIO base address that is exposed in this module's sysfs entries.
> All this can be found under /sys/class/gpio. You just need to look up the
> gpiochip you are using by its label, extract its base address, add your line
> number offset to it, and you can export it like was previously done.
>
> Signed-off-by: James Buren <braewoods+mgh at braewoods.net>

Hi,
No need to send this a patch, as you already have a PR open.

Regards,
Robert
> ---
>  package/kernel/gpio-nct5104d/Makefile            |  2 +-
>  package/kernel/gpio-nct5104d/src/gpio-nct5104d.c | 10 +++++-----
>  2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/package/kernel/gpio-nct5104d/Makefile b/package/kernel/gpio-nct5104d/Makefile
> index 9181a2bc5f..9059018f32 100644
> --- a/package/kernel/gpio-nct5104d/Makefile
> +++ b/package/kernel/gpio-nct5104d/Makefile
> @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
>  include $(INCLUDE_DIR)/kernel.mk
>
>  PKG_NAME:=gpio-nct5104d
> -PKG_RELEASE:=2
> +PKG_RELEASE:=3
>
>  PKG_MAINTAINER:=Florian Eckert <Eckert.Florian at googlemail.com>
>  PKG_LICENSE:=GPL-2.0
> diff --git a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c
> index 6dce1c2960..196ae95973 100644
> --- a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c
> +++ b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c
> @@ -129,16 +129,16 @@ static int nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
>  #else
>  static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value);
>  #endif
> -#define NCT5104D_GPIO_BANK(_base, _ngpio, _regbase)                    \
> +#define NCT5104D_GPIO_BANK(_ngpio, _regbase, _label)                   \
>         {                                                               \
>                 .chip = {                                               \
> -                       .label            = DRVNAME,                    \
> +                       .label            = _label,                     \
>                         .owner            = THIS_MODULE,                \
>                         .direction_input  = nct5104d_gpio_direction_in, \
>                         .get              = nct5104d_gpio_get,          \
>                         .direction_output = nct5104d_gpio_direction_out,        \
>                         .set              = nct5104d_gpio_set,          \
> -                       .base             = _base,                      \
> +                       .base             = -1,                         \
>                         .ngpio            = _ngpio,                     \
>                         .can_sleep        = true,                       \
>                 },                                                      \
> @@ -149,8 +149,8 @@ static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value
>  #define gpio_data(base) (base + 1)
>
>  static struct nct5104d_gpio_bank nct5104d_gpio_bank[] = {
> -       NCT5104D_GPIO_BANK(0 , 8, 0xE0),
> -       NCT5104D_GPIO_BANK(10, 8, 0xE4)
> +       NCT5104D_GPIO_BANK(8, 0xE0, DRVNAME "-0"),
> +       NCT5104D_GPIO_BANK(8, 0xE4, DRVNAME "-1")
>  };
>
>  static int nct5104d_gpio_direction_in(struct gpio_chip *chip, unsigned offset)
> --
> 2.43.0
>
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list