我正在开发一个mfd驱动程序。有一个i2c总线,由四个i2c客户端设备共享(在单个IC上)。将适配器连接到每个客户端时使用i2c_new_dummy
API。
为什么有必要为不同的客户端使用不同的适配器逻辑? mfd设备实际上如何工作?
答案 0 :(得分:7)
众所周知,I2C
总线将有来自规范定义的127个客户端;一个7bit
地址,1bit
用于读/写。
第一个字节是I2C
设备地址,与此地址匹配的设备将下拉ACK
位。接下来是数据,大多数时候这将是寄存器的地址。
因此,如果您有四个I2C
个客户端,您将获得四个设备和四个客户端句柄,即使它们包含在 SOC 中。
但有时你不需要那么多。
另一种情况是当前 SOC ,一个芯片(如tps65910)将具有很多功能,包括开启电压, CODEC ,等等。每个驱动程序都将使用I2C
来设置寄存器。您不能为一个驱动程序请求一个句柄,因此这就是它调用i2c_new_dummy
。
来自内核的评论 i2c-core.c ,
/**
* i2c_new_dummy - return a new i2c device bound to a dummy driver
* @adapter: the adapter managing the device
* @address: seven bit address to be used
* Context: can sleep
*
* This returns an I2C client bound to the "dummy" driver, intended for use
* with devices that consume multiple addresses. Examples of such chips
* include various EEPROMS (like 24c04 and 24c08 models).
*
* These dummy devices have two main uses. First, most I2C and SMBus calls
* except i2c_transfer() need a client handle; the dummy will be that handle.
* And second, this prevents the specified address from being bound to a
* different driver.
*
* This returns the new i2c client, which should be saved for later use with
* i2c_unregister_device(); or NULL to indicate an error.
*/