This change removes the SPI device table, adds an OF device table instead.
This should also be usable for ACPI via PRP0001.

This device is usually probed via device-tree, so it makes more sense to
use the OF device table.

Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
---
 drivers/iio/adc/ad7887.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/iio/adc/ad7887.c b/drivers/iio/adc/ad7887.c
index 06f684c053a0..4f68a1b17ec8 100644
--- a/drivers/iio/adc/ad7887.c
+++ b/drivers/iio/adc/ad7887.c
@@ -40,6 +40,7 @@ enum ad7887_channels {
 
 /**
  * struct ad7887_chip_info - chip specifc information
+ * @name:              the name of the part
  * @int_vref_mv:       the internal reference voltage
  * @channels:          channels specification
  * @num_channels:      number of channels
@@ -47,6 +48,7 @@ enum ad7887_channels {
  * @num_dual_channels: number of channels in dual mode
  */
 struct ad7887_chip_info {
+       const char                      *name;
        u16                             int_vref_mv;
        const struct iio_chan_spec      *channels;
        unsigned int                    num_channels;
@@ -218,6 +220,7 @@ static const struct ad7887_chip_info ad7887_chip_info_tbl[] 
= {
         * More devices added in future
         */
        [ID_AD7887] = {
+               .name = "ad7887",
                .channels = ad7887_channels,
                .num_channels = ARRAY_SIZE(ad7887_channels),
                .dual_channels = ad7887_dual_channels,
@@ -239,12 +242,17 @@ static void ad7887_reg_disable(void *data)
 
 static int ad7887_probe(struct spi_device *spi)
 {
+       const struct ad7887_chip_info *info;
        struct ad7887_state *st;
        struct iio_dev *indio_dev;
        bool dual_mode;
        uint8_t mode;
        int ret;
 
+       info = device_get_match_data(&spi->dev);
+       if (!info)
+               return -ENODEV;
+
        indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
        if (indio_dev == NULL)
                return -ENOMEM;
@@ -269,13 +277,12 @@ static int ad7887_probe(struct spi_device *spi)
                        return ret;
        }
 
-       st->chip_info =
-               &ad7887_chip_info_tbl[spi_get_device_id(spi)->driver_data];
+       st->chip_info = info;
 
        spi_set_drvdata(spi, indio_dev);
        st->spi = spi;
 
-       indio_dev->name = spi_get_device_id(spi)->name;
+       indio_dev->name = st->chip_info->name;
        indio_dev->info = &ad7887_info;
        indio_dev->modes = INDIO_DIRECT_MODE;
 
@@ -336,18 +343,18 @@ static int ad7887_probe(struct spi_device *spi)
        return devm_iio_device_register(&spi->dev, indio_dev);
 }
 
-static const struct spi_device_id ad7887_id[] = {
-       {"ad7887", ID_AD7887},
-       {}
+static const struct of_device_id ad7887_of_match[] = {
+       { .compatible = "adi,ad7887", .data = &ad7887_chip_info_tbl[ID_AD7887] 
},
+       { }
 };
-MODULE_DEVICE_TABLE(spi, ad7887_id);
+MODULE_DEVICE_TABLE(of, ad7887_of_match);
 
 static struct spi_driver ad7887_driver = {
        .driver = {
                .name   = "ad7887",
+               .of_match_table = ad7887_of_match,
        },
        .probe          = ad7887_probe,
-       .id_table       = ad7887_id,
 };
 module_spi_driver(ad7887_driver);
 
-- 
2.17.1

Reply via email to