report energy and charge full

This commit is contained in:
Saleem Abdulrasool
2010-11-12 13:11:21 -08:00
committed by Matt Sealey
parent 078accb95f
commit 46b11b0748

View File

@@ -219,7 +219,9 @@ static enum power_supply_property efikasb_batt_props[] = {
POWER_SUPPLY_PROP_MANUFACTURER,
POWER_SUPPLY_PROP_SERIAL_NUMBER,
POWER_SUPPLY_PROP_ENERGY_NOW,
POWER_SUPPLY_PROP_ENERGY_FULL,
POWER_SUPPLY_PROP_CHARGE_NOW,
POWER_SUPPLY_PROP_CHARGE_FULL,
};
static enum power_supply_property efikasb_ac_charger_props[] = {
@@ -396,6 +398,27 @@ static int efikasb_batt_get_energy_now(struct efikasb_batt_dev_info *di,
return ret;
}
static int efikasb_batt_get_energy_full(struct efikasb_batt_dev_info *di,
u32 *value)
{
int ret;
u32 battery_mode;
ret = efikasb_batt_read(di->client, SBS_BATTERY_MODE, &battery_mode);
if (ret < 0)
return ret;
efikasb_batt_write(di->client, SBS_BATTERY_MODE,
battery_mode | SBS_CAPACITY_MODE);
ret = efikasb_batt_read(di->client, SBS_FULL_CHARGE_CAPACITY, value);
if (ret == 0) {
*value *= 10000; /* 10 mWh -> uWh */
}
return ret;
}
static int efikasb_batt_get_charge_now(struct efikasb_batt_dev_info *di,
u32 *value)
{
@@ -417,6 +440,27 @@ static int efikasb_batt_get_charge_now(struct efikasb_batt_dev_info *di,
return ret;
}
static int efikasb_batt_get_charge_full(struct efikasb_batt_dev_info *di,
u32 *value)
{
int ret;
u32 battery_mode;
ret = efikasb_batt_read(di->client, SBS_BATTERY_MODE, &battery_mode);
if (ret < 0)
return ret;
efikasb_batt_write(di->client, SBS_BATTERY_MODE,
battery_mode & SBS_CAPACITY_MODE);
ret = efikasb_batt_read(di->client, SBS_FULL_CHARGE_CAPACITY, value);
if (ret == 0) {
*value *= 1000; /* mAh -> uAh */
}
return ret;
}
#define to_efikasb_batt_device_info(x) container_of((x), \
struct efikasb_batt_dev_info, bat);
@@ -537,12 +581,24 @@ static int efikasb_batt_get_property(struct power_supply *psy,
return ret;
val->intval = value;
break;
case POWER_SUPPLY_PROP_ENERGY_FULL:
ret = efikasb_batt_get_energy_full(di, &value);
if (ret != 0)
return ret;
val->intval = value;
break;
case POWER_SUPPLY_PROP_CHARGE_NOW:
ret = efikasb_batt_get_charge_now(di, &value);
if (ret != 0)
return ret;
val->intval = value;
break;
case POWER_SUPPLY_PROP_CHARGE_FULL:
ret = efikasb_batt_get_charge_full(di, &value);
if (ret != 0)
return ret;
val->intval = value;
break;
default:
return -EINVAL;
}