regulator: da9210: addition of device tree support
authorSteve Twiss <stwiss.opensource@diasemi.com>
Fri, 15 Jul 2016 09:29:41 +0000 (10:29 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 15 Jul 2016 10:45:26 +0000 (11:45 +0100)
Addition of device tree support for DA9210.
Two files are modified, the driver source file and the binding document.

Updates for the regulator source file include an .of_match_table entry and
node match checking in the probe() function for a compatible da9210 string.

Minor binding documentation changes have been made to the title and the
example.

Tested-by: Steve Twiss <stwiss.opensource@diasemi.com>
Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Documentation/devicetree/bindings/regulator/da9210.txt
drivers/regulator/da9210-regulator.c

index 7aa9b1f..58065ca 100644 (file)
@@ -1,4 +1,4 @@
-* Dialog Semiconductor DA9210 Voltage Regulator
+* Dialog Semiconductor DA9210 Multi-phase 12A DCDC BUCK Converter
 
 Required properties:
 
@@ -18,8 +18,12 @@ Example:
                compatible = "dlg,da9210";
                reg = <0x68>;
 
-               regulator-min-microvolt = <900000>;
-               regulator-max-microvolt = <1000000>;
+               interrupt-parent = <...>;
+               interrupts = <...>;
+
+               regulator-min-microvolt = <300000>;
+               regulator-max-microvolt = <1570000>;
+               regulator-min-microamp = <1600000>;
+               regulator-max-microamp = <4600000>;
                regulator-boot-on;
-               regulator-always-on;
        };
index 01c0e37..d0496d6 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,