一. 简介
Linux 内核也将 I2C 驱动分为两部分:
(1) I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。
(2) I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。
前面几篇文章学习了I2C驱动框架。
本文来简单分析一下 IMX6ULL的IMX6ULL的I2C控制器的驱动。
二. I.MX6ULL的I2C控制器的驱动分析
1. 查找 IMX6ULL的I2C控制器的驱动
我们讲解了
Linux
下的
I2C
驱动框架,重点分为
I2C
适配器驱动和
I2C
设备驱动,
其中
I2C
适配器驱动就是
SOC
的
I2C
控制器驱动。
I2C
设备驱动是需要用户根据不同的
I2C
设
备去编写。
而
I2C
适配器驱动一般都是
SOC
厂商去编写的,比如,
NXP
就编写好了
I.MX6U
的
I2C
适配器驱动。在
imx6ull.dtsi
文件中找到
I.MX6U
的
I2C1
控制器节点,节点内容如下所示:
i2c1: i2c@021a0000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c";
reg = <0x021a0000 0x4000>;
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_I2C1>;
status = "disabled";
};
重点关注 i2c1 节点的 compatible 属性值,因为通过 compatible 属性值可以在 Linux 源码里
面找到对应的驱动文件。
这里
i2c1
节点的
compatible
属性值有两个:“
fsl,imx6ul-i2c
” 和 “
fsl,imx21-
i2c