GPIO配置和管理

本文介绍了GPIO在BootLoader阶段的配置,如gpio_tlmm_config()函数的使用,并讲解了GPIO驱动强度的不同定义。此外,还阐述了GPIOLIB架构中的sysfs用户接口,包括GPIO在Sysfs的路径中的三种入口,以及如何通过内核代码导出GPIO到sysfs并创建符号链接。

BootLoader阶段

BootLoader阶段可以调用gpio_tlmm_config()函数完成GPIO_CFGn寄存器的配置,举例如下:
#define TLMM_VOL_UP_BTN_GPIO    85  
gpio_tlmm_config(TLMM_VOL_UP_BTN_GPIO, 0,GPIO_INPUT, GPIO_PULL_UP, GPIO_2MA, GPIO_ENABLE)  
gpio_tlmm_config()定义如下:  
void gpio_tlmm_config(uint32_t gpio,uint8_t func,  
                     uint8_tdir, uint8_t pull,  
                     uint8_tdrvstr, uint32_t enable)  
{  
       uint32_tval = 0;  
   
       val|= pull;  
       val|= func << 2;  
       val|= drvstr << 6;  
       val|= enable << 9;//如果func=0,enable=1为输出,enable=0为输出  
   
       writel(val,(uint32_t *)GPIO_CONFIG_ADDR(gpio));  
       return;  
}

其中驱动强度的可用定义如下:

/* GPIO TLMM: Drive Strength */  
#define GPIO_2MA        0  
#define GPIO_4MA        1  
#define GPIO_6MA        2  
#define GPIO_8MA        3  
#define GPIO_10MA       4  
#define GPIO_12MA       5  
#define GPIO_14MA       6  
#define GPIO_16MA       7

GPIOLIB架构

使用gpiolib实现框架的平台可选择配置一个GPIO的sysfs用户接口,这不同于debugfs接口,因为它提供GPIO方向和值的控制,而不仅是显示gpio状态摘要,另外,它可在没有调试支持的产品级系统中使用。

GPIO在Sysfs的路径/sys/class/gpio中有三类入口:

1)用来获取GPIO用户控件控制的控制接口

控制接口是只写的,有export和unexport,用于请求内核导出GPIO的控制,成功的话会创建GPION节点。
2)GPIO本身
即/sys/class/gpio/gpioN节点
3)GPIO控制器(gpiochip实例)

这里的label包含的设备信息(如1000000和modalias的值)对应于msm8937-pinctrl.dtsi中的内容。

内核代码中还可以直接完成GPIO导出到sysfs的功能:
1)首先通过gpio_request()申请GPIO
2)内核驱动成功申请一个GPIO后,可通过gpiod_export()使它在sysfs接口可见(如gpio19)

3)在GPIO被导出之后,gpiod_export_link()允许在sysfs文件系统的任何地方创建一个到该GPIO sysfs节点的符号链接。这样驱动就可以通过一个描述性名字,在sysfs中他们所拥有的设备下提供一个接口(到该GPIO sysfs节点的)。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值