[PATCH 2/3] iio: adc: ad7887: convert driver to full DT probing

From: Alexandru Ardelean
Date: Tue Nov 17 2020 - 02:47:56 EST


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.ardelean@xxxxxxxxxx>
---
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