diff options
author | Thomas White <taw27@cam.ac.uk> | 2009-06-08 14:44:14 +0100 |
---|---|---|
committer | Thomas White <taw27@cam.ac.uk> | 2009-06-08 14:44:14 +0100 |
commit | 3a83621f0e6a52eff7402702b0774092cc7b0187 (patch) | |
tree | 0962d7359b5b15176a87d03b80be7ba70e252313 /drivers/power | |
parent | 6e278419626d23b3c15e4cb0ee3b56ce4ab99f87 (diff) | |
parent | 23b564c9d22cc5e442361e632626d5f131c40752 (diff) |
Merge branch 'andy-tracking' into drm-tracking
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/bq27000_battery.c | 12 | ||||
-rw-r--r-- | drivers/power/gta01_battery.c | 4 | ||||
-rw-r--r-- | drivers/power/pcf50633-charger.c | 3 |
3 files changed, 18 insertions, 1 deletions
diff --git a/drivers/power/bq27000_battery.c b/drivers/power/bq27000_battery.c index 9f0f1a96720..593cbe6f752 100644 --- a/drivers/power/bq27000_battery.c +++ b/drivers/power/bq27000_battery.c @@ -115,6 +115,7 @@ struct bq27000_bat_regs { int ai; int flags; int lmd; + int nac; int rsoc; int temp; int tte; @@ -170,9 +171,11 @@ static int hdq_read16(struct bq27000_device_info *di, int address) static void bq27000_battery_external_power_changed(struct power_supply *psy) { - struct bq27000_device_info *di = container_of(psy, struct bq27000_device_info, bat); + struct bq27000_device_info *di = + container_of(psy, struct bq27000_device_info, bat); dev_dbg(di->dev, "%s\n", __FUNCTION__); + cancel_delayed_work(&di->work); schedule_delayed_work(&di->work, 0); } @@ -269,6 +272,11 @@ use_bat: return di->regs.lmd; val->intval = (di->regs.lmd * 3570) / di->pdata->rsense_mohms; break; + case POWER_SUPPLY_PROP_CHARGE_NOW: + if (di->regs.nac < 0) + return di->regs.nac; + val->intval = (di->regs.nac * 3570) / di->pdata->rsense_mohms; + break; case POWER_SUPPLY_PROP_TEMP: if (di->regs.temp < 0) return di->regs.temp; @@ -321,6 +329,7 @@ static void bq27000_battery_work(struct work_struct *work) regs.ai = hdq_read16(di, BQ27000_AI_L); regs.flags = (di->pdata->hdq_read)(BQ27000_FLAGS); regs.lmd = hdq_read16(di, BQ27000_LMD_L); + regs.nac = hdq_read16(di, BQ27000_NAC_L); regs.rsoc = (di->pdata->hdq_read)(BQ27000_RSOC); regs.temp = hdq_read16(di, BQ27000_TEMP_L); regs.tte = hdq_read16(di, BQ27000_TTE_L); @@ -343,6 +352,7 @@ static enum power_supply_property bq27000_battery_props[] = { POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_CHARGE_FULL, + POWER_SUPPLY_PROP_CHARGE_NOW, POWER_SUPPLY_PROP_TEMP, POWER_SUPPLY_PROP_TECHNOLOGY, POWER_SUPPLY_PROP_PRESENT, diff --git a/drivers/power/gta01_battery.c b/drivers/power/gta01_battery.c index 909f7fe16d9..81a0fe7387e 100644 --- a/drivers/power/gta01_battery.c +++ b/drivers/power/gta01_battery.c @@ -19,6 +19,7 @@ struct gta01_battery { }; static enum power_supply_property gta01_bat_props[] = { + POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CURRENT_NOW, @@ -43,6 +44,9 @@ static int gta01_bat_get_property(struct power_supply *psy, case POWER_SUPPLY_PROP_CURRENT_NOW: val->intval = bat->pdata->get_current(); break; + case POWER_SUPPLY_PROP_PRESENT: + val->intval = 1; /* You must never run GTA01 without battery. */ + break; default: return -EINVAL; } diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/pcf50633-charger.c index 8772604ae1a..1bdb9906201 100644 --- a/drivers/power/pcf50633-charger.c +++ b/drivers/power/pcf50633-charger.c @@ -114,6 +114,9 @@ int pcf50633_mbc_get_status(struct pcf50633 *pcf) struct pcf50633_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev); int status = 0; + if (!mbc) + return 0; + if (mbc->usb_online) status |= PCF50633_MBC_USB_ONLINE; if (mbc->usb_active) |