linux下的gpio转串口驱动,X-026-KERNEL-Linux gpio driver的移植之gpio range

X-026-KERNEL-Linux gpio driver的移植之gpio range

作者:wowo 发布于:2017-9-27 22:27

分类:X Project

1. 前言

我们在[1][2]中提到过,鉴于gpio的特殊性,pinctrl subsystem特意留了一个后门(gpio range),gpio driver可以通过这个后门直接向pinctrl subsystem申请将某个pin用作gpio功能。本文将根据一个简单的示例,介绍这个后门的使用方法,以加深对相关机制的理解。

注1:本文的测试方法和[3]中的一致,即:通过gpiolib sysfs api控制LED0(GPIOA19)的亮灭,因而不再罗列详细步骤。

2. 移植步骤

由[2]可知,gpio range的主要目的就是将gpio命名空间(gpio)转换为pinctrl命名空间(pin),并由pinctrl subsystem访问硬件实现gpio有关的功能控制。因此gpio range的移植步骤注要包括:

2.1 pinctrl命名空间和gpio命名空间的定义

参考”X-025-KERNEL-Linux gpio driver的移植之基本功能[3]”中有关gpiochip的实现,本例中的GPIOA19的gpio命名空间为:

gpiochip:gpioa

编号:19

同理,按照“X-023-KERNEL-Linux pinctrl driver的移植[4]”中的方法,结合bubblegum-96的原理图,我们可以把GPIOA19所在的管脚编号为"F3",它对应的pinctrl命名空间为:

pin controller:pinctrl@0xe01b0000

编号:52

@@ -68,6 +68,7 @@ static const struct pinctrl_pin_desc s900_pins[] = {

PINCTRL_PIN(15, "B6"),

PINCTRL_PIN(24, "C5"),

PINCTRL_PIN(37, "D8"),

+       PINCTRL_PIN(52, "F3"),

PINCTRL_PIN(60, "G1"),

PINCTRL_PIN(61, "G2"),

};

2.2 将gpio number转换为pin number

命名空间定义完成后,可以按照[2]中的步骤,在dts中定义一个gpio range,将gpio number转换为pin number,如下:

@@ -39,7 +39,7 @@

clock-frequency = <24000000>;

};

-       pinctrl@0xe01b0000 {

+       pinctrl1: pinctrl@0xe01b0000 {

compatible = "actions,s900-pinctrl";

reg = <0 0="" 0xe01b0000="" 0x550="">;

@@ -56,6 +56,7 @@

gpioa: gpio@0xe01b0000 {

compatible = "actions,s900-gpio";

reg = <0 0="" 12="" 0xe01b0000="">;

base = <0>;

+               gpio-ranges = ;

};

其中黄色背景那一行的含义是:将gpioa中的19号gpio,和pinctrl1中的52号pin,对应。

2.3 修改gpio driver和pinctrl driver,二者配合,完成gpio的request、free、direction_input以及direction_output等操作

1)修改pinctrl driver,实现pinmux_ops中gpio_request_enable、gpio_disable_free、gpio_set_direction等回调函数

这三个API的输入参数都是range指针和offset(如下所示),通过它们可以找到这个GPIO所在的gpiochip、GPIO bank、GPIO number、对应pin所在的pin controller、pin number等信息。基于这些信息,可以获得相应的硬件信息(寄存器、bit偏移等)。

int (*gpio_request_enable) (struct pinctrl_dev *pctldev,

struct pinctrl_gpio_range *range,

unsigned offset);

void (*gpio_disable_free) (struct pinctrl_dev *pctldev,

struct pinctrl_gpio_range *range,

unsigned offset);

int (*gpio_set_direction) (struct pinctrl_dev *pctldev,

struct pinctrl_gpio_range *range,

unsigned offset,

bool input);

2)修改gpio chip的.request、.free、.direction_input、.direction_output等回调函数,让它们调用pinctrl subsystem提供的相关API,如下:

int pinctrl_request_gpio(unsigned gpio) ;

void pinctrl_free_gpio(unsigned gpio) ;

int pinctrl_gpio_direction_input(unsigned gpio);

int pinctrl_gpio_direction_output(unsigned gpio);

注2:有些硬件平台,在完成上面步骤1)的时候,可能会遇到一些困扰,例如怎么根据gpio和pin的信息,找到对应的硬件控制信息(寄存器、bit偏移等),这时我们可以灵活处理。例如在本文例子所使用的bubblegum-96平台上,gpio的pinmux功能并没有单独的寄存器控制,而是通过gpio的in或者out功能的使能,覆盖其它的pinmux功能。此时我们可以把硬件配置的操作交给gpio driver,而pinctrl driver只处理管脚的互斥。具体可参考下面patch的改动。

3. 测试步骤

请参考[3]中的测试。测试结果如下(看到s900_gpio_request_enable中的打印,就说明我们的移植成功了):

/ # mkdir /sys

/ # mount -t sysfs /sys /sys

/ # echo 19 > /sys/class/gpio/export

[   55.136218] owl_pinctrl e01b0000.pinctrl: s900_gpio_request_enable, range(19/52/1), offset 52

/ # echo out > /sys/class/gpio/gpio19/direction

[   86.886343] owl_gpio e01b0000.gpio: offset 19, value 0

/ # echo 1 > /sys/class/gpio/gpio19/value

[  100.223812] owl_gpio e01b0000.gpio: offset 19, value 1

/ # echo 0 > /sys/class/gpio/gpio19/value

[  120.467468] owl_gpio e01b0000.gpio: offset 19, value 0

4. 参考文档

[5] Schematics_Bubblegum96.pdf

原创文章,转发请注明出处。蜗窝科技,www.wowotech.net。c6a6308114f401be7df747ae46f2b4db.png

评论:

bigpillow

2017-11-10 10:54

刚写完一套GPIO driver.

当时考虑到不同chip通用性使用了gpiochip_add_pin_range function

现在看看在DTS里面原来这么方便。

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

d4e3789769c8ad44c7e403863bfc3822.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长文综述:从大数据中寻找复杂系统的核心变量

文章来源&#xff1a;【集智俱乐部】原文链接&#xff1a;https://mp.weixin.qq.com/s/IIliI5plz2UBUMAzVpxClw导语尽管大数据的收集越来越容易&#xff0c;但随着从微观到宏观的尺度&#xff08;scale&#xff09;变化&#xff0c;系统行为会发生非线性的变化&#xff0c;这让…

android设置主题背景为壁纸_ppt模板防早恋安全教育主题班会课件ppt,两个青春期的孩子画面为背景...

ppt模板--防早恋安全教育主题班会课件ppt这是一套防早恋安全教育主题班会课件ppt&#xff0c;共26页。PPT封面以简约的白色背景&#xff0c;五彩斑斓的地面象征孩子们丰富多彩的学生生活&#xff0c;两个青春期的孩子画面为背景&#xff0c;蓝色正体字突出主题&#xff1a;防早…

Linux下启动程序常见问题,linux系统启动流程及常见故障解决方式

Linux系统中启动的流程:1.加载bios的硬件信息以及进行自我检测 并根据设置取得第一个启动的设备2.若以硬盘方式引导 读取并执行引导扇区 MBR3.加载grub(引导程序)启动菜单(/\)4.加载内核(以只读方式进行挂载)5.挂载根目录系统 启动init进程(所有进程的鼻祖)6.读取/etc/initt…

vscode红色波浪不见了_vscode c++ 编译可以通过 但是有红色波浪线的问题

作者&#xff1a;送外卖转行计算机来源&#xff1a;SegmentFault 思否1.command p, 然后输入 >C/C选择 编辑配置(JSON)然后在工作区会出现一个.vscode文件夹, 其中会有一个.json文件的配置2.打开命令行 输入gcc -v -E -x c -会有以下的信息 ignoring nonexistent director…

云计算军事运用有啥特点

来源&#xff1a;军语研究院云计算技术被视为继大型计算机、个人计算机、互联网之后的第四次信息技术产业革命。云计算是一种围绕分布式共享计算资源的创新应用模式&#xff0c;资源提供者可以方便而快速地提供计算资源&#xff0c;而无处不在的资源需求者可以便利地使用共享的…

基于STM32的DS1302实时时钟模块应用

DS1302是一款低功耗的实时时钟芯片&#xff0c;被广泛应用于各种电子产品中。它具有准确计时、多种时间格式表示、定时报警等功能&#xff0c;适用于记录时间、日期和闹钟。在本文中&#xff0c;我们将介绍如何在基于STM32的开发环境中使用DS1302实时时钟模块&#xff0c;并给出…

在Windows 7上安装Team Foundation Server(TFS)的代理服务器(Agent)

自2009年微软发布Windows 7以来&#xff0c;经过8年的市场验证&#xff0c;Windows 7已经成为史上应用最为广泛的操作系统。但是面对技术变化的日新月异&#xff0c;2015年微软正式停止了对Windows 7的主流支持&#xff0c;并将于2020年正式结束对Windows 7的所有技术支持。这一…

王喜文:图解新基建,细说新机遇(100图)

来源&#xff1a;智造智库去年8月22日&#xff0c;华为创始人任正非签发总裁办邮件&#xff0c;大力推荐技术大神王喜文博士的5G科普PPT《认识5G&#xff0c;发展5G》&#xff0c;并报送董事会成员、监事会成员&#xff0c;主送全体员工&#xff0c;要求华为全员学习。任正非的…

基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件

这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时&#xff0c;捕获其信息并将信息传送到需要信息的对象处理。为此&#xff0c;需要一个可以分派信息的对象&#xff0c;这个对象能够正确的把信息交到正确的对象。 实现思路&#xff1a; 要实现以上的功能&…

