设备树——pinctrl和gpio子系统

一、设备树中添加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:要设置的值。
 *返回值:无。
 ***************************************************/

你可能感兴趣的:(linux,驱动开发,设备树,pinctrl,gpio子系统)