一、设备树中添加pinctrl节点模板
1.1 创建对应的节点
- 打开
.dts
文件,在iomuxs
节点中的板子型号
对应的节点中添加pinctrl_test
节点。 - 注意前缀必须为
pinctrl_
pinctrl_test: testgrp{
/*具体的pin信息*/
};
1.2添加fsl,pins
属性
- 设备树是通过属性来保存信息的,对于
I.MX
系列SoC而言,pinctrl
驱动程序是通过读取fsl,pins
属性值来获取PIN的配置信息。
pinctrl_test: testgrp{
fsl,pins = <
/*设备所需要使用的pin配置信息*/
>;
};
1.3通过fsl,pins
属性添加PIN配置信息
pinctrl_test: testgrp{
fsl,pins = <
MX6UL_PAD_GPIO1_IO00_GPIO1_IO00 config/*config是具体设置值*/
>;
};
二、设备树中添加gpio节点模板
2.1创建test
设备节点
- 在根节点
/
下创建test设备子节点
test {
/*节点内容*/
};
2.2添加pinctrl
信息
- 在根节点
/
下创建test设备子节点
test {
pinctrl-name = "default";
pinctrl-0 = <&pinxtrl_test>;
/*其他节点内容*/
};
2.3添加GPIO
属性信息
- 在根节点
/
下创建test设备子节点
test {
pinctrl-name = "default";
pinctrl-0 = <&pinxtrl_test>;
gpio = <&gpio1 0 GPIO_ACTIVE_LOW>;
};
三、gpio子系统API函数
3.1 gpio_request
函数
gpio_request
函数用于申请一个GPIO管脚。
int gpio_request(unsigned gpio,const char *label)
/***************************************************
*参数和返回值:
*gpio:要申请的gpio标号,使用of_get_named_gpio函数从设备树获取指定的GPIO属性信息,此函数会返回GPIO标号。
*label:给gpio设置一个名字
*返回值:0,申请成功;其他值,申请失败。
***************************************************/
3.2 gpio_free
函数
gpio_free
函数用于释放一个GPIO管脚。
void gpio_free(unsigned gpio)
/***************************************************
*参数和返回值:
*gpio:要释放的gpio标号。
*返回值:无。
***************************************************/
3.3 gpio_direction_input
函数
gpio_direction_input
函数用于设置某个gpio为输入。
int gpio_direction_input(unsigned gpio)
/***************************************************
*参数和返回值:
*gpio:要设置为输入的gpio标号。
*返回值:0,设置成功;负值,设置失败。
***************************************************/
3.4 gpio_direction_output
函数
gpio_direction_output
函数用于设置某个gpio为输出,并设置默认输出值。
int gpio_direction_output(unsigned gpio,int value)
/***************************************************
*参数和返回值:
*gpio:要设置为输出的gpio标号。
*value:GPIO默认输出值。
*返回值:0,设置成功;负值,设置失败。
***************************************************/
3.5 gpio_get_value
函数
gpio_get_value
函数用于获取某个gpio的值(0或1),此函数是个宏。
#define gpio_get_value __gpio_get_value
int __gpio_get_value(unsigned gpio)
/***************************************************
*参数和返回值:
*gpio:要获取的gpio标号。
*返回值:非负值,得到的GPIO值;负值,获取失败。
***************************************************/
3.6 gpio_set_value
函数
gpio_set_value
函数用于设置某个gpio的值,此函数是个宏。
#define gpio_set_value __gpio_set_value
void __gpio_set_value(unsigned gpio)
/***************************************************
*参数和返回值:
*gpio:要设置的gpio标号。
*value:要设置的值。
*返回值:无。
***************************************************/