]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: adi-axi-adc: add interface type
authorAntoniu Miclaus <antoniu.miclaus@analog.com>
Fri, 14 Feb 2025 13:19:50 +0000 (15:19 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 16 Feb 2025 15:12:27 +0000 (15:12 +0000)
Add support for getting the interface (CMOS or LVDS) used by the AXI ADC
IP.

Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
Link: https://patch.msgid.link/20250214131955.31973-5-antoniu.miclaus@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/adi-axi-adc.c

index 766406f45396844de41c389da1904fc976557780..fb3ff605db05dd9013c75c6881c81f8aa347be3d 100644 (file)
@@ -40,6 +40,9 @@
 #define   ADI_AXI_REG_RSTN_MMCM_RSTN           BIT(1)
 #define   ADI_AXI_REG_RSTN_RSTN                        BIT(0)
 
+#define ADI_AXI_ADC_REG_CONFIG                 0x000c
+#define   ADI_AXI_ADC_REG_CONFIG_CMOS_OR_LVDS_N        BIT(7)
+
 #define ADI_AXI_ADC_REG_CTRL                   0x0044
 #define    ADI_AXI_ADC_CTRL_DDR_EDGESEL_MASK   BIT(1)
 
@@ -310,6 +313,25 @@ static int axi_adc_chan_disable(struct iio_backend *back, unsigned int chan)
                                 ADI_AXI_REG_CHAN_CTRL_ENABLE);
 }
 
+static int axi_adc_interface_type_get(struct iio_backend *back,
+                                     enum iio_backend_interface_type *type)
+{
+       struct adi_axi_adc_state *st = iio_backend_get_priv(back);
+       unsigned int val;
+       int ret;
+
+       ret = regmap_read(st->regmap, ADI_AXI_ADC_REG_CONFIG, &val);
+       if (ret)
+               return ret;
+
+       if (val & ADI_AXI_ADC_REG_CONFIG_CMOS_OR_LVDS_N)
+               *type = IIO_BACKEND_INTERFACE_SERIAL_CMOS;
+       else
+               *type = IIO_BACKEND_INTERFACE_SERIAL_LVDS;
+
+       return 0;
+}
+
 static struct iio_buffer *axi_adc_request_buffer(struct iio_backend *back,
                                                 struct iio_dev *indio_dev)
 {
@@ -456,6 +478,7 @@ static const struct iio_backend_ops adi_axi_adc_ops = {
        .iodelay_set = axi_adc_iodelays_set,
        .test_pattern_set = axi_adc_test_pattern_set,
        .chan_status = axi_adc_chan_status,
+       .interface_type_get = axi_adc_interface_type_get,
        .debugfs_reg_access = iio_backend_debugfs_ptr(axi_adc_reg_access),
        .debugfs_print_chan_status = iio_backend_debugfs_ptr(axi_adc_debugfs_print_chan_status),
 };