summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorChaitanya Bandi <bandik@nvidia.com>2014-03-14 11:23:08 +0530
committerLaxman Dewangan <ldewangan@nvidia.com>2014-03-19 04:20:46 -0700
commitdeb37e638c00ea47e8a400f49ae71bed180762ef (patch)
treefbfc07a7ca6a73fd3049581778a03981a008aa8c /drivers/power
parent9a5eeced3e54f49f8bf8b81bf2120d22e4eb0b99 (diff)
power: bq2477x: Add device tree support
Added device tree support for bq2477x. Change-Id: I5dc928c609c8b4d6d9e8d09f46382307315f4f1c Signed-off-by: Chaitanya Bandi <bandik@nvidia.com> Reviewed-on: http://git-master/r/381886 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/bq2477x-charger.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/drivers/power/bq2477x-charger.c b/drivers/power/bq2477x-charger.c
index 3e694426d25e..14e74cef142f 100644
--- a/drivers/power/bq2477x-charger.c
+++ b/drivers/power/bq2477x-charger.c
@@ -244,6 +244,45 @@ static void bq2477x_work_thread(struct kthread_work *work)
}
}
+static void of_bq2477x_parse_platform_data(struct i2c_client *client,
+ struct bq2477x_platform_data *pdata)
+{
+ struct device_node *np = client->dev.of_node;
+ u32 pval;
+ int ret;
+
+ ret = of_property_read_u32(np, "ti,dac-ichg", &pval);
+ if (!ret)
+ pdata->dac_ichg = pval;
+ else
+ dev_warn(&client->dev, "dac-ichg not provided\n");
+
+ ret = of_property_read_u32(np, "ti,dac-v", &pval);
+ if (!ret)
+ pdata->dac_v = pval;
+ else
+ dev_warn(&client->dev, "dac-v not provided\n");
+
+ ret = of_property_read_u32(np, "ti,dac-minsv", &pval);
+ if (!ret)
+ pdata->dac_minsv = pval;
+ else
+ dev_warn(&client->dev, "dac-minsv not provided\n");
+
+ ret = of_property_read_u32(np, "ti,dac-iin", &pval);
+ if (!ret)
+ pdata->dac_iin = pval;
+ else
+ dev_warn(&client->dev, "dac-iin not provided\n");
+
+ ret = of_property_read_u32(np, "ti,wdt-refresh-timeout", &pval);
+ if (!ret)
+ pdata->wdt_refresh_timeout = pval;
+ else
+ dev_warn(&client->dev, "wdt-refresh-timeout not provided\n");
+
+}
+
static int bq2477x_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -251,7 +290,15 @@ static int bq2477x_probe(struct i2c_client *client,
struct bq2477x_platform_data *pdata;
int ret = 0;
- pdata = client->dev.platform_data;
+ if (client->dev.of_node) {
+ pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
+ if (!pdata)
+ return -ENOMEM;
+ of_bq2477x_parse_platform_data(client, pdata);
+ } else {
+ pdata = client->dev.platform_data;
+ }
+
if (!pdata) {
dev_err(&client->dev, "No Platform data");
return -EINVAL;