数据结构设计
Read time: 1 minute(s)
管理 I2C 控制器资源的顶层结构体:
struct aic_i2c_dev { struct device *dev; void __iomem *base; struct i2c_adapter adap; struct completion cmd_complete; struct clk *clk; struct reset_control *rst; int irq; enum aic_i2c_speed i2c_speed; u16 scl_hcnt; u16 scl_lcnt; u32 abort_source; struct i2c_msg *msg; enum aic_msg_status msg_status; int buf_write_idx; int buf_read_idx; bool is_first_message; bool is_last_message; int msg_err; struct i2c_timings timings; u32 master_cfg; u32 slave_cfg; struct i2c_client *slave; };
部分变量说明:
-
cmd_complete:完成量,用于指示一个 message 是否传输完成
-
scl_hcnt:SCL 时钟高电平时钟数
-
scl_lcnt:SCL 时钟低电平时钟数
-
msg:指向当前传输的 message
-
buf_write_idx:当前 message 为 write msg 时,buf_write_idx 为写数据的计数。当前 message 为 read msg 时,buf_write_idx 为写命令的计数(I2C 模块需要每次写 read 命令,才能读出数据)。
-
buf_read_idx:读数据的计数
-
is_first_message:是否是第一个 message
-
is_last_message:是否是最后一个 message