diff options
author | Chaitanya Bandi <bandik@nvidia.com> | 2014-03-14 11:23:08 +0530 |
---|---|---|
committer | Laxman Dewangan <ldewangan@nvidia.com> | 2014-03-19 04:20:46 -0700 |
commit | deb37e638c00ea47e8a400f49ae71bed180762ef (patch) | |
tree | fbfc07a7ca6a73fd3049581778a03981a008aa8c /drivers/power | |
parent | 9a5eeced3e54f49f8bf8b81bf2120d22e4eb0b99 (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.c | 49 |
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; |