Pinctrl子系统_02_使用Pinctrl要掌握的重要概念

news2024/11/21 0:35:41

本节说明使用Pinctrl子系统时,要掌握的重要概念。

上节我们说到,我们通过Pinctrl子系统来控制设备的引脚,但实际上,大多数芯片都没有一个单独的Pinctrl。引脚的复用、配置等操作,实际上是在GPIO子系统内部实现的。

但是,我们可以把Pinctrl(pin controller)控制器抽象出来,当做一个软件概念,他主要实现两个作用:

  • 引脚复用
  • 引脚配置(上下拉电阻等等)

将配置GPIO的工作交给Pinctrl子系统。这样,需要配置GPIO时,调用Pinctrl子系统的函数即可。

怎么使用Pinctrl子系统呢?

串口模块为例:

首先,我们在设备树文件中定义一个UART节点,因为UART节点是Pinctrl子系统的用户,所以在内核文档中,它也被叫做client device,寓意为这个节点是一个用户,它会使用Pinctrl子系统。

UART节点中分别定义了两种状态state)—— 正常工作状态和休眠状态;这两种状态分别要配置哪些管脚group);管脚分别要配置成什么功能function)。

要怎么配置状态,引脚,功能呢?

复用节点

以下图为例,在client端,定义了一个用户设备device,这个用户设备有两种状态,分别是“default”和“sleep”。

这两种状态与之后的属性名称是一一对应的,其中-0表示第一种状态,-1表示第二种状态。即“default”对应pinctrl-0;“sleep”对应pinctrl-1。

而pinctrl-0和pinctrl-1分别等于一个节点,这个节点就是用来描述在这个状态下,应该配置哪些管脚,这些管脚应该配置成什么样

那么,这些节点位于哪里呢?——就在Pinctrl中。

当使用“default”状态时,就通过Pinctrl子系统,将指定group的管脚配置为“uart0”功能;当使用“sleep”状态是,则将指定管脚配置为“gpio”功能。

因为这些节点,是将相同的管脚在不同的状态下,被复用为了不同的功能,所以在内核文档中,这些节点也被叫做复用节点(Generic pin multiplexing node)

配置节点

另外,还有一个配置节点(Generic pin configuration node)。

与配置节点一样,当处于“default”状态时,配置为“uart0”功能;但是当处于“sleep”状态时,管脚被直接配置为了输出高电平,而不是某种function,这样的节点,在内核文档中就被叫做配置节点(Generic pin configuration node)。

总结

对于上面的配置,我们可以将左右分为两部分,左边是controller,右边是client

client中,配置不同的状态,给不同的状态指定不同的节点,而这些节点位于controller中,将哪些管脚配置为哪些功能或者状态。

对于client,它的格式通常都是固定的,但是对于controller,就没有统一的格式了。

虽然controller没有统一的格式,但是group,function,复用,配置,这些概念都是统一的。

举几个例子来看一下:

右边是client,它们的格式都是统一的,但是左边的controller,他们就没有什么统一的格式了。

代码中怎么引用Pinctrl?

这是透明的,我们的驱动基本不用管。当设备切换状态时,对应的pinctrl就会被调用。

比如在platform_device和platform_driver的枚举过程中,流程如下:

类似的,当系统休眠时,也会去设置该设备sleep状态对应的引脚,不需要我们自己去调用代码。

非要自己调用,也有函数(暂时不涉及,后续有需要再研究):

devm_pinctrl_get_select_default(struct device *dev);      // 使用"default"状态的引脚
pinctrl_get_select(struct device *dev, const char *name); // 根据name选择某种状态的引脚
pinctrl_put(struct pinctrl *p);   // 不再使用, 退出时调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos nginx配置文档

1、安装nginx: yum install nginx 2、Nginx常用命令 查看版本:nginx -v 启动:nginx -c /etc/nginx/nginx.conf 重新加载配置:nginx -s reload 停止:nginx -s stop 3、Nginx反向代理配置 nginx配置详解 1、Nginx配置图 详情可以查看:http://nginx.org/ru/docs/example…

ES6 什么是模板字符串?

模板字符串是一种在编程中用于创建字符串的特殊语法形式,通常用于动态生成包含变量或表达式的文本。它们在许多编程语言中都有类似的实现,但语法可能会有所不同。 在JavaScript中,模板字符串是由反引号 (backtick) 包围的字符串&#xff0c…

Python 环境搭建,集成开发环境IDE: PyCharm

