全志H3平台pinctrl模块分析

本文介绍了Linux内核的pinctrl子系统在全志H3平台上如何管理pin脚,包括主要功能、驱动加载流程、与GPIO的交互,以及相关接口函数的分析。通过解析sys_config.fex文件,实现pin脚的配置和管理,以支持系统中不同模块的需求。

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

概要

Linux内核中提供了pinctrl子系统,目的是为了统一各SoC厂商的pin脚管理,避免各SoC厂商各自实现相同的pin脚管理子系统,减少SoC厂商系统移植工作量。

1.1 主要功能

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

2. 管理这些pin的复用(Multiplexing)。对于SOC而言,其引脚除了配置成普通GPIO之外,若干个引脚还可以组成一个pin group,形成特定的功能。例如pin number是{ 0, 8, 16, 24 }这四个引脚组合形成一个pin group,提供SPI的功能。pin control subsystem要管理所有的pin group。

3. 配置这些pin的特性。例如配置该引脚上的pull-up/down电阻,配置drive strength等。

4. 与GPIO子系统的交互

5. 实现pin中断

1.2 核心驱动源码文件

1.3 总体框架


2源码分析

kernel配置文件: lichee/linux-3.4/arch/arm/configs/sun8iw7p1smp_android_defconfig

系统配置文件:lichee\tools\pack\chips\sun8iw7p1\configs\dolphin-p1\sys_config.fex

arch/arm/mach-sunxi/ sys_config.c //分析、处理sys_config.fex文件。

drivers/pinctrl/ core.c //创建debug fs,提供pinctrl_register等函数接口。

drivers/pinctrl/ pinctrl-sun8iw7.c //该平台下的pin脚数据

2.1 驱动加载时主流程代码

(1) drivers/pinctrl/ pinctrl-sunxi.c


1 sunxi_pinctrl_probe函数:

pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL); // devm_kzalloc基于slab分配在物理上连续的实际的内存, 并且带有释放内存的回调函数,当该设备与驱动分开时,自动释放内存。

pctl->desc = (struct sunxi_pinctrl_desc *)(&sunxi_pinctrl_data);

 

1.1 sunxi_pinctrl_build_state(pdev);//pctl->desc的子项数据复制到pctl相应子项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值