设备树 之pinctrl[通俗易懂]

设备树 之pinctrl[通俗易懂]三个重要概念bank:gpa0,gpa1,gpa31等group:以功能划分,比如uart的tx和rxstate:设备的某种状态,比如”default”,”idle”,”sleep”,也可以是其他自定义的状态,比如串口的“flow_ctrl”状态例如:bank:&pinctrl_0{/**pinb…

大家好,又见面了,我是你们的朋友全栈君。

三个重要概念

 

bank :

gpa0, gpa1, gpa31等

group:

以功能划分,比如uart的tx和rx

state:

设备的某种状态,比如”default”, “idle”,”sleep”,也可以是其他自定义的状态, 比如串口的“flow_ctrl”状态

 

 

例如:

bank:

&pinctrl_0 {
    
  /*
  * pin banks
  */  
  
  /*
  * flags : 0 active high, 1 active low
  */
  gpa :gpa {      
    gpio-controller;          // 必须的属性,表示bank
    #gpio-cells = <2>;        // [pin_number, flags],用于识别引脚
  };
};

group:pin-ctrl的子节点

uart0_data : uart0_data {
  samsung,pins = "gph-0","gph-1";      // 表示哪几个引脚
  samsung,pin-function = <2>;          // 查看手册,服用功能时reg里面的值,对于uart,gphcon对应gph0,   gph1 =2时表示串口, =0时表示输入
};

state:

uart0_data : uart0_data {
  samsung,pins = "gph-0","gph-1";      // 表示哪几个引脚
  
  /*
  * 在GPHCON寄存器里面, GPH0,GPH1可以设置:
  * 0 ---输入功能
  * 1 ---输出功能
  * 2 ---串口功能
  */
  samsung,pin-function = <2>;         
};

uart0_sleep : uart0_sleep {
  samsung,pins = "gph-0","gph-1";      // 表示哪几个引脚
   /*
  * 在GPHCON寄存器里面, GPH0,GPH1可以设置:
  * 0 ---输入功能
  * 1 ---输出功能
  * 2 ---串口功能
  */
  samsung,pin-function = <0>;          
};

以上定义了两个group

 

serial@50000000 {
    
  ...
  pinctrl-names = "default","sleep";        # 既是名字,也是state
  pinctrl-0 = <&uart0_data>;
  pinctrl-1 = <&uart0_sleep>;
};

pinctrl-names定义了两种state : default 和 sleep

default : 对应的引脚是pinctrl-0 ,他指定了group是uart0_data

sleep : 对应的引脚是pinctrl-1,他指定的group是uart0_sleep

 

内核里面pinctrl的使用

  1. platform_device,platform_driver匹配时,最终调用了really_probe

  2. really_probe
    	pinctrl_bind_pins	
    		pinctrl_lookup_state #获取default状态的pinctrl
    		pinctrl_select_state

     

  3. 手动获取状态的api:

    devm_pinctrl_get_select_default 使用default状态的引脚
    pinctrl_get_select 根据name选取某种状态的引脚
    pinctrl_put 不再使用退出时调用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150468.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库的查询语句_数据库select from where

    数据库的查询语句_数据库select from where一、温馨提示在dos窗口登录mysql,这里面使用库,给库中表添加一条中文数据—-会出现插入数据有问题,中文错误这是因为:1、在dos窗口中,默认的编码格式gbk,而mysql服务器软件使用的编码utf82、在dos窗口输入一个指令,模糊查询当前mysql数据库中所有带有”character”字符集的变量全部出来SHOWVARIABLESLIKE’%character%’;3、在dos窗口中需要修改setchar…

    2025年10月3日
    4
  • 对象转map工具类BeanUtil

    对象转map工具类BeanUtil1、2、当isAccessible()的结果是false时不允许通过反射访问private变量。packagecom.yung.ppapi.util;importjava.beans.BeanInfo;importjava.beans.Introspector;importjava.beans.PropertyDescriptor;importjava.lang.re…

    2022年5月17日
    81
  • curl_init php_宝塔php开启curl扩展

    curl_init php_宝塔php开启curl扩展安装某些PHP源码如CMSTOP时需求系统开启curl扩展,这需要修改PHP的配置,在Windows中只需简单三步。一、window下安装php_curl支持1.将PHP安装文件夹下的三个文件php_curl.dll(可能在ext文件夹中),libeay32.dll,ssleay32.dll复制到%windir%/system32下;2.打开php.ini(可能在PHP环境的安装目录下,默认…

    2022年10月9日
    5
  • dumpbin的使用

    dumpbin的使用1.输入Dumpbin-importscalldll.exe查看它的输入信息,可以看到它加载了***.dll2.输入dumpbin–exportsdlltest.dll,列出导出函数

    2022年6月19日
    39
  • 真理的基本的属性是_thread和handler区别

    真理的基本的属性是_thread和handler区别原文地址:http://blog.csdn.net/luckeryin/article/details/5649144C#中,Thread类有一个IsBackground的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释..Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一

    2022年10月16日
    3
  • 程序员泪崩_程序员生活现状

    程序员泪崩_程序员生活现状

    2022年10月11日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号