明确一下关系:
adapter--对应的是soc上实际的iic控制器;
struct i2c_adapter {
struct module *owner; //所属模块
unsigned int id; //algorithm的类型,定义于i2c-id.h,
unsigned int class;
const struct i2c_algorithm *algo; //总线通信方法结构体指针
void *algo_data; //algorithm数据
struct rt_mutex bus_lock; //控制并发访问的自旋锁
int timeout;
int retries; //重试次数
struct device dev; //适配器设备
int nr; //存放在i2c_adapter_idr里的位置号
char name[48]; //适配器名称
struct completion dev_released; //用于同步
struct list_head userspace_clients; //client链表头
};
驱动工程师通过使用i2c_register_adapter函数,向内核注册一个iic控制器。被注册到内核的iic控制器下面又可以挂接iic设备(例如eeprom,电源管理芯片等)。
xiic_i2c 包含了xilinx iic驱动程序操作的
struct xiic_i2c {
struct device *dev;
void __iomem *base;
wait_queue_head_t wait;
struct i2c_adapter adap;
struct i2c_msg *tx_msg;
struct mutex lock;
unsigned int tx_pos;
unsigned int nmsgs;
enum xilinx_i2c_state state;
struct i2c_msg *rx_msg;
i