From e40fe43e492733959a0723df01fe327a57ad9418 Mon Sep 17 00:00:00 2001 From: coolsnowwolf Date: Wed, 30 Oct 2024 15:03:38 +0800 Subject: [PATCH] gpio-nct5104d: fix kernel 6.x build --- package/kernel/gpio-nct5104d/Makefile | 13 ++++- package/kernel/gpio-nct5104d/src/Kconfig | 5 ++ package/kernel/gpio-nct5104d/src/Makefile | 2 +- .../kernel/gpio-nct5104d/src/gpio-nct5104d.c | 53 ++++--------------- 4 files changed, 26 insertions(+), 47 deletions(-) create mode 100644 package/kernel/gpio-nct5104d/src/Kconfig diff --git a/package/kernel/gpio-nct5104d/Makefile b/package/kernel/gpio-nct5104d/Makefile index 7f9a9fd2c..9181a2bc5 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:=1 +PKG_RELEASE:=2 PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPL-2.0 @@ -17,7 +17,7 @@ PKG_LICENSE:=GPL-2.0 include $(INCLUDE_DIR)/package.mk define KernelPackage/gpio-nct5104d - SUBMENU:=Other modules + SUBMENU:=GPIO support TITLE:= GPIO nct5104d support DEPENDS:= @GPIO_SUPPORT @TARGET_x86 FILES:=$(PKG_BUILD_DIR)/gpio-nct5104d.ko @@ -29,9 +29,18 @@ define KernelPackage/gpio-nct5104d/description Support for GPIO functionality of NCT5104D super I/O chip. endef +EXTRA_KCONFIG:= \ + CONFIG_GPIO_NCT5104D=m + +EXTRA_CFLAGS:= \ + $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \ + $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \ + define Build/Compile $(KERNEL_MAKE) \ M="$(PKG_BUILD_DIR)" \ + EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ + $(EXTRA_KCONFIG) \ modules endef diff --git a/package/kernel/gpio-nct5104d/src/Kconfig b/package/kernel/gpio-nct5104d/src/Kconfig new file mode 100644 index 000000000..cf658e29c --- /dev/null +++ b/package/kernel/gpio-nct5104d/src/Kconfig @@ -0,0 +1,5 @@ +config GPIO_NCT5104D + tristate "NCT5104D GPIO support" + depends on GENERIC_GPIO + help + Say yes here to support GPIO functionality of NCT5104D super I/O chip diff --git a/package/kernel/gpio-nct5104d/src/Makefile b/package/kernel/gpio-nct5104d/src/Makefile index 9845c68c3..6f0375a34 100644 --- a/package/kernel/gpio-nct5104d/src/Makefile +++ b/package/kernel/gpio-nct5104d/src/Makefile @@ -1 +1 @@ -obj-m += gpio-nct5104d.o +obj-${CONFIG_GPIO_NCT5104D} += gpio-nct5104d.o diff --git a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c index 8f180edd3..e31a94b5c 100644 --- a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c +++ b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include @@ -153,8 +153,7 @@ static struct nct5104d_gpio_bank nct5104d_gpio_bank[] = { static int nct5104d_gpio_direction_in(struct gpio_chip *chip, unsigned offset) { int err; - struct nct5104d_gpio_bank *bank = - container_of(chip, struct nct5104d_gpio_bank, chip); + struct nct5104d_gpio_bank *bank = gpiochip_get_data(chip); struct nct5104d_sio *sio = bank->data->sio; u8 dir; @@ -175,8 +174,7 @@ static int nct5104d_gpio_direction_in(struct gpio_chip *chip, unsigned offset) static int nct5104d_gpio_get(struct gpio_chip *chip, unsigned offset) { int err; - struct nct5104d_gpio_bank *bank = - container_of(chip, struct nct5104d_gpio_bank, chip); + struct nct5104d_gpio_bank *bank = gpiochip_get_data(chip); struct nct5104d_sio *sio = bank->data->sio; u8 data; @@ -196,8 +194,7 @@ static int nct5104d_gpio_direction_out(struct gpio_chip *chip, unsigned offset, int value) { int err; - struct nct5104d_gpio_bank *bank = - container_of(chip, struct nct5104d_gpio_bank, chip); + struct nct5104d_gpio_bank *bank = gpiochip_get_data(chip); struct nct5104d_sio *sio = bank->data->sio; u8 dir, data_out; @@ -225,8 +222,7 @@ static int nct5104d_gpio_direction_out(struct gpio_chip *chip, static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value) { int err; - struct nct5104d_gpio_bank *bank = - container_of(chip, struct nct5104d_gpio_bank, chip); + struct nct5104d_gpio_bank *bank = gpiochip_get_data(chip); struct nct5104d_sio *sio = bank->data->sio; u8 data_out; @@ -270,8 +266,6 @@ static int nct5104d_gpio_probe(struct platform_device *pdev) } data->sio = sio; - platform_set_drvdata(pdev, data); - /* For each GPIO bank, register a GPIO chip. */ for (i = 0; i < data->nr_bank; i++) { struct nct5104d_gpio_bank *bank = &data->bank[i]; @@ -279,36 +273,10 @@ static int nct5104d_gpio_probe(struct platform_device *pdev) bank->chip.parent = &pdev->dev; bank->data = data; - err = gpiochip_add(&bank->chip); - if (err) { - dev_err(&pdev->dev, - "Failed to register gpiochip %d: %d\n", - i, err); - goto err_gpiochip; - } - } - - return 0; - -err_gpiochip: - for (i = i - 1; i >= 0; i--) { - struct nct5104d_gpio_bank *bank = &data->bank[i]; - - gpiochip_remove (&bank->chip); - } - - return err; -} - -static int nct5104d_gpio_remove(struct platform_device *pdev) -{ - int i; - struct nct5104d_gpio_data *data = platform_get_drvdata(pdev); - - for (i = 0; i < data->nr_bank; i++) { - struct nct5104d_gpio_bank *bank = &data->bank[i]; - - gpiochip_remove (&bank->chip); + err = devm_gpiochip_add_data(&pdev->dev, &bank->chip, bank); + if (err) + return dev_err_probe(&pdev->dev, err, + "Failed to register gpiochip %d", err); } return 0; @@ -402,15 +370,12 @@ static struct platform_driver nct5104d_gpio_driver = { .name = DRVNAME, }, .probe = nct5104d_gpio_probe, - .remove = nct5104d_gpio_remove, }; static int __init nct5104d_gpio_init(void) { int err; struct nct5104d_sio sio; - const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR); - const char *board_name = dmi_get_system_info(DMI_BOARD_NAME); if (nct5104d_find(0x2e, &sio) && nct5104d_find(0x4e, &sio))