From: seantywork Date: Sun, 16 Nov 2025 08:03:19 +0000 (+0000) Subject: find gpio by base + number X-Git-Url: https://git.feebdaed.xyz/?a=commitdiff_plain;h=37ad889c726d4beab43cfc14234f7a75106c7384;p=linuxyz.git find gpio by base + number --- diff --git a/README.md b/README.md index 61707c0..6f3ad8a 100644 --- a/README.md +++ b/README.md @@ -11684,7 +11684,37 @@ sudo irsend SEND_ONCE LG_AC AC_ON ``` +# DTS DT DTB +```shell +# gpiosk.dts +/dts-v1/; +/plugin/; + +/ { + compatible = "brcm,bcm2711"; + + fragment@0 { + target = <&gpio>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&gpiosk_pins_in>; + + gpiosk_pins_in: gpiosk_pins_in { + brcm,pins = <17>; /* GPIO17 */ + brcm,function = <0>; /* Input */ + }; + }; + }; +}; + +``` + +```shell +# compile +dtc -@ -I dts -O dtb -o gpiosk.dtb gpiosk.dts + +``` # JETSON XAVIER NX diff --git a/kdev-gpio/.gitignore b/kdev-gpio/.gitignore new file mode 100644 index 0000000..53492d4 --- /dev/null +++ b/kdev-gpio/.gitignore @@ -0,0 +1 @@ +*.dtb \ No newline at end of file diff --git a/kdev-gpio/kdev_gpio.c b/kdev-gpio/kdev_gpio.c index 06bc9f5..1b1fce3 100644 --- a/kdev-gpio/kdev_gpio.c +++ b/kdev-gpio/kdev_gpio.c @@ -12,61 +12,35 @@ #include #include -#include -#include -#include -#include -#include +#include #include -#define TARGET_NAME "GPIO17" +#define TARGET_LABEL "pinctrl-bcm2711" +#define TARGET_PIN_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; - struct gpio_desc* gd = NULL; - dn = of_find_node_by_name(NULL, "fe200000.gpio"); - if(dn == NULL){ - printk("failed to find device node: gpio\n"); - return -1; - } - d = container_of(&dn, struct device, of_node); - if(IS_ERR(d)){ - printk("failed to get device from node\n"); - return -1; - } - gd = gpiod_get(d, NULL, 0); - if(IS_ERR(gd)){ - printk("failed to get desc\n"); - return -1; - } - printk("got desc\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; - } - 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("gpio is not valid\n"); - continue; +static int _gc_match(struct gpio_chip *gc, const void *data){ + int n = 0; + if(gc->label != NULL){ + printk("kdev_gpio: label: %s\n", gc->label); + if(strcmp(gc->label, TARGET_LABEL) == 0){ + printk("base: %d\n", gc->base); + printk("ngpio: %d\n", gc->ngpio); } + } else { + printk("kdev_gpio: label: not available\n"); } - */ + + return 0; +} +static int __init kdev_gpio_init(void){ + gpio_device_find(NULL, _gc_match); + return 0; } static void __exit kdev_gpio_exit(void){ - printk("bye\n"); + printk("kdev_gpio: bye\n"); } module_init(kdev_gpio_init);