linux PINCTRL

原创 2016年08月28日 23:14:11

Pinctrl框架是linux系统为统一各SOC厂商pin管理,避免各SOC厂商各自实现相同pin管理子系统而提出的。目的是为了减少SOC厂商系统移植工作量。

许多SoC 内部都包含pin 控制器,通过pin 控制器,我们可以配置一个或一组引脚的功能和特性。在软件上,Linux 内核pinctrl驱动可以操作pin 控制器为我们完成如下工作:

Ø  枚举并且命名pin控制器可控制的所有引脚;

Ø  提供引脚的复用能力

Ø  提供配置引脚的能力,如驱动能力、上拉下拉、数据属性等。

Ø  与gpio子系统的交互

Ø  实现pin中断

 

Pincontroller: 是对硬件模块的软件抽象,通常用来表示硬件控制器。能够处理引脚复用、属性配置等功能。

Pin: 根据芯片不同的封装方式,可以表现为球形、针型等。软件上采用常用一组无符号的整数[0-maxpin]来表示。

Pingroups: 外围设备通常都不只一个引脚,比如SPI,假设接在soc的{0,8,16,24}管脚,而另一个设备I2C接在SOC的{24,25}管脚。我们可以说这里有两个pin groups。很多控制器都需要处理pin groups。因此管脚控制器子系统需要一个机制用来枚举管脚组且检索一个特定组中实际枚举的管脚。

Pinconfig: 管脚可以被软件配置成多种方式,多数与它们作为输入/输出时的电气特性相关。例如,可以设置一个输出管脚处于高阻状态,或是“三态”(意味着它被有效地断开连接)。或者可以通过设置将一个输入管脚与VDD或GND相连(上拉/下拉),以便在没有信号驱动管脚时可以有个确定的值

Pinmux:引脚复用功能,使用一个特定的物理管脚(ball/pad/finger/等等)进行多种扩展复用,以支持不同功能的电气封装的习惯。

Devicetree: 犹如它的名字,是一颗包括cpu的数量和类别,内存基地址,总线与桥,外设连接\中断控制器和、gpio以及clock器等系统资源的树,Pinctrl驱动支持从device tree中定义的设备节点获取pin的配置信息。

script : 指的是打包到img中的sys_config.fex文件. 包含系统各模块配置参数。

一、驱动框架

总体框架

Sunxi Pinctrl 驱动模块的框架如下图所示,整个驱动模块可以分成4个部分:pinctrl api、pinctrl common frame、sunxi pinctrl driver and board configuration。


Pinctrl api: pinctrl提供给上层用户调用的接口。

Pinctrl  framework: Linux提供的pinctrl 驱动框架。

Pinctrl sunxi driver: sunxi平台需要实现的驱动。

Board configuration: 设备pin配置信息,格式device tree source 或者sys_config.

Pinctrl framework 主要处理pinstate、pinmux 和pinconfig三个功能,pinstate和pinmux、pinconfig映射关系如下图所示。

系统运行在不同的状态,pin配置有可能不一样,比如系统正常运行时,设备的pin需要一组配置,但系统进入休眠时,为了节省功耗,设备pin需要另一组配置。Pinctrl framwork能够有效管理设备在不同状态下的引脚配置。



二、外部接口
 1.pinctrl
 pinctrl_get
 pinctrl_put
 devm_pinctrl_get
 devm_pinctrl_put
 pinctrl_lookup_state
 pinctrl_select_state
 devm_pinctrl_get_select
 devm_pinctrl_get_select_default
 pin_config_get
 pin_config_set
 pin_config_group_get
 pin_config_group_set


2.gpio
 gpio_request
 gpio_free
 gpio_direction_input
 gpio_direction_output
 __gpio_get_value
 __gpio_set_value
 of_get_named_gpio


相关文章推荐

linux设备树中pinctrl的配置(上)

最近在移植linux,用到kernel版本为3.18.22和4.1.3,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置 在...

基于linux 3.10.49内核的pinctrl流程分析

基于linux 3.10.49内核的pinctrl流程分析 linux kernel 3.10.49+ pinctrl驱动的platform注册就不说了, 无非就是platform_driver...

imx6设备树pinctrl解析

最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。 1、普通设置 在配置串...

基于linux 3.10.49内核的pinctrl流程分析 补充

基于linux 3.10.49内核的pinctrl流程分析 补充 linux kernel 3.10.49+ 重要结构体: struct pinctrl_desc {          ...

Linux内核中的pinctrl子系统应用实例

Linux内核中的pinctrl子系统应用实例     由于近期在做一个项目用到了pinctrl子系统,但是对pinctrl子系统了解又不是很多,所以遇到了麻烦,但是找度娘发现很少有同行对pinctr...

PINCTRL子系统

PINCTRL子系统用于处理: - 枚举和命名控制引脚 - 复用管脚,pad,金手指。 - 配置管脚、pad、金手指,如软件控制的偏置和驱动模式指定的管脚,如上拉/下拉,开漏极、...

全志H3平台pinctrl模块分析

1 概要 Linux内核中提供了pinctrl子系统,目的是为了统一各SoC厂商的pin脚管理,避免各SoC厂商各自实现相同的pin脚管理子系统,减少SoC厂商系统移植工作量。 1.1 主...
  • dlijun
  • dlijun
  • 2016年05月31日 18:16
  • 4447

原理:pinctrl基础

原有GPIO配置框架: 之前所有的gpio操作都是通过gpiolib来实现,常用的api包括: staticinline int gpio_request(unsigned gpio, const...
  • weijory
  • weijory
  • 2017年02月09日 14:15
  • 548

Linux之pinctrl subsystem

概述:在各个平台(cpu厂商)上,都会用很多pin用于和外设通讯,同一个pin也会有多种功能,如同一个pin具有gpio,spi,uart,I2C等功能,这些功能会根据需求切换,以及在不同功能下都会上...
  • eZiMu
  • eZiMu
  • 2016年11月20日 23:11
  • 428

linux内核中的GPIO系统之(2):pin control subsystem

linux内核中的GPIO系统之(2):pin control subsystem 作者:linuxer 发布于:2014-7-26 18:24 分类:GPIO子系统 一、前言 在linux...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux PINCTRL
举报原因:
原因补充:

(最多只允许输入30个字)