[PATCH v3 0/6] iio: adc: xilinx-xadc: Add I2C interface support for System Management Wizard

From: Dileep Kumar Nagavarapu

Date: Wed Jul 29 2026 - 10:16:19 EST


The existing driver only supported AXI memory-mapped access to the System
Management Wizard IP. This series extends the driver to support I2C-based
access, which is particularly useful for System Controller usecases.

Key Changes:
- Split the xilinx-xadc-core.c file into two files(xilinx-xadc-core.c and
xilinx-xadc-platform.c)
- Add required helper functions and callbacks
- Add channel configuration via callback mechanism
- New I2C driver for UltraScale+ System Management Wizard for basic
voltage and temperature monitoring
- Converted text binding to YAML schema format

Note: We are working on x86 platform support where fixed channel
configuration is used(no DT support). The .setup_channels() function
pointer introduced in patch 2/4 enables different channel configuration
approaches for various platforms.

This series was originally posted by Sai Krishna Potthuri.

Link:https://lore.kernel.org/all/20260323074505.3853353-1-sai.krishna.potthuri@xxxxxxx/

I will be maintaining the series going forward and posting updated
revisions.

Changes in v3:
-> 1/6 - Modernized the driver code with latest kernel coding styles
and guidelines.
- Restored one-variable-per-line declarations where no
functional change was intended.
- Added unit suffixes to timing and clock-rate constants.
- Replaced GENMASK() and FIELD_PREP() in appropriate places.
- Added guard(spinlock_irq) helper to manage the spinlock
automatically on scope exit.
- Added MAINTAINERS entry for XILINX XADC driver.
-> 2/6 - Refactored the xadc_setup_buffer_and_triggers function
with only two arguments.
- Added xadc_device_setup() and xadc_device_configure() to handle
device initialization and configuration separately.
-> 3/6 - Added IIO_XADC namespace to all exported symbols and
imported the namespace in platform specific modulue.
- Spliting the driver with modrern driver changes.
-> 4/6 - Added .setup_channels() to handle custom channel setup
and configuration.
-> 5/6 - Replaced mutex initialization with devm_mutex_init()
- Removed unused i2c_set_clientdata() usage.
- Added comments describing the DRP packet layout used
for I2C transactions.
- Added comment for hardware initialization check from xadc i2c
write and read functions.
- Wrapped Kconfig help text to conform to kernel style guidelines.
- Switched device setup error handling to dev_err_probe().
-> 6/6 - Removed write edge default configuration in XADCIF_CFG register.
-> Dropped the binding to YAML conversion patch as this is already sent by
Pramod Maurya and is in discussion.

Changes in v2:
-> 1/4 - Split the xilinx-xadc-core.c file into two files
xilinx-xadc-core.c and xilinx-xadc-platform.c(comments from Andy).
-> 2/4 - Referred as .setup_channels instead of setup_channels.
-> 3/4 - Created separate functions for i2c read and write.
- Created separate file for i2c interface handling.
-> 4/4(comments from Krzysztof)
- Removed $defs and use it directly under xlnx,channels.
- Documented the error information in the commit message due to
vendor prefix properties.
- Kept only one example as there is not much differences.


Dileep Kumar Nagavarapu (6):
iio: adc: xilinx-xadc: Modernize driver code
iio: adc: xilinx-xadc: Add helper functions for the device setup
iio: adc: xilinx-xadc: Split driver into core and platform files
iio: adc: xilinx-xadc: Add .setup_channels() to struct xadc_ops
iio: adc: xilinx-xadc: Add I2C interface support
iio: adc: xilinx-xadc: Correct Write edge in CFG

MAINTAINERS | 7 +
drivers/iio/adc/Kconfig | 23 +-
drivers/iio/adc/Makefile | 6 +-
drivers/iio/adc/xilinx-xadc-core.c | 886 ++------------
drivers/iio/adc/xilinx-xadc-events.c | 54 +-
drivers/iio/adc/xilinx-xadc-i2c.c | 228 ++++
...inx-xadc-core.c => xilinx-xadc-platform.c} | 1043 ++---------------
drivers/iio/adc/xilinx-xadc.h | 108 +-
8 files changed, 609 insertions(+), 1746 deletions(-)
create mode 100644 drivers/iio/adc/xilinx-xadc-i2c.c
copy drivers/iio/adc/{xilinx-xadc-core.c => xilinx-xadc-platform.c} (34%)

--
2.34.1