Linux驱动——pinctrl子系统、GPIO子系统

pinctrl子系统
以IIC为例,通常有两种状态:default和sleep状态,在对应的状态下需要把引脚配置成对应的功能,例如在default状态需要把引脚配置成IIC模式,在sleep状态下需要把引脚配置成GPIO模式。在SOC中各个引脚与各个模块之间是通过IOMUX进行控制,如何将引脚配置成我们需要的作用就需要用到pinctrl来驱动IOMUX。

在设备树文件中可以看到不同设备对应的pinctrl信息如下:
在这里插入图片描述
在该文件所包含的pinctrl设备树文件中找到对应的不同状态的pinctrl引脚和复用功能信息如下:
在这里插入图片描述
在总线驱动设备模型中当驱动和设备匹配成功之后在调用probe之前就会将引脚进行配置

对于不同的单板其引脚的配置方式不同;
对于imx6ull而言,是利用在头文件中定义的宏来设置相关寄存器的地址信息,然后利用芯片厂商提供的工具获得引脚的地址信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而对于树莓派而言则直接使用的是数字作为引脚信息
在这里插入图片描述
GPIO 子系统
GPIO模块通常可以不写pinctrl,可以直接对其进行配置,有时内核源码考虑到整体性会将GPIO模块同样使用pinctrl。对于GPIO而言在设置引脚信息的时候只需要关注方向和值两个重要信息。
gpios中通常为gpios = <GPIO控制器 pin脚 flag>

在树莓派中:
在这里插入图片描述
在imx6ull中:
在这里插入图片描述
写一个含有pinctrl和GPIO设备结点步骤:
以LED为例:
1.根据原理图可以看到LED所接引脚信息,使用GUI工具生成pinctrl相关信息,并放入需要引用的pinctrl结点的pins中;
在这里插入图片描述在这里插入图片描述
2.构造设备树节点,在设备树节点中指向生成的pinctrl相关信息,并根据原理图添加GPIO,默认状态和触发方式等。
在这里插入图片描述

对于复杂的接口:
以网卡为例:
1.确定pinctrl名。先根据原理图总引脚名搜设备树,参考相关代码进行修改,
在imx6ull原理图中看到网卡引脚名为ENET2_XXX,在内核目录下搜索该引脚名:
在这里插入图片描述
任意打开一个设备树文件:找到pinctrl名为pinctrl_enet2
在这里插入图片描述
2.根据pinctrl名找到对应结点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找到了该节点就可以进行修改,从而编写自己想要的设备树。

learned from:韦东山

版权声明:本文为CSDN博主「基尔霍夫原来是码农」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cha1290878789/article/details/121676426

生成海报
点赞 0

基尔霍夫原来是码农

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

图像sensor的特性和驱动解析(1)

一、本季文章主要内容和安排 1、本季文章主要内容 (1)查看SDK中相应文档,重点是SoC对Sensor的支持 (2)更换另一个Sensor(OV9712),并实现之前的实验 (3

STM32G4之NVIC中断系统

前言 一、NVIC中断机制 stm32G431总共有111个中断源,所以有时难免有两个或者两个以上的中断一起来临,或者正在处理一个中断服务函数时突然又有一个中断来临,以上种种情况微控制器要怎样运行呢&

串口配置TMC2209电机驱动模块

串口配置TMC2209电机驱动模块 本文主要记录TMC2209调试过程,通过串口助手配置TMC2209的寄存器实现转速,方向,细分数等寄存器设置。 1.首先要实现uart配置TMC2209寄存器就要先