设备树 之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)
上一篇 2022年6月18日 上午7:46
下一篇 2022年6月18日 上午8:00


相关推荐

  • 计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?「建议收藏」

    计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?「建议收藏」原标题:电脑虚拟ip地址怎么弄?在需要建立局域网和连接多台计算机时。我将重新设置电脑的IP地址,这样电脑就可以连上网了。因此,如何设置电脑的IP地址呢?以下是根据电脑原来的IP地址设置IP地址的共享方法。设置步骤:1、首先,右击桌面上的网络邻居,并在打开的菜单中选择该属性。2、在打开的“网络连接”属性菜单中找到本地连接,单击“本地连接”,然后点击“查看此连接状态”,即可打开本地连接。单击“支持”标…

    2022年10月12日
    5
  • hibernateTemplate update 只更新被修改字段

    hibernateTemplate update 只更新被修改字段如果你用hibernateTemplate操作数据库,感觉的确很省代码,一行代码解决数据库增改删查,但当你做到一个功能只更新一个字段,你就有点懵逼了,怎么试就是不行,总的就是下面的异常报错。当你用hibernateTemplate模板去update或者saveOrUpdate某个对象的时候发现报某字段不能为空的异常,而你的封装对象属性里却实做了某字段的修改,一时就蒙了。其实也不难发现,一…

    2022年6月29日
    28
  • UPX脱壳详细分析

    UPX脱壳详细分析文章标题】:UPX脱壳详细分析【文章作者】:index09【使用工具】:UPX+OD+Stud_PE+ImportREC——————————————————————————–【详细过程】又被R公司鄙视了,每次都被相同的理由鄙视。哭……于是决定好好学一下逆向了。首先做个幼儿级的脱壳练习,当做开始吧。网上有很多类似文章,基本只写了找OEP的过程,这里稍加分

    2022年7月19日
    19
  • 管理学第三章_企业集团管理第五章自测

    管理学第三章_企业集团管理第五章自测文章目录主要内容项目范围6个过程范围管理的重要性总表5.1范围管理概述5.2规划范围管理5.3收集需求主要内容项目范围6个过程(1)规划范围管理:对如何定义、确认和控制项目范围的过程进行描述。(2)收集需求:为实现项目目标,明确并记录项目干系人的相关需求的过程。(3)定义范围:详细描述产品范围和项目范围,编制项目范围说明书,作为以后项目决策的基础。(4)刨建工作分解结构(WBS):把整个项目工作分解为较小的、易于管理的组成部分,形成一个自上而下的分解结构。(5)确认范围:正式验收已完成的可交付

    2026年2月15日
    6
  • Linux安装kermit

    Linux安装kermitLinux 安装 kermit 本文介绍如何在 Linux 上安装并使用 C Kermit 组合的网络和串行通信软件包 安装 前提是你的 Linux 已经配置更新好软件源 sudoapt getinstallck 配置 C Kermit cd vim kermrc kermrc 文件内容 一般 USB 转串口会分配为 dev ttyuSB0 如果是用串口线连接主机的话 需要设置为 dev ttyS0 设备名根据自己电脑识别的自行修改 setline dev t

    2025年9月12日
    5
  • 卸载Sql Server 2014数据库

    卸载Sql Server 2014数据库1 相关准备工作 1 在运行中输入 services msc 然后找到所有跟 SqlServer 有关的服务 并且停止这些服务 2 从控制面板卸载 在电脑左下角的搜索框输入 控制面板 并且回车 点击 程序卸载 2 在程序列表中找到 MicrosoftSQL 64 位 右击选 卸载 或双击 1 此处需要特别注意 到了 选择实例

    2026年3月26日
    1

发表回复

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

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