i2c_peripherals_driver

linux kernel i2c外设驱动的编写,可以分为四步:

通过i2c_transfer()读写i2c外设寄存器

  1. 配置设备树dts i2c子节点

  2. 注册/注销 struct i2c_driver变量

  3. 当设备树与驱动匹配后,调用probe函数

  4. 读写i2c外设寄存器

通过regmap API读写i2c外设寄存器

  1. 配置设备树dts i2c子节点(同上)

  2. 注册/注销 struct i2c_driver变量(同上)

  3. 当设备树与驱动匹配后,调用probe函数

  4. 读写i2c外设寄存器

通过i2c_transfer()读写i2c外设寄存器

1. 配置设备树dts i2c子节点

&i2c {
    status = "okay";

    xxx@1e {
        compatible = "xxx,xxx";
        reg = <0x1e>; // i2c外设地址,7bits

        status = "okay";
    };
};

2. 注册/注销struct i2c_driver变量

  • 定义struct i2c_driver变量

  • 调用相关API注册/注销

3. 当设备树与驱动匹配后,调用probe函数

设备树与驱动匹配,即设备树dts i2c子节点的compatible属性 与 xxx_of_match_table结构体的.compatible变量相同,调用probe函数

  • 通过client->addr获得i2c外设地址

  • 通过client->adapter获得i2c控制器

  • 通过of_前缀函数获得其它dts资源

4. 读写i2c外设寄存器

  • 读操作

  • 写操作

通过regmap API读写i2c外设寄存器

1. 配置设备树dts i2c子节点(同上)

2. 注册/注销struct i2c_driver变量(同上)

3. 当设备树与驱动匹配后,调用probe函数

设备树与驱动匹配,即设备树dts i2c子节点的compatible属性 与 xxx_of_match_table结构体的.compatible变量相同,调用probe函数

  • 通过client->addr获得i2c外设地址

  • 通过client->adapter获得i2c控制器

  • 通过of_前缀函数获得其它dts资源

4. 读写i2c外设寄存器

  • 读操作

  • 写操作

Last updated

Was this helpful?