设备树 之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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • APK 签名:v1 v2 v3 v4

    APK 签名:v1 v2 v3 v4通过对Apk进行签名,开发者可以证明对Apk的所有权和控制权,可用于安装和更新其应用。而在Android设备上的安装Apk,如果是一个没有被签名的Apk,则会被拒绝安装。在安装Apk的时候,软件包管理器也会验证Apk是否已经被正确签名,并且通过签名证书和数据摘要验证是否合法没有被篡改。只有确认安全无篡改的情况下,才允许安装在设备上。简单来说,APK的签名主要作用有两个:证明APK的所有者。 允许Android市场和设备校验APK的正确性。

    2022年5月17日
    170
  • stat函数讲解_strcat函数

    stat函数讲解_strcat函数stat函数讲解表头文件:   #include<sys/stat.h>            #include<unistd.h>定义函数:   intstat(constchar*file_name,structstat*buf);函数说明:  &nbs

    2022年8月21日
    4
  • mac怎么安装svn_eclipse svn插件安装

    mac怎么安装svn_eclipse svn插件安装相信在windows上朋友,应该都使用过svn,其中TortoiseSVN简单高效,都习惯了,但是TortoiseSVN没有Mac版,今天给大家推荐一款非常相似的软件——SnailSVN

    2022年10月8日
    0
  • 精进 Quartz—Quartz大致介绍(一)

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。

    2022年2月25日
    53
  • loadrunner11激活成功教程失败,已解决“ license security violation.Operation is not allowed ”问题

    loadrunner11激活成功教程失败,已解决“ license security violation.Operation is not allowed ”问题loadrunner11激活成功教程失败,已解决“licensesecurityviolation.Operationisnotallowed”问题

    2022年7月22日
    9
  • goland破解激活码【在线破解激活】

    goland破解激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    86

发表回复

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

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