]> www.infradead.org Git - users/hch/misc.git/commitdiff
iio: adc: adi-axi-adc: add num lanes support
authorAntoniu Miclaus <antoniu.miclaus@analog.com>
Fri, 16 May 2025 08:26:27 +0000 (11:26 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 9 Jun 2025 06:45:35 +0000 (07:45 +0100)
Add support for setting the number of lanes enabled.

Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
Link: https://patch.msgid.link/20250516082630.8236-8-antoniu.miclaus@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/adi-axi-adc.c

index a21e5a7e13cfe89738c214234f6369c10382acb5..ec08a62f0ef7c2764cfff4780625bee7751f9bad 100644 (file)
@@ -44,6 +44,7 @@
 #define   ADI_AXI_ADC_REG_CONFIG_CMOS_OR_LVDS_N        BIT(7)
 
 #define ADI_AXI_ADC_REG_CTRL                   0x0044
+#define    ADI_AXI_ADC_CTRL_NUM_LANES_MSK      GENMASK(12, 8)
 #define    ADI_AXI_ADC_CTRL_SYNC_MSK           BIT(3)
 #define    ADI_AXI_ADC_CTRL_DDR_EDGESEL_MASK   BIT(1)
 
@@ -438,6 +439,19 @@ static int axi_adc_ad408x_interface_data_align(struct iio_backend *back,
                                        1, timeout_us);
 }
 
+static int axi_adc_num_lanes_set(struct iio_backend *back,
+                                unsigned int num_lanes)
+{
+       struct adi_axi_adc_state *st = iio_backend_get_priv(back);
+
+       if (!num_lanes)
+               return -EINVAL;
+
+       return regmap_update_bits(st->regmap, ADI_AXI_ADC_REG_CTRL,
+                                 ADI_AXI_ADC_CTRL_NUM_LANES_MSK,
+                                 FIELD_PREP(ADI_AXI_ADC_CTRL_NUM_LANES_MSK, num_lanes));
+}
+
 static struct iio_buffer *axi_adc_request_buffer(struct iio_backend *back,
                                                 struct iio_dev *indio_dev)
 {
@@ -628,6 +642,7 @@ static const struct iio_backend_ops adi_ad408x_ops = {
        .data_sample_trigger = axi_adc_data_sample_trigger,
        .filter_type_set = axi_adc_ad408x_filter_type_set,
        .interface_data_align = axi_adc_ad408x_interface_data_align,
+       .num_lanes_set = axi_adc_num_lanes_set,
        .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),
 };