Hi, I'm having a problem with getting and freeing GPIOs. Please have a look at this simple module: -----------------------------8<-------------------------------- #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/gpio.h>
#define DRV_NAME "GPIO Test" #define PFX DRV_NAME ": " #define GPIO_TEST_PIN 12 static int __init mymodule_init(void) { int err; printk (KERN_INFO PFX "requesting GPIO %d\n", GPIO_TEST_PIN); err = gpio_request(GPIO_TEST_PIN, "GPIO TEST"); if (err ) { printk (KERN_ERR PFX "didn't get %d\n", GPIO_TEST_PIN); return -1; } return 0; } static void __exit mymodule_exit(void) { printk (KERN_INFO PFX "freeing GPIO %d\n", GPIO_TEST_PIN); gpio_free(GPIO_TEST_PIN); return; } module_init(mymodule_init); module_exit(mymodule_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Mister X"); ----------------------------->8-------------------------------- It just request a GPIO and freeing it at module unload. Here is the according dmesg: (Carambola 1 with RT3052 using actual trunk) insmod gpio-test [ 3814.150000] GPIO Test: requesting GPIO 12 [ 3814.150000] rt2880-pinmux pinctrl.1: request pin 12 (io12) for pio:12 rmmod gpio-test [ 3825.000000] GPIO Test: freeing GPIO 12 insmod gpio-test # again [ 3832.250000] GPIO Test: requesting GPIO 12 [ 3832.250000] rt2880-pinmux pinctrl.1: request pin 12 (io12) for pio:12 [ 3832.250000] rt2880-pinmux pinctrl.1: pin io12 already requested by pio:12; cannot claim for pio:12 [ 3832.260000] rt2880-pinmux pinctrl.1: pin-12 (pio:12) status -22 [ 3832.270000] GPIO Test: didn't get 12 Why is gpio_free() not enough ? Is there a missing peace in GPIO pinctrl glue ? Any hint is greatly welcome ... Regards Gerd _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel