一. 简介
Linux 内核也将 I2C 驱动分为两部分:
(1) I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。
(2) I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。
前面一篇文章简单分析了 IMX6ULL的I2C控制器的驱动实现,本文继续 IMX6ULL的I2C控制器驱动的分析。
二. I.MX6ULL的I2C控制器的驱动分析
1. i2c_imx_algo 结构体
前一篇文章分析到:
i2c_imx_probe 函数函数主要的工作就是以下两点:
(1) 初始化 i2c_adapter ,设置 i2c_algorithm 为 i2c_imx_algo ,最后向 Linux 内核注册i2c_adapter 。
(2) 初始化 I2C1 控制器的相关寄存器。
i2c_imx_algo 包含 I2C1 适配器与 I2C 设备的通信函数: master_xfer()函数。
i2c_imx_algo 结构体定 义如下:
static struct i2c_algorithm i2c_imx_algo = {
.master_xfer = i2c_imx_xfer,
.functionality = i2c_imx_func,
};