《原子嵌入式Linux驱动开发详解与实战》第6章 pinctrl和gpio子系统学习结合例程
[复制链接]
Linux内核提供了pinctrl和gpio子系统用于GPIO驱动
Pinctrl子系统
Linux驱动讲究驱动分离与分层,linux内核针对pin的配置推出来pinctrl子系统,对于gpio配置推出来GPIO子系统
Pinctrl子系统的工作内容
1获取设备书中的pin信息
2根据获取的pin信息来设置pin的复用功能
3根据获取的Pin信息来设置啤n的电气特性:上下拉 速度
驱动文件在
如何添加pinctrl节点模板
1创建对应的节点
Pinctrl_test:testgrp{
//具体的pin信息
}
2添加fsl,pin属性
Pinctrl_test:testgrp{
fsl,pins = <
//设备使用的pin配置信息
>
};
看下gpio_led的代码
GPIO子系统就是用于初始化GPIO并且提供相应的API函数
获取 GPIO 编号函数 of_get_named_gpio
GPIO 申请函数 gpio_request
GPIO 输出设置函数 gpio_direction_output
GPIO 输入设置函数 gpio_direction_input
获取 GPIO 引脚值函数 gpio_get_value
设置 GPIO 输出值 gpio_set_value
Led驱动程序解析
1获取设备节点gpio_led
gpioled.nd = of_find_node_by_path("/gpioled");
2获取设备树的gpio属性得到LED所使用的LED编号
gpioled.led_gpio = of_get_named_gpio(gpioled.nd, "led-gpio", 0);
3设置电平
gpio_direction_output(gpioled.led_gpio, 1);
然后注册设备字符驱动、创建删除设备
测试代码
|