Block Diagram
The block diagram of I2C driver is shown in the following figure. Figure 1. Block Diagram

The user space layer is general for all Linux system modules.
The I2C subsystem includes the following sub-modules.
- interface: The sub-module provides interfaces to interact with i2c_adapter or i2c_client.
- i2c-core: The sub-module builds the core functions of I2C subsystem. It provides i2c_adapter and i2c_client APIs.
- Synopsys DesignWare I2C adapter driver: The sub-module registers the i2c_adapter and provide functions for receive/send operations.
- i2c driver: The sub-module uses application interfaces to receive/send data.