#include <linux/interrupt.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/of.h>
-#include <linux/of_platform.h>
+#include <linux/mod_devicetable.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 
 #include <linux/iio/buffer.h>
 
 static int cpcap_adc_probe(struct platform_device *pdev)
 {
-       const struct of_device_id *match;
        struct cpcap_adc *ddata;
        struct iio_dev *indio_dev;
        int error;
 
-       match = of_match_device(of_match_ptr(cpcap_adc_id_table),
-                               &pdev->dev);
-       if (!match)
-               return -EINVAL;
-
-       if (!match->data) {
-               dev_err(&pdev->dev, "no configuration data found\n");
-
-               return -ENODEV;
-       }
-
        indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*ddata));
        if (!indio_dev) {
                dev_err(&pdev->dev, "failed to allocate iio device\n");
                return -ENOMEM;
        }
        ddata = iio_priv(indio_dev);
-       ddata->ato = match->data;
+       ddata->ato = device_get_match_data(&pdev->dev);
+       if (!ddata->ato)
+               return -ENODEV;
        ddata->dev = &pdev->dev;
 
        mutex_init(&ddata->lock);
 static struct platform_driver cpcap_adc_driver = {
        .driver = {
                .name = "cpcap_adc",
-               .of_match_table = of_match_ptr(cpcap_adc_id_table),
+               .of_match_table = cpcap_adc_id_table,
        },
        .probe = cpcap_adc_probe,
 };