重新定义Wi-Fi功能,Wi-Fi 6为什么要分两步?

来源&#xff1a;传感器技术Wi-Fi 6重新定义Wi-Fi&#xff0c;先是双频并发&#xff0c;然后才是6GHz下的160MHz。Wi-Fi是什么&#xff1f;它是一个基于IEEE 802.11标准的无线局域网技术。如今&#xff0c;Wi-Fi已经覆盖了绝大部分的室内场景&#xff0c;你的手机、电脑、智能音…

《科学》:中德解析新冠主要蛋白酶晶体结构,有助抑制剂研发

来源&#xff1a;澎湃新闻自新型冠状病毒引起的疫情暴发以来&#xff0c;科学家们一直在努力寻找有效的病毒抑制剂。当地时间3月20日&#xff0c;顶级学术期刊《科学》在线发表了一篇题为“Crystal structure of SARS-CoV-2 main protease provides a basis for design of impr…

render_notebook()结果没有图_来自百度的良心产品!百度iOS截长图App

我们知道百度是国内最大的搜索引擎&#xff0c;但你知道它也会出品一些和搜索无关的精品工具&#xff1f;例如在最近&#xff0c;百度就推出了一款iOS平台上的滚动截长图App&#xff0c;要知道iOS系统一直以来就不支持系统级别的截长图&#xff0c;百度这工具可谓是非常实用了&…

2020年度国家科学技术奖提名项目公示丨附全名单

来源&#xff1a;科学技术部3月24日&#xff0c;科学技术部发布了《国家科学技术奖励工作办公室公告第95号》文件。该文件称&#xff0c;2020年度国家科学技术奖提名工作已结束&#xff0c;并对2020年度国家自然科学奖、国家技术发明奖通用项目、国家科学技术进步奖通用项目受理…

linux实验试题 cp,cp命令实验,cp命令

cp命令实验&#xff0c;cp命令创建条件[rootlocalhost ~]#mkdir /source[rootlocalhost~]#mkdir /target[rootlocalhost~]#cp /etc/l*.conf /source[rootlocalhost~]#ll /sourcetotal20-rw-r--r--. 1 root root 28 Aug 10 09:24 ld.so.conf-rw-r-----. 1 root root 191 Aug 10 …

机载雷达发展简史:从蝙蝠到机载相控阵

来源&#xff1a;军事高科技在线 从地基起步蝙蝠&#xff0c;虽然像人一样拥有双眼&#xff0c;但它看起东西来&#xff0c;用到的却不是眼睛。蝙蝠从鼻子里发出的超声波在传输过程中遇到物体后会立刻反弹&#xff0c;根据声波发射和回波接收之间的…

苹果手机时区改不了怎么办_天价手机摔了怎么办?苹果:你尽管摔,坏了算我输。...

智能手机比起过去的功能机&#xff0c;好处多到数不过来&#xff0c;但有一点智能手机怎么都比不上功能机&#xff0c;那就是不抗摔。当年的很多功能机那都是可以用来砸核桃的&#xff0c;抗摔性一流&#xff0c;基本不存在摔坏的说法&#xff0c;但智能手机就不一样了&#xf…

2020 最新自动驾驶技术报告出炉:Waymo、特斯拉、沃尔沃技术方案大起底

来源&#xff1a;《2020 自动驾驶技术报告》进入 2020 年&#xff0c;自动驾驶技术的跨越式路线与渐进式路线之间的阵营划分已经十分明显。但最终自动驾驶要完全实现无人化&#xff0c;其技术还需要进行不断的迭代和发展。对于自动驾驶的技术进展&#xff0c;WEVOLVER 发布的《…

PC_excel完毕一列英文小写变大写

原创作品&#xff0c;出自 “深蓝的blog” 博客。欢迎转载&#xff0c;转载时请务必注明出处。否则追究版权法律责任。深蓝的blog&#xff1a;http://blog.csdn.net/huangyanlong/article/details/44493869 使用excel中的UPPER函数就可以实现这个目标。介绍例如以下&#xff1a…

c语言if的作用,c语言中if 语句的作用范围示例代码

c语言中if 语句的作用范围示例代码复制代码 代码如下:# include int main(void){if (1 > 2)printf("第一条表达式");printf("第二条表达式");}/*输出结果第二条表达式*/说明if语句的作用范围只有紧跟if的第一条表达式时间&#xff1a; 2013-09-06在高中…

几何画板画椭圆_几何画板条件下椭圆的26种绘制方法(二)——代数法

“几何画板是一种常用的数学软件&#xff0c;具有强大的绘图功能&#xff0c;也为我们探究椭圆的不同绘制方法提供了平台.在探究过程中&#xff0c;我们遇到了一些麻烦和困难&#xff0c;但也获得了很多意想不到的惊喜和收获&#xff01;我们将椭圆的绘制方法分为七类&#xff…