This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM6412: kernel层,设置GPIO的高低电平,API函数是那个?

Part Number: AM6412

我需要在kernel 层,串口8250,收发的时候,控制GPIO0_39,设备树里已经配置。

使用gpio_set_value,gpio_direction_output ,不起作用。

端口号是按照cat /sys/kernel/debug/gpio 这里的数值计算的。  462  // GPIO0_39 423+39
在usr space也可以用echo 1 > /sys/class/gpio/gpio%d/value 等操作GPIO。
想问一下,在kernel层,使用那个API函数可以直接控制GPIO?

谢谢!

  • #include <linux/gpio/consumer.h>
    #include <linux/module.h>
    #include <linux/init.h>
    
    static struct gpio_desc *gpiod;
    
    static int __init gpio_control_init(void)
    {
        int ret;
    
        // 获取GPIO描述符
        gpiod = gpiod_get(&pdev->dev, "标记", GPIOD_OUT_LOW);
        if (IS_ERR(gpiod)) {
            pr_err("Failed to get GPIO\n");
            return PTR_ERR(gpiod);
        }
    
        // 设置GPIO为输出并设置低电平
        ret = gpiod_direction_output(gpiod, 0);
        if (ret < 0) {
            pr_err("Failed to set GPIO output\n");
            return ret;
        }
    
        // 设置GPIO高电平
        gpiod_set_value(gpiod, 1);
    
        return 0;
    }
    
    static void __exit gpio_control_exit(void)
    {
        gpiod_put(gpiod);
    }
    
    module_init(gpio_control_init);
    module_exit(gpio_control_exit);
    
    MODULE_LICENSE("GPL");
    

    这里有份示例,您可参考下