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 = bit_func, 4 }; 5 6 static int i2c_bit_prepare_bus(struct i2c_adapter *adap) 7 { 8 ... ... 9 adap->algo = &i2...
有些不需要,因为硬件不支持(例如,SMBus不需要10位地址支持),有些不需要,因为没有人愿意添加代码(或者代码已经存在,但不能正常工作)。众所周知,软件实现(i2c-algo-bit)是可行的。 一些可选特性不支持10位地址。例如,通过驱动程序自动检测和实例化设备。 许多用户空间包(例如i2c-tools)不支持10位地址。 注意,10...
Drivers/i2c/algo/i2c-algo-bit.c中 int i2c_bit_add_numbered_bus(struct i2c_adapter *adap) { return __i2c_bit_add_bus(adap, i2c_add_numbered_adapter); } 1. 2. 3. 4. 5. 6. 7. 然后 int i2c_bit_add_bus(struct i2c_adapter *adap) { return __i2c_bit_add_bus(adap, i2c_add_...
有些不需要,因为硬件不支持(例如,SMBus不需要10位地址支持),有些不需要,因为没有人愿意添加代码(或者代码已经存在,但不能正常工作)。众所周知,软件实现(i2c-algo-bit)是可行的。 一些可选特性不支持10位地址。例如,通过驱动程序自动检测和实例化设备。 许多用户空间包(例如i2c-tools)不支持10位地址。 注意,10...
struct i2c_algo_bit_data *bit_data; struct i2c_adapter *adap; int ret; pdata = pdev->dev.platform_data; if (!pdata) return -ENXIO; ret = -ENOMEM; adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL); if (!adap) goto err_alloc_adap; ...
| |-- 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的实现。|...
例如:Linux I2C GPIO总线驱动算法实现在i2c_algo_bit.c. 针对不同类型的I2C控制器,实现对I2C总线访问的具体方法.(各种SOC不一样) 3) I2C 设备驱动(I2C client driver) 是对具体I2C硬件驱动的实现。I2C 设备驱动通过I2C适配器与CPU通信。 其中主要包含i2c_driver和i2c_client数据结构。
i2c->adap.algo=&rk3x_i2c_algorithm; i2c->adap.retries=3; i2c->adap.dev.of_node=np; 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); ...
(3)i2c-algo-s3c2410:源程序为i2c-algo-s3c2410.c,I2C总线控制器I2C驱动算法,与具体的控制器相关。(4)i2c-s3c2410:源程序为i2c-s3c2410.c,I2C总线控制器硬件抽象层,与具体的控制器相关。以上4个模块依次是底层与上层的关系,I2C驱动模块的层次结构如图2所示。
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 ...