以下是一些 i2c_get_adapter 函数的常见用法: 1. 使用i2c_get_adapter 函数来获取默认的 I2C 适配器,代码示例如下: structi2c_adapter*adapter; adapter=i2c_get_adapter(0); 这段代码将获取默认的 I2C 适配器,并将其赋值给 adapter 变量。 2. 使用i2c_get_adapter 函数来获取指定编号的 I2C 适配器,代码...
控制器驱动I2C总线驱动重点是I2C适配器驱动,这里要用到两个重要的数据结构:i2c_adapter和i2c_algorithm。其中,Linux 内核将 SOC 的I2C适配器 2023-07-22 15:38:35 I2C子系统SW Architecture 适配器(控制器)驱动,这里用到两个重要的数据结构:i2c_adapter和i2c_algorithm。其中,Linux 内核将 SOC 的I2C适配器(控制...
而i2c_get_adapter()接口的参数为硬件i2c控制器的num,通常,一个单板上不止一个i2c控制器,这个num指定了i2c控制器的序号。 在驱动程序源码实现中,并不需要i2c_adapter的相关实现,那么,可以确定的是,i2c底层数据收发已经集成到了系统中,只需要用户去选择使用哪一个adapter即可。 那么,它到底是怎么工作的呢? 办法很...
i2c_put_adapter(adap); if (err >= 0) return 0; return err; } 从上面的代码可以看出,sx1_i2c_write_byte主要完成了以下功能: 1、通过调用i2c_get_adapter(0)函数获取指定索引的I2C适配器对象并赋值给adap变量。 2、初始化一个struct i2c_msg类型的数组msg,该数组包含一个元素用于I2C消息的传输。 3、...
而i2c_get_adapter()接口的参数为硬件i2c控制器的num,通常,一个单板上不止一个i2c控制器,这个num指定了i2c控制器的序号。 在驱动程序源码实现中,并不需要i2c_adapter的相关实现,那么,可以确定的是,i2c底层数据收发已经集成到了系统中,只需要用户去选择使用哪一个adapter即可。
i2c_adapter用于标识一个物理的I2C总线,以及访问该总线所需的访问算法 class: 允许探测的类别。 algo: 访问总线的算法。 algo_data: 算法数据。 timeout: 超时时间(以jiffies为单位)。 retries: 重试次数。 dev: 适配器设备。 nr: 适配器编号。 name: 适配器名称。
i2c_put_adapter(adap); if (err >= 0) return 0; return err; } 从上面的代码可以看出,sx1_i2c_write_byte主要完成了以下功能: 1、通过调用i2c_get_adapter(0)函数获取指定索引的I2C适配器对象并赋值给adap变量。 2、初始化一个struct i2c_msg类型的数组msg,该数组包含一个元素用于I2C消息的传输。
static DEFINE_IDR(i2c_adapter_idr); 2. 使用idr_pre_get(&i2c_adapter_idr, GFP_KERNEL)为该结构分配空间; 3. 使用res = idr_get_new_above(&i2c_adapter_idr, adapter, __i2c_first_dynamic_bus_num, &id); 把我们的指针adapter与int型变量id对应起来。
adapter i2c_registeradapter /***/ i2c_register_adapter是I2C子系统核心层给I2C总线驱动层的用来向核心层注册一个adapter(适配器)的接口函数。从上可以知道这两个函数最终都是调用i2c_register_adapter函数去注册adapter,他们的区别在于:i2c_add_adapter函数是自动适配器编号,而i2c_add_numbered_adapter ...
int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num); 用于进行I2C适配器和I2C设备之间的一组消息交互。其本身不具备驱动适配器物理硬件完成消息交互的能力,它只是寻找到i2c_adapter对应的i2c_algorithm,并使用i2c_algorithm的master_xfer()函数真正驱动硬件流程。 代码语言:javascript...