迅为IMX6ULL开发板Linux I2C设备驱动编写流程-信息描述

1 、不使用设备树文件

当开始编写 I2C 设备驱动时,首先要添加设备信息。先来看一下在不使用设备树,使用平台文件时,

如何在平台文件中添加 I2C 设备信息。

在平台文件中通过 i2c_board_info 结构体来描述一个具体的 I2C 设备。i2c_board_info 结构体如下:

295 struct i2c_board_info {

296 char type[I2C_NAME_SIZE]; /* I2C 设备名字 */

297 unsigned short flags; /* 标志 */

298 unsigned short addr; /* I2C 器件地址 */

299 void *platform_data;

300 struct dev_archdata *archdata;

301 struct device_node *of_node;

302 struct fwnode_handle *fwnode;

303 int irq;

304 };

其中 type 和 addr 这两个成员变量是必须要设置的,一个是 I2C 设备的名字,一个是 I2C 设备的器

件地址。打开 arch/arm/mach-imx/mach-mx27_3ds.c 文件,此文件中关于 OV2640 的 I2C 设备信息描述如

下:

392 static struct i2c_board_info mx27_3ds_i2c_camera = {

393 I2C_BOARD_INFO("ov2640", 0x30),

394 };

I2C_BOARD_INFO 来完成 mx27_3ds_i2c_camera 的初始化工作,I2C_BOARD_INFO 是一个宏,定义如下:

316 #define I2C_BOARD_INFO(dev_type, dev_addr) \

317 .type = dev_type, .addr = (dev_addr)

可以看出,I2C_BOARD_INFO 宏其实就是设置 i2c_board_info 的 type 和 addr 这两个成员变量。可以

在平台文件中找到许多类似的 I2C 设备,在平台文件中不仅有 I2C 设备,还有其他许多不同类型的设备,

而且设备越多,越显得平台文件非常混乱,所以就产生了设备树文件。

2 、使用设备树文件

在使用设备树文件时,只需要在设备树文件中添加相应的 I2C 设备节点就可以了,比如 NXP 官方的 EVK

开发板在 I2C1 上接了 mag3110 这个磁力计芯片,因此必须在 i2c1 节点下创建 mag3110 子节点,然后

在这个子节点内描述 mag3110 这个芯片的相关信息。打开 imx6ull-14x14-evk.dts 这个设备树文件,然后找

到如下内容:

1 &i2c1 {

2 clock-frequency = <100000>;

3 pinctrl-names = "default";

4 pinctrl-0 = <&pinctrl_i2c1>;

5 status = "okay";

6

7 mag3110@0e {

8 compatible = "fsl,mag3110";

9 reg = <0x0e>;

10 position = <2>;

11 };

......

20 };

 第 7~11 行,向 i2c1 添加 mag3110 子节点,第 7 行“mag3110@0e”是子节点名字,“@”后面的

“0e”就是 mag3110 的 I2C 器件地址。第 8 行设置 compatible 属性值为“fsl,mag3110”。第 9 行的 reg

属性也是设置 mag3110 的器件地址的,因此值为 0x0e。I2C 设备节点的创建重点是 compatible 属性和 reg

属性的设置,一个用于匹配驱动,一个用于设置器件地址。

更多了解:

你可能感兴趣的:(IMX6ULL,linux,运维,服务器)