pinctrl和gpio子系统

  LInux针对PIN的配置推出了pinctrl子系统,针对GPIO的配置推出了gpio子系统。

1、pinctrl子系统

  pinctrl子系统重点是设置PIN(有的SOC叫做PAD)的复用和电气属性。下面向设备树添加一个pinctrl节点模板:

功能:创建一个test设备,test使用了GPIO1_IO00这个PIN的GPIO功能。
添加过程:在imx6ull-alientek-emmc.dts文件,iomuxc节点中的“imx6ul-evk”子节点下添加"pinctrl_test"节点(节点前缀一定要是“pinctrl_”)。

pinctrl_test: testgrp{
    fsl, pins = <
        MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 
    >;
};

1.1 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19

  在/arch/arm/imx6ul-pinfunc.h中进行了宏定义。

1.2 0x17059

  设置配置寄存器的值,这个需要我们自己设置。

参考:https://www.cnblogs.com/Mike2019/p/13530450.html

 2、GPIO子系统

  如果 pinctrl 子系统将一个 PIN 复用为 GPIO ,那么接下来就要用到 gpio 子系
统了。 gpio 子系统就是用于初始化 GPIO 并且提供相应的 API 函数。

test{
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_test>;
    GPIOA = <&gpio1 19 GPIO_ACTIVE_LOW>;  //使用了GPIO1_IO19,低电平有效
}

&gpio1:表示该引脚所使用的IO属于GPIO1组

19:       表示GPIO1组的第19号IO

GPIO_ACTIVE_LOW:低电平有效

3、GPIO子系统API函数

 

4、GPIO相关OF函数

4.1 of_gpio_named_count

4.2 of_gpio_count

4.3 of_get_named_gpio

posted @ 2020-08-19 18:41  Mike_2019  阅读(415)  评论(0编辑  收藏  举报