一、linux驱动开发-3.1-pinctrl和gpio子系统

目录

一、pinctrl子系统               

1.1、在设备树中添加pinctrl节点模板

1.1.1、创建节点

1.1.2、添加“fsl,pin”属性

​1.1.3、在属性中添加pin配置信息

 二、gpio子系统

2.1、gpio子系统API函数

2.1..1、gpio_request

2.1.2、gpio_free

2.1.3、gpio_direction_input

2.1.4、gpio_direction_ouput

2.1.5、gpio_get_value

2.1.6、gpio_set_value

2.2、设备树中添加gpio节点模板

2.2.1、创建test节点

2.2.2、添加pinctrl信息

2.2.3、添加GPIO属性信息

2.3、读取gpio属性的of函数

2.3.1、of_get_named_gpio

三、点灯

3.1、修改设备树

3.1.1、添加pinctrl节点

3.1.2、添加LED设备节点

3.1.3、检查该PIN是否被其他外设使用

3.2、驱动编写 

3.2.1、获取设备节点

3.2.1、获取gpio编号


一、pinctrl子系统               

        之前做gpio驱动开发的步骤:

        ①、修改设备树、添加相应的节点。节点里设置reg属性,包括需要操作的寄存器。

        ②、获取reg属性中寄存器地址后,初始化寄存器,设置gpio复用及和电气属性。

        这一套操作比较繁琐,而且容易出错,因此linux内核对于GPIO这种基本驱动引入了pinctrl和gpio子系统。

        pinctrl子系统主要工作如下:

                获取设备树中pin信息;

                根据获取到的pin信息来设置pin的复用功能;

                根据获取到的pin信息来设置pin的电气性能,比如上下拉,速度,驱动能力;

        从上面可以看出,我们只需要在设置树里设置好某个pin的相关属性就可以了,其他的工作pinctrl子系统完成,很方便。

1.1、在设备树中添加pinctrl节点模板

        先虚拟一个“test”的设备,使用GPIO1_IO00这个pin的GPIO功能。模仿已经存在的添加。

1.1.1、创建节点

        在dts文件中的iomuxc节点中的“imx6ul-evk”子节点下添加“pinctrl-test”节点。

        注意:节点前缀一定要是“pinctrl_”;

1.1.2、添加“fsl,pin”属性

        设备树通过属性保存信息,属性名字一点要是“fsl,pins”;

1.1.3、在属性中添加pin配置信息

 二、gpio子系统

        pinctrl子系统设置PIN的复用和电气属性后为GPIO,就轮到gpio子系统了。

        gpio子系统初始化GPIO并提供相应的API来操作GPIO,比如设置GPIO为输入输出,读取GPIO的值。

2.1、gpio子系统API函数

2.1..1、gpio_request

        用于申请一个gpio,使用gpio之前一直要申请

gpio标号通过of_get_named_gpio从设备树获取,返回gpio标号。

/*
@Description:申请一个GPIO
@gpio:要申请的gpio标号
@label:给gpio设置的名字
@return:0:   成功
         else:失败
*/
int gpio_request(unsigned gpio, const char *label)

2.1.2、gpio_free

        不使用某个gpio,要释放

/*
@Description:释放一个GPIO
@gpio:要释放的gpio标号
*/
void gpio_free(unsigned gpio)

2.1.3、gpio_direction_input

        设置某个gpio为输入

/*
@Description:设置某个GPIO为输入
@gpio:要设置为输入的gpio标号
@return:0   :成功
         < 0 :失败
*/
int gpio_direction_input(unsigned gpio)

2.1.4、gpio_direction_ouput

        设置某个gpio为输出,并且设置默认输出值

/*
@Description:设置某个GPIO为输出,并且设置默认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值