Skip to content

I2C Driver for Hard Processor System

Last updated: January 05, 2026

Upstream Status: Upstreamed

Devices supported: Agilex3, Agilex 5, Agilex 7

Introduction

The I2C controller provides support for a communication link between integrated circuits on a board. It is a simple two-wire bus which consists of a serial data line (SDA) and a serial clock (SCL).

The hard processor system (HPS) provides five I2C controllers to enable system software to communicate serially with I2C buses. Each I2C controller can operate in master or slave mode and support standard mode of up to 100 Kbps or fast mode of up to 400 Kbps. These I2C controllers are instances of the Synopsys DesignWare controller.

Each I2C controller must be programmed to operate in either master or slave mode only. Operating as a master and slave simultaneously is not supported.

For More information please refer to the following link:

Agilex 5 Hard Processor System Technical Reference Manual

i2c_block_diagram

Driver Sources

The source code for this driver can be found at https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/i2c/busses.

graph TD;
    A[i2c-core-base]-->B[i2c_designware_core];
    B[i2c_designware_core]-->C[i2c_designware_master]
    C[i2c_designware_master]-->E[i2c_designware_slave]

Driver Capabilities

  • Manage the communication for I2C Master buses as well as Slave.
  • Handle the data transfer between connected devices over the I2C bus.

Kernel Configurations

CONFIG_I2C_DESIGNWARE_CORE

i2c_designware_core_config_path

CONFIG_I2C_DESIGNWARE_SLAVE

i2c_designware_slave_config_path

Device Tree

Example Device tree location to configure the i2c:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi

i2c_device_tree

Known Issues

None Known


Last update: December 10, 2025
Created: May 25, 2024
Ask in the Forum