Python 环境搭建,集成开发环境IDE: PyCharm 一、Python 环境搭建二、Python下载三、Python安装四、环境变量配置五、Python 环境变量六、运行Python1、交互式解释器:2、命令行脚本3、集成开发环境(IDE:Integrated Development Environment&am…

day13面向对象进阶

面向对象进阶部分学习方法: 特点: ​ 逻辑性没有那么强,但是概念会比较多。 ​ 记忆部分重要的概念,理解课堂上讲解的需要大家掌握的概念,多多练习代码。 day13 今日内容 复习回顾static关键字继承 教学目标 能…

《中国数字经济发展指数报告(2023年)》发布

导读 国家统计局《数字经济及其核心产业统计分类(2021)》首次对数字经济及其核心产业统计分类做出详细说明。然而,由于数字经济内涵外延的不断丰富,区域数字经济发展的量化评估仍在持续发展的过程中,以量化模型方式能够更加客观全面反映新时…

9.14 C++作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std;template <typename T> class Myvector {T *data; //存储数据的数组int len; //当前数组的长度int mycapa; //容纳数据的总容量public://…

MyVector 的实现

myVector #include <iostream> #include <vector>int size20;using namespace std;template <typename type> class myvector {int size;type value;type *arr;public://无参构造myvector(){};//有参构造myvector(int s,type v):size(s),value(v){arrnew in…

uni-app:通过三目运算动态增加样式效果

效果 代码 第一条&#xff1a;当变量line的值等于abc时&#xff0c;class就等于yes,反之class等于no&#xff08;显然等于abc&#xff0c;执行yes,前景色为红色&#xff09; 第一条&#xff1a;当变量line1的值等于abc时&#xff0c;class就等于yes,反之class等于no&#xff…

Hyper-V 安装 CentOS (二)

总目录 https://preparedata.blog.csdn.net/article/details/132877836 文章目录 总目录一、Hyper-V 创建centos的虚拟机实例二、虚拟机安装Centos ISO镜像三、重启后&#xff0c;进入系统 一、Hyper-V 创建centos的虚拟机实例 网络连接先不选择&#xff0c;后面文章专门配置网…

界面控件DevExpress WinForms HTML-CSS模板:预设计UI模板加速.NET应用开发

在过去的一年里&#xff0c;DevExpress官方引入了两个强大的功能来加速/简化.NET桌面应用的开发&#xff0c;当一起使用时&#xff0c;您可以创建优雅/个性化的用户界面&#xff0c;减少重复的代码&#xff0c;从而节省更多的项目时间。 DevExpress WinForms有180组件和UI库&am…

Spark集成hudi创建表报错

环境描述: hudi版本:0.13.1 spark版本:3.3.2 Hive版本:3.1.3 Hadoop版本:3.3.4 问题1: 描述:按照官方文档运行spark-sql创建spark的hudi表报错 建表语句: CREATE TABLE stg.spark_mor_test_01 (uuid string,name string,age int,ts …

数据结构-leetcode-移除元素

int removeElement(int* nums, int numsSize, int val){int start0;int end0;int flag0;for(int i 0;i<numsSize;i){if(nums[end]val){end;flag;}else if(nums[end]!val){nums[start]nums[end];end;start;}}return numsSize-flag; } 注&#xff1a;时间复杂度为O(N)&#xf…

pnpm基础教程

一、概述 1、更小 使用 npm 时&#xff0c;依赖每次被不同的项目使用&#xff0c;都会重复安装一次。 而在使用 pnpm 时&#xff0c;依赖会被存储在内容可寻址的存储中。 2、更快 依赖解析。 仓库中没有的依赖都被识别并获取到仓库。目录结构计算。 node_modules 目录结构是…

自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

该部分是对自动化测试专栏前四篇的一个补充&#xff0c;本次参考以下文章实现一个完整的谷歌翻译接口自动化测试:   [1]【python小脚本】Yaml配置文件动态加载   [2]【python做接口测试的学习记录day8——pytest自动化测试框架之热加载和断言封装】 目标&#xff1a;框架封…

ARM架构-伪指令、伪操作、ATPCS协议

汇编中的符号&#xff1a; 1.指令&#xff1a;能够编译生成一条32位的机器码且能被CPU识别和执行 2.伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若千条指令 3.伪操作:不会生成代码&#xff0c;只是在编译阶段告诉编译器怎么编译&#xff08;例如&#x…

如何利用软文推广进行SEO优化(打造优质软文,提升网站排名)

在当今的互联网时代&#xff0c;SEO优化成为了网站推广的关键。而软文推广作为一种有效的推广方式&#xff0c;其优点不仅仅局限于SEO&#xff0c;还可以带来更多的曝光和用户流量。本文将深入探讨如何做好软文推广&#xff0c;从而提升网站排名和流量。 了解目标受众群体 内容…

【MySQL】基础SQL语句——库的操作

文章目录 一. 创建数据库1.1 基础语句1.2 字符集和校验规则1.3 校验规则对读取数据的影响 二. 查看数据库三. 修改数据库四. 删除数据库及备份4.1 删除4.2 备份和还原 结束语 一. 创建数据库 1.1 基础语句 最简洁的创建数据库的SQL语句是&#xff1a; create database db_nam…

iOS 使用陀螺仪实现裸眼3d效果

直接上完整代码 // // BannerView.m // Test // // Created by liubo on 2023/7/20. //#import "LB3DBannerView.h" #import <Masonry/Masonry.h> #import <CoreMotion/CoreMotion.h>interface LB3DBannerView (){CGFloat maxOffset;CGFloat lastGra…

新增动态排序图、桑基图、AntV组合图,DataEase开源数据可视化分析平台v1.18.10发布

2023年9月14日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.18.10版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;对字段管理的后台保存做了相关优化&#xff0c;降低了资源消耗&#xff1b;仪表板方面&#xff0c;对联动、查询结果以及过滤组件等…

Java 泛型 T,E,K,V,?

泛型带来的好处 在没有泛型的情况的下&#xff0c;通过对类型 Object 的引用来实现参数的“任意化”&#xff0c;“任意化”带来的缺点是要做显式的强制类型转换&#xff0c;而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况&#xf…