Linux I2C 驱动移植问题

Linux I2C driver porting issue

我正在将 I2C 驱动程序移植到 Linux-4。此设备同时为不同的功能提供多个 I2C 地址。

例如:

address 0xAA is for access of SPI flash. 
address 0xA0 is for access of EEPROM.  
address 0x60 is for normal access (control purpose).  

是否可以在单机I2C设备驱动中支持不同I2C地址的访问?

感谢任何帮助, 谢谢

我认为这是可能的。使用 i2c_transfer() 您将在 i2c_msg 结构中为要与之通信的设备提供特定地址。因此您的驱动程序将能够与您的 i2c 设备的所有功能进行通信。

取决于你说的是什么类型的 I2C 驱动程序,总线(适配器)还是芯片(客户端)驱动程序?

i2c-dev.c 是一种具有字符设备接口的总线驱动程序,它将内核低级 I2C API 导出到用户空间。

对于每个已注册的 I2C 适配器,内核将在 /dev 用户空间接口中添加 i2c-N 设备节点。

但是你不能read/writeEEPROM 芯片附加到/dev/i2c-N,比如简单的字符设备或文件。你需要编写一些关于芯片协议的实用程序。

但在Linux中有特殊的EEPROM芯片驱动程序,如eeprom.cat24.c用于注册地址为0x50..0x57的I2C EEPROM设备(如果我没记错的话) ) 到内核并在 /sys 用户空间界面中创建文件。

您可以将它们作为文件访问:/sys/bus/i2c/devices/0-005x/eeprom

感谢 Dražen Grašovec 和 user2699113 的帮助。

我正在将 I2C 设备驱动程序(芯片、客户端)移植到 Linux-4.9。 该芯片为不同的目的接受不同的 I2C 设备地址。 我的目标是在 Linux 设备树文件 (.dts)

上只创建一个 I2C 设备

我使用 i2c_new_dummy() 解决了我的问题。

在驱动探测函数中, 我做了两个 i2c_new_dummy() 来创建两个额外的 i2c 客户端。
一个(client#1)用于访问 I2C 地址 0xAA,另一个(client#2)用于 I2C 地址 0xA0。
所以我可以使用 client#1 与其 SPI flash 通信并使用 client#2 访问它的 EEPROM。