
GPIO子系统
文章平均质量分 92
gpio / pinctrl 子系统
-佩奇的爸爸
分享开发经验
展开
-
pinctrl子系统 - pinctrl与gpio之间的耦合(六)
任何一个gpio chip,在使用GPIO的时候(通常是gpio subsystem的consumer申请GPIO资源的时候),都需要向系统的pinctrl subsystem申请管脚,并将管脚配置为GPIO功能。思路是简单、直接的,但实际操作起来,却有点棘手,下面以一个最简单的例子说明:假设某一个gpio chip只包括2个gpio,这两个gpio分别和uart进行功能复用。原创 2023-10-16 10:30:19 · 232 阅读 · 0 评论 -
pinctrl子系统 - 源码解析(五)
设备节点要么被转换为platform_device,或者其他结构体(比如i2c_client),但是里面都会有一个device结构体,每个device结构体里都有一个dev_pin_info结构体,用来保存设备的pinctrl信息。platform_device匹配driver会执行probe探测函数,执行到驱动中真正的probe函数之前,会进行pinctrl的处理,处理函数为pinctrl_bind_pins。map 到 setting的转化只是将字符串转为整型数表示的形式。原创 2023-10-16 10:20:32 · 617 阅读 · 0 评论 -
pinctrl子系统 - 架构和结构体关系(四)
每个device结构体里都有一个dev_pin_info结构体,用来保存设备的pinctrl信息,为了方便管理pin control state,我们又提出了一个pin control state holder的概念,用来管理一个设备的所有的pin control状态 -- struct pinctrl ,系统中的每一个需要和pin control subsystem进行交互的设备在进行设定之前都需要首先获取这个句柄。Pin controller节点的格式,没有统一的标准!原创 2023-10-13 21:44:00 · 964 阅读 · 0 评论 -
GPIO子系统(三)
中间层是 Gpiolib,用于管理系统中的 GPIO。个人理解,因为不知道这个 init 和我们的对接底层的驱动的 init 谁先执行到,所以用了一个变量 gpiolib_initialized 来表示当前的 Gpiolib 是不是已经完成了相关的字符设备的注册,如果是 Gpiolib 先去 init 的话,那么 gpiolib_initialized ture,芯片对接底层的部分错过 gpio_chip setup 的机会,所以需要重新调用这个 gpiochip_setup_dev 接口,反之 OK;原创 2023-10-13 21:30:28 · 582 阅读 · 0 评论 -
使用gpio子系统实现按键驱动(二)
Linux内核下的drivers/input/keyboard/gpio_keys.c实现了一个体系无关的GPIO按键驱动,使用此按键驱动,只需要在设备树gpio-key节点添加需要的按键子节点即可,适合于实现独立式按键驱动。gpio-keys是基于input架构实现的一个通用gpio按键驱动,该驱动基于platform_driver架构,实现了驱动和设备分离,符合linux设备驱动模型的思想。原创 2023-10-10 20:18:45 · 1242 阅读 · 2 评论 -
gpio内部结构(一)
一般实际运用时,引脚不建议悬空,易受干扰。2) 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。* 将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只有 1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式,使它有一个默认状态。原创 2023-10-10 19:56:29 · 1961 阅读 · 0 评论