Linux I2C驱动分析 S3C6410

2014-11-24 09:54:03 · 作者: · 浏览: 0

看Linux I2C驱动也有一段时间了,把自己理解的内容写下来,一是下次用的时候便于快速捡起来,二梳理IIC驱动复杂框架,三欢迎大家给我指正,共同进步。


Linux中I2C体系结构如下图所示(图片来源于网络)。图中用分割线分成了三个层次:用户空间(也就是应用程序),内核(也就是驱动部分)和硬件(也就是实际物理设备,这里就是6410中的i2c控制器和at24xx)。这个够清晰了吧?我们主要研究的是中间那一层。




中间一层又分为i2c设备驱动、i2c-core层、i2c控制器驱动三部分。其中i2c-core提供了i2c设备驱动和控制器驱动的注册、注销方法。其上三部分Driver、Client、i2c-dev用来描述i2c设备(如at24xx)及其驱动,下面Algorithm、Adapter、及Adapter specific code 用来描述i2c控制器驱动。


以s3c6410 linux 2.6.26下iic器件 at24xx驱动为例进行分析,主要包含以下文件。



1、i2c-core.c 实现了I2C的核心功能。


2、i2c-dev.c 实现了I2C控制器设备文件的功能。


3、At24.c 实现了at24xx系列IIC接口设备驱动。


4、i2c-s3c2410.c 实现了6410 IIC控制器驱动。


5、Algos 实现了一些IIC控制器的algorithm


6、mach-mini6410.c 定义并注册了I2C平台设备。




我们根据系统加载有关I2C模块的顺序进行分析。


1、运行 MACHINE_START .init_machine 在 arch/arm/kernel/setup.c 中被 customize_machine 调用,放在 arch_initcall() 段里面,会自动按顺序被调用。


其中


2、 看到系统注册了platform_device 我们会想到 platform_driver 在何处注册。


在 i2c-s3c2410.c 中我们看到了 i2c 平台驱动注册。


下一页主要分析