linux驱动gpiolib源码分析

gpiolib注册过程

1,gpiolib的初始化和注册在mach-xxx.c文件中板卡硬件结构体的map_io函数中完成

在这里插入图片描述

在这里插入图片描述

2,s5pv210_gpio_init函数中s5pv210_gpio_4bit是一个s3c_gpio_chip类型的全局数组,在mach-s5pv210/gpiolib.c中定义,这个结构体数组就是用来向gpiolib注册对应端口的。并对这个结构体数组的config和base成员变量进行了初始化,其中base成员变量记录了每个端口(chip)的基地址(虚拟地址)。

在这里插入图片描述

s5pv210_gpio_4bit变量定义时初始化了一部分成员变量,如每个端口(chip)的基础编号、gpio个数、端口名和中断号。

在这里插入图片描述

3,s3c_gpio_chip结构体的定义如下,这个结构体中记录了一个gpio端口的信息,如端口名、基地址、基础编号、端口的gpio个数、设置输入模式函数、设置输出模式函数、获取gpio值函数、设置gpio值函数等等。

在这里插入图片描述

chip成员变量为gpio_chip结构体类型,其成员变量意义如下:

label 端口名
requst 申请函数
free 释放函数
direction_input 设置输入模式函数
get 获取gpio值函数
direction_output 设置输出函数
set 设置gpio值函数
base 基础序号
ngpio 端口gpio个数
在这里插入图片描述

config成员变量时s3c_gpio_cfg类型大的指针,主要作用是记录gpio的上下拉函数。

在这里插入图片描述

pm成员变量是s3c_gpio_pm类型的指针,记录了电源管理的掉电保存状态函数,和上电恢复状态函数。

在这里插入图片描述

base成员变量记录了端口的基地址(虚拟地址)。

4,s5pv210_gpio_init调用samsung_gpiolib_add_4bit_chips函数完成gpiolib的注册,就是将s5pv210_gpio_4bit这个数组注册给gpiolib,其中nr_chips为s5pv210_gpio_4bit的大小。

在这里插入图片描述

5,samsung_gpiolib_add_4bit_chips函数通过轮询的方式遍历s5pv210_gpio_4bit数组,并调用samsung_gpiolib_add_4bit和s3c_gpiolib_add函数,完成每个chip(端口)的注册。其中samsung_gpiolib_add_4bit函数是对s5pv210_gpio_4bit数组的进一步初始化,s3c_gpiolib_add函数完成了真正的注册。

在这里插入图片描述

6,samsung_gpiolib_add_4bit函数给chip的direction_input和direction_output函数赋值,这两个函数通过s3c_gpio_chip结构中记录的base基地址,偏移得到control寄存器的地址,并设置gpio的输入输出模式。

在这里插入图片描述

7,s3c_gpiolib_add函数首先由对s5pv210_gpio_4bit数组对应的端口进行了初始化,如果gpio的控制寄存器为2bit,将会使用在这里给input和output函数赋值;然后给chip(端口)的set和get函数赋值。

最后通过gpiochip_add向gpiolib注册这个chip,gpiochip_add函数是gpiobil提供给芯片厂商的一个注册接口,在driver/gpio/gpiolib.c文件中定义。

在这里插入图片描述

8,gpiochip_add函数,gpiolib通过数组来记录每个gpio的描述符,这个函数将之前在三星gipo驱动中初始化好gpio_chip的值赋值给每个gpio的描述符。

在这里插入图片描述
在这里插入图片描述

参考韦东山,朱友鹏课程所做笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值