summaryrefslogtreecommitdiff
path: root/drivers/power/tps65090-charger.c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2013-07-12 18:55:10 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:31:15 -0700
commit3119b3125aec453880db1c4c8504fc72b2b180fe (patch)
tree44c1fcaf481b61008c35ad21b0ce5060884f041e /drivers/power/tps65090-charger.c
parent8fe818f7e01d0263a6a54ec6b765e64c7afc4dc1 (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.c38
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;