Linux设备驱动开发-Pinctrl子系统使用详解

devtools/2025/2/28 17:54:28/

Pinctrl 就是用来控制引脚的

一般引脚前面会有 IOMUX 连接各种功能,通过IOMUX 来指定引脚具体连接什么功能

pinctl 通过状态来控制引脚

以这个段设备树代码为例,这里有normal 和idle 两种模式,normal 对应pinctrl-0,idle 对应pinctrl-1

这段设备树片段称为 client

&sdmmc {max-frequency = <200000000>;no-sdio;no-mmc;bus-width = <4>;cap-mmc-highspeed;cap-sd-highspeed;disable-wp;pinctrl-names = "normal", "idle";pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_det &sdmmc0_bus4>;pinctrl-1 = <&sdmmc0_idle_pins &sdmmc0_det>;sd-uhs-sdr12;sd-uhs-sdr25;sd-uhs-sdr50;sd-uhs-sdr104;vmmc-supply = <&vcc3v3_sd>;vqmmc-supply = <&vccio_sd>;status = "okay";
};

来看一个引脚控制,可以看到这里配置了引脚功能为 gpio,并且进行了下拉

这段设备树片段称为 controller

sdmmc0 {/omit-if-no-ref/sdmmc0_idle_pins: sdmmc0-idle-pins {rockchip,pins =<3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_down>,<3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_down>,<3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>,<3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>,<3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>,<3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_down>;};
}

当设备切换状态时系统就会根据设备树去切换引脚状态

写代码时可以通过这些函数来控制状态

/ include / linux / pinctrl / consumer.h

这里时选择 default 状态

static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(struct device *dev)
{return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
}

这个是根据名字来选择状态

static inline struct pinctrl * __must_check pinctrl_get_select(struct device *dev, const char *name)
{struct pinctrl *p;struct pinctrl_state *s;int ret;p = pinctrl_get(dev);if (IS_ERR(p))return p;s = pinctrl_lookup_state(p, name);if (IS_ERR(s)) {pinctrl_put(p);return ERR_CAST(s);}ret = pinctrl_select_state(p, s);if (ret < 0) {pinctrl_put(p);return ERR_PTR(ret);}return p;
}

http://www.ppmy.cn/devtools/163404.html

相关文章

PHP实现国密SM4算法,银行系统加密算法,JAVA和PHP可相互转换(附完整源码)

最终实现效果&#xff1a;PHP生成加密串&#xff0c;JAVA代码中完成匹配 JAVA SM4库实现效果 /*** 签名** param content 请求报文体* param secret 密钥* return*/public static String sign(String content, String secret) {String charSet "UTF-8";String c…

mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)

目录 mysql服务层 介绍 服务管理和公共组件 备份 NOSQL,SQL接口 介绍 nosql Parser模块(语法分析器) 介绍 词法分析 语法分析 示例 预处理器 引入 介绍 优化器 介绍 优化的必要性 基于成本的优化器 缓存 介绍 弊端 mysql服务层 介绍 数据库服务层是整个…

【南航博士申请】南京航空航天大学 管理科学与工程专业 “申请考核制”博士笔、面试经验(2025年已录取)

目录 1 个人情况2 南航经管院考核机制3 笔试经验3.1《运筹学》方面3.2《统计学》方面 4 面试经验 1 个人情况 2025年应届双非&#xff0c;提交材料前录用了1篇二作基金委C刊&#xff0c;1篇一作普通C刊&#xff0c;科研积分共计16分。两门笔试都是42分&#xff0c;面试81.5分。…

spring-data-mongoDB

目录 spring-data-mongoDB使用 1.导入mongoDB依赖 2.编写配置文件 3.编写实体类&#xff0c;与mongoDB中的文档相对应&#xff0c;使用Document注解 4.编写service层方法 一.实现保存方法 二.实现修改方法 三.实现删除方法 四.实现查询方法 项目使用mongoDB实现作业范…

Qt:布局管理器

目录 QVBoxLayout QHBoxLayout QGridLayout QFormLayout QSpacerItem 之前使用 Ot 在界面上创建的控件&#xff0c;都是通过 "手动" 的方式来设定的&#xff0c;也就是每个控件所在的位置&#xff0c;都需要计算坐标&#xff0c;最终通过 setGeometry 或者 move…

CSS处理内容溢出

<!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>处理内容溢出</title><style>#d1{wid…

DeepSeek集成IT技术开发方向全景解读:重构智能开发新范式

一、技术架构革命:支撑IT开发集成的三大引擎 1. 动态MoE架构(DeepSeekMoE-32B) 通过混合专家系统实现精准任务路由,在软件开发场景中展现出显著优势: 代码生成场景:激活Java/Python/C++等语言专家模块,单元测试覆盖率提升至85%硬件资源优化:FP16量化下推理显存需求低…

2025年软考报名费用是多少?全国费用汇总!

软考报名时间终于确定了&#xff01;想要参加2025年软考的同学们注意啦&#xff01;特别是那些一年只有一次考试机会的科目&#xff0c;千万不要错过哦&#xff01;这里为大家整理了各地的报名时间、科目、费用等信息&#xff0c;快来看看吧&#xff01; 一、2025年软考时间安…