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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux