> +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); > + u32 buf; > + > + guard(mutex)(&st->lock); > + > + /* > + * The address is written on the highest weight byte, and the MSB set > + * at 1 indicates a read operation. > + */ > + buf = FIELD_PREP(ADI_AXI_REG_ADDRESS_MASK, reg) | ADI_AXI_REG_READ_BIT; > + axi_adc_raw_write(back, &buf, sizeof(buf)); > + axi_adc_raw_read(back, val, 4); sizeof(*val) > + > + /* Write 0x0 on the bus to get back to ADC mode */ > + buf = 0; > + axi_adc_raw_write(back, &buf, sizeof(buf)); > + return 0; > +}