linux pinmux 引脚多路复用驱动分析与使用
2016-12-19 14:44
211 查看
一、网上的文章一般都是分析pinctrl驱动的,从头到尾分析了一遍,搞的相当复杂,实际上没那么复杂
二、pinmux的概要分析,有关文件如下/pinctrl/core.c、/pinctrl/Pinmux.c、平台相关的结构体pinctrl_state,pinctrl_setting,pinmux_ops,pinctrl_desc,pinctrl_map,基本原理如下:
1、通过在平台相关的pinctrl驱动初始化函数pinctrl_probe,调用pinctrl_register函数,将平台相关的,已经定义好的函数指针等通过结构体封装,传给该函数,相当于已经注册好了;
2、不管是core.c里面的实现,还是Pinmux.c里面的实现,无非是最终会通过回调函数,调用到上面提到的平台相关的已经定义好的实现,包括以功能为依据的分组,比如SPI、UART的引脚的配置,完成引脚的功能配置
3、这就是linux下面抽象出了各种功能,形成了一个中间件,对上层app提供统一的接口,下层各个soc厂商按照定义好的格式对其进行实现,最后上层app就会调用到底层来
4、当然,pinmux的实现利用了很多机制,比如链表的插入、遍历等等
三、具体到代码,如何调用API实现引脚功能复用呢?
1、直接在代码中调用这个API即可,devm_pinctrl_get_select( struct device *dev, const char *name),参考其他地方的调用,可以直接针对功能进行引脚复用的配置,当然,前提是pinctrl-soc.c里面已经做好了相关配置,这里的soc指的是ARM平台,比如高通、三星、MTK、TI等等。
二、pinmux的概要分析,有关文件如下/pinctrl/core.c、/pinctrl/Pinmux.c、平台相关的结构体pinctrl_state,pinctrl_setting,pinmux_ops,pinctrl_desc,pinctrl_map,基本原理如下:
1、通过在平台相关的pinctrl驱动初始化函数pinctrl_probe,调用pinctrl_register函数,将平台相关的,已经定义好的函数指针等通过结构体封装,传给该函数,相当于已经注册好了;
2、不管是core.c里面的实现,还是Pinmux.c里面的实现,无非是最终会通过回调函数,调用到上面提到的平台相关的已经定义好的实现,包括以功能为依据的分组,比如SPI、UART的引脚的配置,完成引脚的功能配置
3、这就是linux下面抽象出了各种功能,形成了一个中间件,对上层app提供统一的接口,下层各个soc厂商按照定义好的格式对其进行实现,最后上层app就会调用到底层来
4、当然,pinmux的实现利用了很多机制,比如链表的插入、遍历等等
三、具体到代码,如何调用API实现引脚功能复用呢?
1、直接在代码中调用这个API即可,devm_pinctrl_get_select( struct device *dev, const char *name),参考其他地方的调用,可以直接针对功能进行引脚复用的配置,当然,前提是pinctrl-soc.c里面已经做好了相关配置,这里的soc指的是ARM平台,比如高通、三星、MTK、TI等等。
相关文章推荐
- linux下USB驱动分析以及libusb库的使用
- Linux应用编程基础之多路复用:select和poll的简单使用示例
- 【linux驱动分析】ioctl函数的使用
- linux 底层驱动中断分析和一般使用(顶半部与底半部)
- libevent项目分析 (二) -- I/O多路复用基础 .事件驱动
- Linux下的多路复用和unix套接字的综合使用
- linux驱动开发之多路复用poll+按键点灯+中断+标准输入输出
- 基于linux-2.6.38.8内核的SDIO/wifi驱动分析&&android 平台USB wifi驱动移植及使用 SDIOwifi
- 【linux驱动分析】ioctl函数的使用
- LINUX 网络编程---多路复用和信号驱动I/O(王德仙)2012-04-07 客户端和服务器端编写完成,明天开始学习poll 和epoll
- Linux USB驱动框架分析
- Linux USB驱动框架分析
- Linux-2.6.20的LCD驱动分析(一)[转]
- 学习内核---Linux网卡驱动分析(转)
- 学会使用Linux性能分析工具
- Linux initrd的分析、创建和使用(转)
- 使用Gnu gprof进行Linux平台下的程序分析
- uClinux2.6(bf561)的NorFlash驱动实现分析(9): 驱动的使用
- Linux-2.6.20的LCD驱动分析(三)[转]
- Tcpdump命令的使用与示例——linux下的网络分析