Modify the twl regulator driver to extract the regulator_init_data from
device tree when passed, instead of getting it through platform_data
structures (on non-DT builds)

Signed-off-by: Rajendra Nayak <rna...@ti.com>
---
 drivers/regulator/twl-regulator.c |   28 +++++++++++++++++++++++++---
 1 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/twl-regulator.c 
b/drivers/regulator/twl-regulator.c
index ee8747f..df1b95a 100644
--- a/drivers/regulator/twl-regulator.c
+++ b/drivers/regulator/twl-regulator.c
@@ -17,6 +17,8 @@
 #include <linux/regulator/driver.h>
 #include <linux/regulator/machine.h>
 #include <linux/i2c/twl.h>
+#include <linux/of.h>
+#include <linux/of_regulator.h>
 
 
 /*
@@ -1011,6 +1013,9 @@ static int __devinit twlreg_probe(struct platform_device 
*pdev)
        struct regulation_constraints   *c;
        struct regulator_dev            *rdev;
 
+       if (pdev->dev.of_node)
+               of_property_read_u32(pdev->dev.of_node, "ti,reg-id", &pdev->id);
+
        for (i = 0, info = NULL; i < ARRAY_SIZE(twl_regs); i++) {
                if (twl_regs[i].desc.id != pdev->id)
                        continue;
@@ -1020,7 +1025,11 @@ static int __devinit twlreg_probe(struct platform_device 
*pdev)
        if (!info)
                return -ENODEV;
 
-       initdata = pdev->dev.platform_data;
+       if (pdev->dev.of_node)
+               initdata = of_get_regulator_init_data(pdev->dev.of_node);
+       else
+               initdata = pdev->dev.platform_data;
+
        if (!initdata)
                return -EINVAL;
 
@@ -1101,14 +1110,27 @@ static int __devexit twlreg_remove(struct 
platform_device *pdev)
 
 MODULE_ALIAS("platform:twl_reg");
 
+#if defined(CONFIG_OF)
+static const struct of_device_id twl_of_match[] __devinitconst = {
+       { .compatible = "ti,twl-reg", },
+       {},
+};
+MODULE_DEVICE_TABLE(of, twl_of_match);
+#else
+#define twl_of_match NULL
+#endif
+
 static struct platform_driver twlreg_driver = {
        .probe          = twlreg_probe,
        .remove         = __devexit_p(twlreg_remove),
        /* NOTE: short name, to work around driver model truncation of
         * "twl_regulator.12" (and friends) to "twl_regulator.1".
         */
-       .driver.name    = "twl_reg",
-       .driver.owner   = THIS_MODULE,
+       .driver  = {
+               .name  = "twl_reg",
+               .owner = THIS_MODULE,
+               .of_match_table = twl_of_match,
+       },
 };
 
 static int __init twlreg_init(void)
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to