Main Page
From Linux i2c Wiki
OBSOLETE CONTENT
This wiki has been archived and the content is no longer updated.
Linux i2c Subsystem
This is the home of the Linux i2c subsystem.
Theory of operation
- Driver Architecture
- I2C protocol summary
- SMBus protocol summary
- 10-bit addresses information
- /dev interface documentation
- I2C adapter functionalities
- I2C bus multiplexing
- complex I2C topologies
Developer's documentation
- Linux 2.6 I2C development FAQ
- Conventions for use of fault codes in the I2C/SMBus stack
- How to instantiate I2C devices
- Writing kernel drivers for I2C or SMBus devices
- i2c-stub, a fake I2C/SMBus master driver for testing purpose
User-space tools
User-space tools for I2C/SMBus are being maintained in the i2c-tools git tree. Released versions can be downloaded from https://www.kernel.org/pub/software/utils/i2c-tools/.
Work in progress
- increase SMBus max block size from 32 to 255 as documented in the 3.x specification. Hardest problem is to not break userspace ABI.
To-do list
- The i2c-dev driver needs to be ported to the new i2c device driver binding model. See this discussion and this bug report.
- i2c_adapter.retries and i2c_adapter.timeout need to be clarified. Their original intent was not necessarily good nor clear, but they could still be useful, if fault codes returned by adapter drivers are also clarified.
- Exclusive access to bus segments or devices. The former can partly be done in-kernel since version 3.6 (i2c_lock_adapter / __i2c_transfer / i2c_unlock_adapter) or the SMBus equivalent. Also the user-space case mentioned here is not supported yet.
- The kernel should be able to prevent probing of specific I2C bus segments from user-space. Either by exposing the class flags and hoping user-space will pay attention and be fair, or by defining one more class flag for user-space access and enforcing it.
Old pages
Subsystem History - up to Linux 3.6