[PATCH v3 0/6] iio: adc: xilinx-xadc: Add I2C interface support for System Management Wizard
Dileep Kumar Nagavarapu <[email protected]> Wed, 29 Jul 2026 18:24:49 +0530
| Newsgroups | org.kernel.vger.linux-iio,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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/[email protected]/ 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