i2c_transfer 函数会调用 I2C 适配器中 i2c_algorithm里面的 master_xfer 函数, 对于 IMX6U 而言是 i...
int i2c_master_send(struct i2c_client *client,const char *buf ,int count); int i2c_master_recv(struct i2c_client *client, char *buf ,int count); 上边三个函数用于实现与I2C设备之间的数据交换。i2c_transfer函数可以进行复杂的多消息传输,而i2c_master_send和i2c_master_recv函数用于单个数据消息的发...
int i2c_master_send(struct i2c_client *client,const char *buf ,int count); int i2c_master_recv(struct i2c_client *client, char *buf ,int count); 上边三个函数用于实现与I2C设备之间的数据交换。i2c_transfer函数可以进行复杂的多消息传输,而i2c_master_send和i2c_master_recv函数用于单个数据消息的发...
在i2c-core.c中的i2c_transfer函数中,会有语句:ret = adap->algo->master_xfer(adap, msgs, num);来实现数据传递,实际此处就是I2C总线驱动执行的入口,相应算法结构体函数的赋值会在总线驱动的探测函数中执行,后面会讲述。 算法结构体赋值如下: 1. static struct i2c_algorithm i2c_gsc_algo = { 2. .master...
I2C是一种常用的串行总线,由串行数据线SDA 和串线时钟线SCL组成。I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以,而 I2C 是基于multi master机制,一条总线上可允许多个master。 系统的I2C模块分为I2C总线控制器和I2C设备。I2C 总线控制器是CPU提供的控制...
i2cdev_read函数在内核中分配一个缓冲区,使用i2c_master_recv函数从I2C设备中接收数据,并将接收到的数据复制到用户空间。i2cdev_ioctl i2c_driver i2c_register_driver将驱动程序注册到I2C驱动核心,并在注册完成后处理所有已经存在的适配器。注册完成后,驱动核心会调用probe()函数来匹配并初始化所有匹配...
I2C适配器的Algorithm,用具体适配器的xxx_xfer()函数填充i2c_algorithm的master_xfer指针,并把i2c_algorithm指针赋值给i2c_adapter的algo指针。 总结: 不管是平台总线还是IIC总线都都有这样的调用路线: 当系统发现了新设备或者新驱动就会掉用相应总线的Match()进行匹配,当找到后就会掉用相对应的总线的Probe函数,最后Pro...
master_xfer()负责S3C2410中I2C控制器的寄存器,用于产生I2C访问周期需要的函数,以i2c_msg(即I2C消息)为单位,以此控制I2C总线发送和接收数据的方法。另外,函数需实现functionality()函数,其只返回一个algorithm所支持的通信传输模式,较容易实现。 3.2 设备驱动程序的实现...
I2C adapter 主要实现对 I2C 总线访问的算法,master_xfer()函数就是 I2C adapter 底层对 I2C 总线读写方法的实现。同时 I2C adapter 中还实现了对 I2C 控制器中断的处理函数。 I2C 设备驱动(I2C driver) I2C driver 是对 I2C 从设备的软件实现。I2C driver 中提供了一个通用的 I2C 设备的驱动程序,实现了字符...
master_xfer = s3c24xx_i2c_xfer, .functionality = s3c24xx_i2c_func, }; static int s3c24xx_i2c_probe(struct platform_device *pdev) { ... i2c->adap.owner = THIS_MODULE; i2c->adap.algo = &s3c24xx_i2c_algorithm; i2c->adap.retries = 2; i2c->adap.class = I2C_CLASS_HWMON | I2C_...