Overview
Key Characteristics
- Bidirectional 2-wire serial bus (SDA + SCL)
- 7-bit or 10-bit target addressing
- Multi-controller mode support
Operating Modes
| Mode | Speed |
|---|---|
| Standard mode | 100 kbps |
| Fast mode | 400 kbps |
| Fast mode plus | 1 Mbps (maximum supported) |
| High-speed mode | 3.4 MHz (not supported) |
Communication Sequence


- SCL HIGH: SDA must remain stable
- SCL LOW: SDA may change
- Exception: START and STOP sequences may change SDA when SCL is HIGH
Transfer Modes by Subsystem
| Subsystem | Transfer Mode | Bus Speeds |
|---|---|---|
| Linux | FIFO, CPU DMA, GSI | 100 kHz, 400 kHz, 1000 kHz |
| Boot | FIFO | 100 kHz, 400 kHz, 1000 kHz |
| aDSP / Qualcomm TEE / SDC | FIFO | Standard |
Interface Components
Device Tree Sources
| Platform | Device Tree File |
|---|---|
| Dragonwing IQ-8275 | arch/arm64/boot/dts/qcom/qcs8300.dtsi |
APIs
| Subsystem | Header |
|---|---|
| Linux | include/linux/i2c.h, include/linux/i2c-dev.h |
| Boot | boot_images/boot/QcomPkg/Include/i2c_api.h |
| aDSP | adsp_proc/core/api/buses/i2c_api.h |
| Qualcomm TEE | trustzone_images/core/buses/api/i2c/qupv3/i2c_api.h |
Software Device Tree Configuration
Linux Device Tree Example
QUPAC Access Control
Ensure the correct protocol is set inQUPAC_Access.c:
Configuration Steps
Verification
Check Device Nodes
Use i2c-tools
Debugging
Enable Debug Logs
Troubleshooting
I2C Device Not Detected
I2C Device Not Detected
I2C Transfer Timeout
I2C Transfer Timeout
Causes: No pull-up resistors, slave not responding, wrong clock frequency, bus stuck low.Add 4.7 kΩ pull-ups on SDA/SCL; adjust
clock-frequency in device tree.Invalid Protocol Error
Invalid Protocol Error
Symptom:
geni_i2c a94000.i2c: Invalid proto 1Verify QUPAC_Access.c sets QUPV3_PROTOCOL_I2C, AC_HLOS, bAllowFifo=TRUE, bLoad=TRUE.DMA Transfer Failures
DMA Transfer Failures
Verify
CONFIG_QCOM_GPI_DMA=m; check dmas and dma-names in device tree.To test without DMA:
