AI代码解释 struct i2c_algorithm{//i2c模式下,收发函数接口int(*master_xfer)(struct i2c_adapter*adap,struct i2c_msg*msgs,int num);//用于SMBUS模式下,收发函数接口int(*smbus_xfer)(struct i2c_adapter*adap,u16 addr,unsigned short flags,char read_write,u8 command,int size,union i2c_smbus_data*...
i2c_adapter_xxx_start();/*产生起始位*/if(msgs[i]->flags & I2C_M_RD) {/*读取*/i2c_adapter_xxx_setaddr((msg->addr <<1) |1);/*发送从设备地址*/i2c_adapter_xxx_wait_ack();/*获得从设备的ACK*/i2c_adapter_xxx_readbytes(msgs[i]->buf,msgs[i]->len);/*读取len长度的数据到buf中...
id_table 是传统的、未使用设备树的设备匹配 ID表 3. I2C设备 I2C设备结构体i2c_client 结构体定义在 include/linux/i2c.h 文件中,内容如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct i2c_client { unsigned short flags; /* div., see below */ unsigned short addr; /* chip address...
id_table:用于指定驱动程序支持的I2C设备ID列表,以便匹配对应的设备。 这些结构体共同构成了Linux内核中的I2C驱动框架,提供了对I2C总线、适配器和设备的抽象和管理功能。开发者可以基于这些结构体来编写自己的I2C驱动程序,并实现与I2C设备的通信和控制。所以我们的工作就是填充这些结构体然后调用对应的接口把我们填充好的...
unsigned short addr; //从设备地址,来源于设备树中的reg = <0x68> char name[I2C_NAME_SIZE]; //用于与i2c_driver进行匹配的compatible信息 struct i2c_adapter *adapter; struct device dev; }; //创建i2c_client的函数 struct i2c_client * i2c_new_device(struct i2c_adapter *adap , struct i2c_board...
static const struct i2c_device_id at24cxx_id_table[] = { { "at24c08", 0 }, {} }; static int at24cxx_detect(struct i2c_client *client, struct i2c_board_info *info) { /* 能运行到这里, 表示该addr的设备是存在的,即dev链表中是有这个设备的 ...
compatible : 与驱动代码中的 i2c_driver.driver.of_match_table.compatible属性匹配 reg : I2C 从机设备地址。驱动与设备树匹配成功后,该值存储在 i2c_client.addr 中。 AI检测代码解析 pinctrl_i2c1: i2c1grp { fsl,pins = < MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0 ...
I2C_BOARD_INFO 宏是设置 i2c_board_info 的 type 和 addr 这两个成员变量。②使用设备树 在使用...
static int i2c_device_probe(struct device *dev){ status = driver->probe(client, i2c_match_id(driver->id_table, client));} 1. 「小结:」通过以上分析,基本上可以了解到i2c_driver与i2c_client匹配机制的流程。在i2c_driver驱动注册时,会先将过of_device_id与client->name进行匹配,当发现匹配成功后,...