linux platform i2c 驱动理解
Posted idyllcheung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux platform i2c 驱动理解相关的知识,希望对你有一定的参考价值。
linux驱动 分为三个部分
驱动 总线 设备
总线有platform虚拟总线,i2c总线等
比如i2c-imx.c将i2c控制器注册为platform形式
platform_driver_register(&i2c_imx_driver);
platform总线的两边 分别是driver和device链表
platform_driver_register相当于在driver链表中添加了一个成员
设备树描述了device信息,扫描设备树,相当于在device链表中添加成员
i2c-imx将一些可变的控制器信息通过设备树表示,其他固定不变的部分写入i2c-imx.c driver里
platform_match会进行适配,一旦适配成功,就会执行i2c-imx.c,即driver中的probe函数来初始化i2c控制器
在i2c的probe函数中,会调用i2c_add_numbered_adapter注册i2c总线,初始化i2c_adapter和i2c_algorithm,对外提供读写API
i2c_imx->adapter.algo = &i2c_imx_algo; //这样调用i2c_transfer就对应了i2c_imx_algo中的.master_xfer
这样就有了i2c总线,如果某个设备接到了i2c总线上,比如ap3216c三合一环境光传感器
那么在i2c控制器注册的i2c总线上,device是设备树上ap3216c的信息,driver是ap3216c.c驱动
以上是关于linux platform i2c 驱动理解的主要内容,如果未能解决你的问题,请参考以下文章
i.MX6ULL驱动开发 | 11 - Linux I2C 驱动框架