From 46de573a77ea2e4f3130047227aff12d46f3418a Mon Sep 17 00:00:00 2001 From: seantywork Date: Fri, 14 Nov 2025 16:01:55 +0900 Subject: [PATCH] okay --- kdev-gpio/kdev_gpio.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/kdev-gpio/kdev_gpio.c b/kdev-gpio/kdev_gpio.c index d2a424a..0e20af7 100644 --- a/kdev-gpio/kdev_gpio.c +++ b/kdev-gpio/kdev_gpio.c @@ -16,10 +16,12 @@ #include #include #include +#include #define TARGET_NAME "GPIO17" static int __init kdev_gpio_init(void){ + int n = 0; int gpio_target = 0; struct device_node* dn = NULL; struct device* d = NULL; @@ -28,30 +30,30 @@ static int __init kdev_gpio_init(void){ printk("failed to find device node: gpio\n"); return -1; } - gpio_target = of_get_named_gpio(dn, TARGET_NAME, 0); - if(gpio_target == -EPROBE_DEFER){ - printk("EPROBE DEFER\n"); + d = container_of(&dn, struct device, of_node); + if(d == NULL){ + printk("failed to get device from node\n"); return -1; } - printk("gpio_target: %d\n", gpio_target); - if(gpio_is_valid(gpio_target)){ - d = container_of(&dn, struct device, of_node); - if(d == NULL){ - printk("failed to get device from node\n"); - return -1; + n = gpiod_count(d, NULL); + printk("gpio number: %d\n", n); + for(int i = 0; i < n; i++){ + gpio_target = of_get_named_gpio(dn, TARGET_NAME, i); + printk("gpio_target: %d\n", gpio_target); + if(gpio_target == -EPROBE_DEFER){ + printk("EPROBE DEFER\n"); + continue; } - // deprecated - //gpio_target = devm_gpio_request(d, gpio_target, TARGET_NAME); - if(gpio_target){ + if(gpio_is_valid(gpio_target)){ + // deprecated + //gpio_target = devm_gpio_request(d, gpio_target, TARGET_NAME); printk("SUCESS: gpio_target: %d\n", gpio_target); } else { - printk("failed to request gpio target\n"); - return -1; + printk("gpio is not valid\n"); + continue; } - } else { - printk("gpio is not valid\n"); - return -1; } + return 0; -- 2.43.0