diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2013-07-12 18:55:10 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 13:31:15 -0700 |
commit | 3119b3125aec453880db1c4c8504fc72b2b180fe (patch) | |
tree | 44c1fcaf481b61008c35ad21b0ce5060884f041e /drivers/power/tps65090-charger.c | |
parent | 8fe818f7e01d0263a6a54ec6b765e64c7afc4dc1 (diff) |
power: tps65090-charger: register battery charger driver
Register battery charger driver to update the charging status
of battery.
bug 1231506
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/238557
(cherry picked from commit 165eb29a317e4f54a08315bbed1fc714a4bcea8e)
Change-Id: I9190dfa585281f59a9c43d387129e95f25e890de
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/248370
Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers/power/tps65090-charger.c')
-rw-r--r-- | drivers/power/tps65090-charger.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/drivers/power/tps65090-charger.c b/drivers/power/tps65090-charger.c index 2bae19114a11..ed0408021b3b 100644 --- a/drivers/power/tps65090-charger.c +++ b/drivers/power/tps65090-charger.c @@ -30,6 +30,7 @@ #include <linux/power_supply.h> #include <linux/power/sbs-battery.h> #include <linux/mfd/tps65090.h> +#include <linux/power/battery-charger-gauge-comm.h> #define TPS65090_INTR_STS 0x00 #define TPS65090_CG_CTRL0 0x04 @@ -52,6 +53,8 @@ struct tps65090_charger { int prev_ac_online; struct power_supply ac; struct tps65090_charger_data *chg_pdata; + struct battery_charger_dev *bc_dev; + int status; }; static enum power_supply_property tps65090_ac_props[] = { @@ -151,19 +154,37 @@ static irqreturn_t tps65090_charger_isr(int irq, void *dev_id) if (ret < 0) goto error; charger->ac_online = 1; + charger->status = BATTERY_CHARGING; } else { charger->ac_online = 0; + charger->status = BATTERY_DISCHARGING; } if (charger->prev_ac_online != charger->ac_online) { - if (charger->chg_pdata->update_status) - charger->chg_pdata->update_status(); + battery_charging_status_update(charger->bc_dev, + charger->status); power_supply_changed(&charger->ac); } error: return IRQ_HANDLED; } +static int tps65090_charger_get_status(struct battery_charger_dev *bc_dev) +{ + struct tps65090_charger *chip = battery_charger_get_drvdata(bc_dev); + + return chip->status; +} + +static struct battery_charging_ops tps65090_charger_bci_ops = { + .get_charging_status = tps65090_charger_get_status, +}; + +static struct battery_charger_info tps65090_charger_bci = { + .cell_id = 0, + .bc_ops = &tps65090_charger_bci_ops, +}; + static int tps65090_charger_probe(struct platform_device *pdev) { uint8_t retval = 0; @@ -226,6 +247,16 @@ static int tps65090_charger_probe(struct platform_device *pdev) goto fail_suppy_reg; } + charger_data->bc_dev = battery_charger_register(&pdev->dev, + &tps65090_charger_bci); + if (IS_ERR(charger_data->bc_dev)) { + ret = PTR_ERR(charger_data->bc_dev); + dev_err(&pdev->dev, "battery charger register failed: %d\n", + ret); + goto chg_reg_err; + } + battery_charger_set_drvdata(charger_data->bc_dev, charger_data); + ret = tps65090_config_charger(charger_data); if (ret < 0) { dev_err(&pdev->dev, "charger config failed, err %d\n", ret); @@ -253,6 +284,8 @@ static int tps65090_charger_probe(struct platform_device *pdev) return 0; fail_config: + battery_charger_unregister(charger_data->bc_dev); +chg_reg_err: power_supply_unregister(&charger_data->ac); fail_suppy_reg: @@ -264,6 +297,7 @@ static int tps65090_charger_remove(struct platform_device *pdev) { struct tps65090_charger *charger = dev_get_drvdata(&pdev->dev); + battery_charger_unregister(charger->bc_dev); power_supply_unregister(&charger->ac); free_irq(charger->irq_base, charger); return 0; |