作者:angela-gugupb_269 | 来源:互联网 | 2023-10-10 17:46
GPIO使用初探
刚接触linux驱动中gpio方面的时候,常用的是gpio-legacy.c里面的接口,初始化gpio就像下面这样, 然后就可以调用get/set gpio的接口了。
这时候就发现,初始化一个gpio,居然这么麻烦,要是通过dts进行配置,更麻烦了,就像下面这样。
而如果要同时通过设备树读取,初始化几个gpio,更麻烦,首先调用of_property_read_u32_array,然后对读取的值进行判断,再调用下面这些接口,或者调用gpio_request_array,一个初始化gpio的操作,需要几十行代码。有没有更简单的方法呢?
if (of_property_read_u32(np, propname, &gpio)) {
…
return;
}
if (!gpio_is_valid(gpio)) {
…
return;
}
if (gpio_request(gpio, label)) {
…
return;
}
if ( gpio_direction_input(gpio) {
…
gpio_free(gpio);
return;
}
irq = gpio_to_irq(gpio)
if (irq <0) {
…
return;
}
if (request_threaded_irq(irq, handler, thread_fn, irqflags, devname, dev_id)) {
…
return;
}
关于上面这些接口的使用方法&#xff0c;可以参考kernel在线文档, 或者kernel代码目录下的Documentation/driver-api/gpio/legacy.rst&#xff0c;更详细的信息&#xff0c;可以查看drivers/gpio/gpiolib-legacy.c的源码。