a5d2 mac 驱动分析

2.6内核以后的多数驱动都是基于平台总线驱动模型(platform),对于平台总线来说,无非是两块组成

platform_driver和platform_device,在a5d2的bsp中,因为引入了device tree,因此,代码里已经看不到

platform_device了,下面以mac驱动为实例来分析device tree

1. 下面两段代码实现了macb平台驱动的注册

driver/net/ethernet/cadence/macb.c

include/linux.h


2. macb平台设备的创建是由设备树实现


3. 当注册驱动的时候,回调用platform_match这个函数进行driver和device的匹配,

     static int platform_match(struct device *dev, struct device_driver *drv)

     static inline int of_driver_match_device(struct device *dev, const struct device_driver *drv)

     const struct of_device_id *of_match_device(const struct of_device_id *matches, const struct device *dev)

     const struct of_device_id *of_match_node(const struct of_device_id *matches, const struct device_node *node)

     static const struct of_device_id *__of_match_node(const struct of_device_id *matches, const struct device_node *node)

     static int __of_device_is_compatible(const struct device_node *device,const char *compat, const char *type, const char *name)

     通过上面的调用流程,最终会匹配设备树的compatible与platform_driver的of_match_table(下图)

    

从上图可以看到,最终回匹配到sama5d2-gen,匹配成功后,便会调用macb_probe函数

在macb_probe函数中进行mdiobus的注册,mdiobus的实现在mdio_bus.c


接下来就是从设备树中读取管脚配置,并配置管脚复用

int pinctrl_bind_pins(struct device *dev)

struct pinctrl *devm_pinctrl_get(struct device *dev)

struct pinctrl *pinctrl_get(struct device *dev)

static struct pinctrl *create_pinctrl(struct device *dev)

int pinctrl_dt_to_map(struct pinctrl *p)

static int dt_to_map_one_config(struct pinctrl *p, const char *statename, struct device_node *np_config)

static int dt_remember_or_free_map(struct pinctrl *p, const char *statename, struct pinctrl_dev *pctldev,
       struct pinctrl_map *map, unsigned num_maps)

最终在这个函数的for循环里,可以打印出解析好的管脚配置

map[i].data.mux.group   为管脚的名字,如PB14

map[i].data.mux.function 为管脚的功能,为GPIO,A,B,C,D,E,F对应sama5d2-pinfunc.h中0,1,2,3,4,5,6

map[i].dev_name 为设备节点名称,如 f8008000.ethernet

map[i].name 为 pinctrl-names 的值

map[i].ctrl_dev_name 管脚复用节点节点的名称,如fc038000.pinctrl


上面的函数调用完成了设备树管脚配置的解析,解析完成后,调用

static int atmel_pmx_set_mux(struct pinctrl_dev *pctldev, unsigned function, unsigned group)

来实现真正的管脚配置寄存器的写入

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

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

相关文章

10以内的分解与组成怎么教_【一年级数学】(上)10以内的分与合技巧及练习题...

《10以内的分与合》知识点数的组成:一个数(1除外)分成几和几,先把这个数分成1和几,依次分到几和1为止。例如:5的组成有1和4、2和3、3和2、4和1。把一个数分成几和几时,要有序地进行分解,防止重复或遗漏。《…

交通与计算机杂志社,交通信息与安全

期刊名称:交通信息与安全主管单位:中华人民共和国教育部主办单位:武汉理工大学;交通计算机应用信息网期刊级别:国家级国际刊号:ISSN:1674-4861国内刊号:CN:42-1781/U邮发代号&#x…

k1658停运到什么时候_最近网传的春节快递停运时间表,是假的!

“我有货,你有钱,其间没有快递员。”最近,杭州市民梁先生的朋友圈里,突然火了一张图片。标记为2019年日历的这张图片上,1月25日和2月12日之间的日期都被白线框定,并打出了“其间没有快递员”的字样。还有一…

a5d2 phy驱动

