int i2c_bit_add_bus(struct i2c_adapter *adap) { return __i2c_bit_add_bus(adap, i2c_add_adapter); } 1. 2. 3. 4. 5. 6. 7. 接着调用这个函数 static int __i2c_bit_add_bus(struct i2c_adapter *adap, int (*add_adapter)(struct i2c_adapter *)) { struct i2c_algo_bit_data *b...
int i2c_bit_add_bus(struct i2c_adapter *adap) { return __i2c_bit_add_bus(adap, i2c_add_adapter); } 接着调用这个函数 static int __i2c_bit_add_bus(struct i2c_adapter *adap, int (*add_adapter)(struct i2c_adapter *)) { struct i2c_algo_bit_data *bit_adap = adap->algo_data; i...
i2c-algo-bit.c和i2c-gpio.c共同实现IO模拟I2C。 i2c-algo-bit.c提供了一个i2c_algorithm,i2c-gpio.c提供了一个i2c_adapter。 i2c-algo-bit.c通过以下代码绑定到i2c-gpio.c i2c-algo-bit.c 1 static const struct i2c_algorithm i2c_bit_algo = { 2 .master_xfer = bit_xfer, 3 .functionality = bi...
int i2c_bit_add_bus(struct i2c_adapter *adap) { return __i2c_bit_add_bus(adap, i2c_add_adapter); } 接着调用这个函数 static int __i2c_bit_add_bus(struct i2c_adapter *adap, int (*add_adapter)(struct i2c_adapter *)) { struct i2c_algo_bit_data *bit_adap = adap->algo_data; i...
多数 I2C 总线驱动会定义一个 xxx_i2c 结构体,作为 i2c_adapter 的 algo_data(类似“私有数据”),其中包含 I2C 消息数组指针、数组索引及 I2C 适配器 algorithm 访问控制用的自旋锁、等待队列等,而master_xfer()函数完成消息数组中消息的处理也可通过对 xxx_i2c 结构体相关成员的访问来控制。代码清单 所示下图...
const struct i2c_algorithm *algo: 用于访问总线的 I2C 算法的指针。 void *algo_data: 存储与 I2C 算法相关的数据。 struct rt_mutex bus_lock: 用于保护 I2C 总线的互斥锁。 int timeout: I2C 传输的超时时间,以 jiffies 为单位。 int retries: 在传输期间发生错误时进行的重试次数。
| |-- i2c-algo-bit.c //通用I2C算法驱动程序 | |-- i2c-algo-pca.c | |-- i2c-algo-pcf.c | |-- i2c-algo-pcf.h | |-- Kconfig | |-- Makefile | `-- modules.order |-- built-in.o |-- busses //特定的硬件平台(CPU类型相关的I2C总线控制驱动程序)adapter的实现。|...
static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) unsigned short flags = msg->flags;unsigned short nak_ok =msg->flags & I2C_M_IGNORE_NAK; struct i2c_algo 3、_bit_data *adap = i2c_adap->algo_data;unsigned char addr;int ret, retries;retries =if (flags ...
i2c->adap.algo_data = i2c; i2c->adap.dev.parent = &pdev->dev; i2c->dev = &pdev->dev; spin_lock_init(&i2c->lock); init_waitqueue_head(&i2c->wait); i2c->i2c_restart_nb.notifier_call = rk3x_i2c_restart_notify; i2c->i2c_restart_nb.priority = 128; ...
const struct i2c_algorithm *algo: 用于访问总线的 I2C 算法的指针。 void *algo_data: 存储与 I2C 算法相关的数据。 struct rt_mutex bus_lock: 用于保护 I2C 总线的互斥锁。 int timeout: I2C 传输的超时时间,以 jiffies 为单位。 int retries: 在传输期间发生错误时进行的重试次数。 struct device dev:...