From: Michael Hennerich <michael.hennerich@xxxxxxxxxx> This change adds a basic verification of the EEPROM by writing a known value to the customer version ID register, and reading it back. This validates that the EEPROM & SPI communication are functioning properly, and the device is ready to use. Signed-off-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> --- drivers/iio/frequency/ad9523.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/iio/frequency/ad9523.c b/drivers/iio/frequency/ad9523.c index 9b9eee27176c..dd159a1237f3 100644 --- a/drivers/iio/frequency/ad9523.c +++ b/drivers/iio/frequency/ad9523.c @@ -749,6 +749,30 @@ static int ad9523_reg_access(struct iio_dev *indio_dev, return ret; } +static int ad9523_verify_eeprom(struct iio_dev *indio_dev) +{ + int ret, id; + + id = ad9523_read(indio_dev, AD9523_EEPROM_CUSTOMER_VERSION_ID); + if (id < 0) + return id; + + ret = ad9523_write(indio_dev, AD9523_EEPROM_CUSTOMER_VERSION_ID, 0xAD95); + if (ret < 0) + return ret; + + ret = ad9523_read(indio_dev, AD9523_EEPROM_CUSTOMER_VERSION_ID); + if (ret < 0) + return ret; + + if (ret != 0xAD95) { + dev_err(&indio_dev->dev, "SPI Read Verify failed (0x%X)\n", ret); + return -EIO; + } + + return ad9523_write(indio_dev, AD9523_EEPROM_CUSTOMER_VERSION_ID, id); +} + static const struct iio_info ad9523_info = { .read_raw = &ad9523_read_raw, .write_raw = &ad9523_write_raw, @@ -780,6 +804,10 @@ static int ad9523_setup(struct iio_dev *indio_dev) if (ret < 0) return ret; + ret = ad9523_verify_eeprom(indio_dev); + if (ret < 0) + return ret; + /* * PLL1 Setup */ -- 2.17.1