]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: adi-axi-adc: fix ad7606_bus_reg_read()
authorDavid Lechner <dlechner@baylibre.com>
Fri, 30 May 2025 21:50:14 +0000 (16:50 -0500)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 29 Jun 2025 16:15:39 +0000 (17:15 +0100)
Mask the value read before returning it. The value read over the
parallel bus via the AXI ADC IP block contains both the address and
the data, but callers expect val to only contain the data.

axi_adc_raw_write() takes a u32 parameter, so addr was the wrong type.
This wasn't causing any issues but is corrected anyway since we are
touching the same line to add a new variable.

Cc: stable@vger.kernel.org
Fixes: 79c47485e438 ("iio: adc: adi-axi-adc: add support for AD7606 register writing")
Signed-off-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250530-iio-adc-adi-axi-adc-fix-ad7606_bus_reg_read-v2-1-ad2dfc0694ce@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/adi-axi-adc.c

index 4116c44197b8d03bcd62fa6328f21a55fc3e0da2..2dbaa0b5b3d6260b0c721cf12a646bc9a9fc60a9 100644 (file)
@@ -445,7 +445,7 @@ static int axi_adc_raw_read(struct iio_backend *back, u32 *val)
 static int ad7606_bus_reg_read(struct iio_backend *back, u32 reg, u32 *val)
 {
        struct adi_axi_adc_state *st = iio_backend_get_priv(back);
-       int addr;
+       u32 addr, reg_val;
 
        guard(mutex)(&st->lock);
 
@@ -455,7 +455,9 @@ static int ad7606_bus_reg_read(struct iio_backend *back, u32 reg, u32 *val)
         */
        addr = FIELD_PREP(ADI_AXI_REG_ADDRESS_MASK, reg) | ADI_AXI_REG_READ_BIT;
        axi_adc_raw_write(back, addr);
-       axi_adc_raw_read(back, val);
+       axi_adc_raw_read(back, &reg_val);
+
+       *val = FIELD_GET(ADI_AXI_REG_VALUE_MASK, reg_val);
 
        /* Write 0x0 on the bus to get back to ADC mode */
        axi_adc_raw_write(back, 0);