pinctrl简析

本文档详细介绍了Linux内核中的Pinctrl子系统,用于简化和统一GPIO配置。Pinctrl管理所有可控制的pin,处理引脚复用和配置特性。在设备驱动中,通过dts配置和API调用来使用Pinctrl。同时,文章提到了pinctrl与GPIO子系统的关系,并分析了驱动流程。高通SDM845平台的Pinctrl控制器和驱动也被提及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、概述

二、pinctrl的使用方法

三、 pinctrl原理以及驱动流程分析

四、参考文档


一、概述

    暂时未实际应用过pinctrl,暂时是以理论基础来撰写改文档,如有错误后续会持续补充。

    pinctrl主要是为了简化以及统一gpio的配置而产生。

    pinctrl子系统的功能:

(1)管理系统中所有的可以控制的pin,在系统初始化的时候,枚举所有可以控制的pin,并标识这些pin。

(2)管理这些pin的复用(Multiplexing)。对于SOC而言,其引脚除了配置成普通的GPIO之外,若干个引脚还可以组成一个pin group,行程特定的功能。pin control subsystem要管理所有的pin group。

(3)配置这些pin的特性。例如使能或关闭引脚上的pull-up、pull-down电阻,配置引脚的driver strength。

对于pinctrl的背景可以参考文档linux内核中的GPIO系统之(1):软件框架,讲的比较清楚。

二、pinctrl的使用方法

    pinctrl的使用主要包括两部分内容,一是dts配置,二是设备驱动中的使用。

    dts配置:

pinctrl的背景可以参考文档linux内核中的GPIO系统之(1):软件框架,讲的比较清楚。

 

    1. pinctrl-names/pinctrl-0/pinctrl-1 这些属性名字不能变,如果还有其他的配置则pinctrl-2 pinctrl-3以此类推

    2. 一个pinctrl中可以有多个配置,用空格隔开;  

    3. 配置中,mux配置gpio的功能,有些gpio是可以复用成不同的功能; config用来配置gpio的一些配置如驱动能力,上拉下拉等;

 驱动中的API:

    devm_pinctrl_get()  // 获取dev下得pinctrl配置

    pinctrl_lookup_state()  // 根据名字查找指定的pinctrl配置

    pinctrl_select_state()   //使能指定的配置

    devm_pinctrl_put()  //释放资源

    同时需要注意:(以下的分析是基于高通SDM845代码,其他平台可以参考really_probe() → pinctrl_bind_pins() )

    1. 如果在dts里面同时配置了default 状态的配置,在device probe之前内核就会默认配置一遍

    2. 如果在dts里面同时配置了default 和init状态的配置,那么会配置init的配置,而不是default

 

 

三、 pinctrl原理以及驱动流程分析

与GPIO子系统的关系:

 

pinctrl也遵循linux的驱动模型,有设备节点以及设备驱动。

SDM845平台有两个pinctrl controller,参考sdm845-pinctrl.dtsi 

一个是tlmm,另一个是pm8998_gpios(存在pmic上)

pm8998_gpios参考:pm8998.dtsi

如上图所知,每个pinctrl controller的dts设备节点都有一个对应的驱动。

tlmm的驱动 -》pinctrl-sdm845.c

pm8998_gpios的驱动 -》pinctrl-spmi-gpio.c

驱动中过程不详细的分析,主要有3个步骤:

1、 构造pinctrl以及gpiochip结构;struct pinctrl_desc / struct gpio_chip

2、 注册gpio子系统: gpiochip_add_data() / gpiochip_add_pin_range() / gpiochip_irqchip_add() 等

3、 注册pinctrl子系统: devm_pinctrl_register()

四、参考文档

文档

链接

Pinctrl子系统之一了解基础概念

Pinctrl子系统之一了解基础概念_u012830148的博客-优快云博客_pinctrl

linux内核中的GPIO系统之(1):软件框架

linux内核中的GPIO系统之(1):软件框架

 Pinctrl基础简介_简一商业-优快云博客_pinctrl

Pinctrl子系统之一了解基础概念_u012830148的博客-优快云博客_pinctrl

高通GPIO驱动(DTS方式)

高通GPIO驱动(DTS方式)icon-default.png?t=LA92https://www.bbsmax.com/A/E35p4W0y5v/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值