1. 下面代码实现了phy驱动的实现和注册 2. device tree实现了phy的device 3. 在mdio总线注册后,总线会调用总线驱动的match函数,进行device和driver的匹配 static int mdio_bus_match(struct device *dev, struct device_driver *drv) return (phydrv-…

vs2008配置winddk

Vs2008配置winddk 1、 安装winddk,我安装在了c盘下; 2、 电脑-》属性-》环境配置里 系统变量里加入 DDKBASE,其值是 3、 path变量里增加 ;C:\WinDDK\7600.16385.1; 第二大步:(非常关键) 1、 vs2008里 工具…

android跨进程事件注入(程序模拟用户输入)

转载请注明出处 早想写这篇,一直没空,现在总结下。 需求: 需要在程序内模拟用户输入,比如点击屏幕,或者输入键盘。模拟用户的滑动等。具体的需求,比如测试的时候,测试打开浏览器1000次。或者通过…

三菱d700变频器接线图_图解PLC与变频器通讯接线

plc与变频器两者是一种包含与被包含的关系,PLC与变频器都可以完成一些特定的指令,用来控制电机马达,PLC是一种程序输入执行硬件,变频器则是其中之一。但是PLC的涵盖范围又比变频器大,还可以用来控制更多的东西&#xf…

a5d2启动分析

A5D2对外部存储设备的启动顺序如下图: SDMMC_1接的sd卡,SDMMC_0接的emmc, SPI_0接的串行flash,当外部存储都不可用或没有启动程序的话,会直接进入sam-ba monitor,就可以执行sam-ba提供的各种烧写脚本了。 目前我们使用的烧写脚本…

软件测试菲律宾,英雄联盟手游菲律宾测试资格怎么得 菲律宾测试资格获取攻略[多图]...

英雄联盟手游菲律宾服务器将先行开放测试,所有想体验游戏的玩家可以申请获得测试资格来优先体验,下面各位玩家一起来看一下测试资格的获取方法吧。目前游戏只能够在外服测试,而且是菲律宾的服务器才行,这是国外游戏测试的一个老套…

ug建模文本怎么竖着_UG建模知乎答疑练习小集锦

持续更新中……solidworks 如何在圆弧边折弯?​www.zhihu.comsolidworks像这样使用扫描为什么得不到结果?​www.zhihu.com请问一下solidworks像我这样使用扫描加了引导线但为什么没有反应(想扫描一个杨桃那样的东西)?​www.zhihu…

win10 iis网站服务器,windows10如何搭建IIS服务器

web服务器无处不在,本次教程主要简单介绍一个简单的web服务IIS,IIS主要适用于ASP.NET、ASP等语言使用。1、打开控制面选择程序和功能2、点击启用或关闭windows功能打开一个小框框提供给用户配置相关软件,本次主要打开IIS功能 ,具体…

表格数字乘以百分比怎么算_EXCEL记住这两个快捷键,1秒种设好数字格式

你还在用右键设置单元格格式来设置千分位吗?你还在用右键设置单元格格式来设置百分比吗?今天小马教大家两个快捷键,记住这两个快捷键,1秒钟设好数字格式。设置数字的千分位 CtrlShift1可能这个数字比较难记,可以把1想象…

查看服务器文件夹,远程查看服务器文件夹内的文件夹

远程查看服务器文件夹内的文件夹 内容精选换一换请使用Mind Studio的安装用户进行升级操作,在升级前请先登录到后台服务器,切换到root用户在/usr/bin目录下执行./add_sudo.sh username脚本进行加权操作,使用命令为:界面参数解释如…

linux tao环境 安装_Linux安装jdk8及环境变量配置

众所周知,Java项目部署到Linux服务器运营是需要Java运行环境jdk的,接下来我就总结一下我自己的见解(如有意见、建议欢迎各位指教)。前言:搭建环境,所需要的安装包、工具例如:Xshell、FileZilla、…

A5D2 GPIO测试

1. 首先构建设备树,此例中,测试两个GPIO管脚,一个做输入中断,一个做输出 每个GPIO需要分别描述,其中,label随意,pioA后面的数字,可以在sama5d2-pinfunc.h文件中找到 这是管脚功能复用…

中如何计算工龄_在Substrate中如何计算交易权重

建议在阅读本文之前,先掌握关于Substrate中交易费用设计的基本概念。如果还没有了解的童鞋,请移步: Kaichao:Substrate 区块链应用的交易费用设计​zhuanlan.zhihu.com读完Substrate区块链应用的交易费用设计的小伙伴,…

安卓文件共享服务器,安卓文件共享云服务器

安卓文件共享云服务器 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。内网环境下,Windows云服务器之间怎样实现文件夹共…

linux curl命令验证服务器断点续传支持

有个同事说,发现现在对外下载安装包的服务器不支持断点续传,我听了一阵纳闷,lighttpd server对于静态文件应该默认支持断点续传的,登机器查看lighttpd配置文件发现 对断点续传的支持被禁用了,lighttpd的说明里对该配置…

代码补全_AI加持,Kite增加智能代码补全功能:减少一半操作,实时补全

代码补全工具 Kite 近日更新了最新的版本,增加了名为「Intelligent Snippets」的新功能。这一功能可以帮助开发者更为智能和高效的补全 Python 代码中的函数命令了。机器之心报道,机器之心编辑部。Kite 是一个著名的 Python 代码补全工具,支持…

Linux workqueue工作原理

1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然…