]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/regulator/da9210-regulator.c
Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[karo-tx-linux.git] / drivers / regulator / da9210-regulator.c
index 01c0e3709b6659aded1d79cbbb5423c7d373d5e9..d0496d6b09346b555c95b74e605aee0663c0dc10 100644 (file)
 #include <linux/err.h>
 #include <linux/i2c.h>
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
-#include <linux/slab.h>
 #include <linux/regulator/driver.h>
 #include <linux/regulator/machine.h>
+#include <linux/of_device.h>
 #include <linux/regulator/of_regulator.h>
 #include <linux/regmap.h>
 
@@ -179,6 +178,13 @@ error_i2c:
 /*
  * I2C driver interface functions
  */
+
+static const struct of_device_id da9210_dt_ids[] = {
+       { .compatible = "dlg,da9210", },
+       { }
+};
+MODULE_DEVICE_TABLE(of, da9210_dt_ids);
+
 static int da9210_i2c_probe(struct i2c_client *i2c,
                            const struct i2c_device_id *id)
 {
@@ -188,6 +194,16 @@ static int da9210_i2c_probe(struct i2c_client *i2c,
        struct regulator_dev *rdev = NULL;
        struct regulator_config config = { };
        int error;
+       const struct of_device_id *match;
+
+       if (i2c->dev.of_node && !pdata) {
+               match = of_match_device(of_match_ptr(da9210_dt_ids),
+                                               &i2c->dev);
+               if (!match) {
+                       dev_err(&i2c->dev, "Error: No device match found\n");
+                       return -ENODEV;
+               }
+       }
 
        chip = devm_kzalloc(&i2c->dev, sizeof(struct da9210), GFP_KERNEL);
        if (!chip)
@@ -264,6 +280,7 @@ MODULE_DEVICE_TABLE(i2c, da9210_i2c_id);
 static struct i2c_driver da9210_regulator_driver = {
        .driver = {
                .name = "da9210",
+               .of_match_table = of_match_ptr(da9210_dt_ids),
        },
        .probe = da9210_i2c_probe,
        .id_table = da9210_i2c_id,