diff options
author | Syed Rafiuddin <srafiuddin@nvidia.com> | 2012-04-04 11:34:02 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-04-10 11:27:32 -0700 |
commit | 1ce68caceddfff3403acd986aabb5f504b5cc610 (patch) | |
tree | 70a0b137120e0bda754da2e7aa4e3678a52d41ac /drivers/power | |
parent | 9598c23117273137d054dfd47752a15df0fa68bd (diff) |
power: max17048: addition of new properties
Addition of health and capacity level properties
Signed-off-by: Syed Rafiuddin <srafiuddin@nvidia.com>
Reviewed-on: http://git-master/r/93532
(cherry picked from commit 9892e1c30828bdcbf6ae53af72bb1a39cd19993e)
Change-Id: I28e9822772316ba7389a3c9518cf4778606dbfb7
Reviewed-on: http://git-master/r/95345
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Chandler Zhang <chazhang@nvidia.com>
Tested-by: Chandler Zhang <chazhang@nvidia.com>
Reviewed-by: Syed Rafiuddin <srafiuddin@nvidia.com>
Tested-by: Syed Rafiuddin <srafiuddin@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/max17048_battery.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/drivers/power/max17048_battery.c b/drivers/power/max17048_battery.c index 44275e329c5d..880ebba4cad0 100644 --- a/drivers/power/max17048_battery.c +++ b/drivers/power/max17048_battery.c @@ -40,7 +40,8 @@ #define MAX17048_UNLOCK_VALUE 0x4a57 #define MAX17048_RESET_VALUE 0x5400 #define MAX17048_DELAY 1000 -#define MAX17048_BATTERY_FULL 95 +#define MAX17048_BATTERY_FULL 100 +#define MAX17048_BATTERY_LOW 15 #define MAX17048_VERSION_NO 0x11 struct max17048_chip { @@ -60,6 +61,10 @@ struct max17048_chip { int soc; /* State Of Charge */ int status; + /* battery health */ + int health; + /* battery capacity */ + int capacity_level; int lasttime_vcell; int lasttime_soc; @@ -118,6 +123,12 @@ static int max17048_get_property(struct power_supply *psy, case POWER_SUPPLY_PROP_CAPACITY: val->intval = chip->soc; break; + case POWER_SUPPLY_PROP_HEALTH: + val->intval = chip->health; + break; + case POWER_SUPPLY_PROP_CAPACITY_LEVEL: + val->intval = chip->capacity_level; + break; default: return -EINVAL; } @@ -176,6 +187,18 @@ static void max17048_get_soc(struct i2c_client *client) dev_err(&client->dev, "%s: err %d\n", __func__, soc); chip->soc = soc >> 9; + if (chip->soc > MAX17048_BATTERY_FULL) { + chip->soc = MAX17048_BATTERY_FULL; + chip->status = POWER_SUPPLY_STATUS_FULL; + chip->capacity_level = POWER_SUPPLY_CAPACITY_LEVEL_FULL; + chip->health = POWER_SUPPLY_HEALTH_GOOD; + } else if (chip->soc < MAX17048_BATTERY_LOW) { + chip->health = POWER_SUPPLY_HEALTH_DEAD; + chip->capacity_level = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; + } else { + chip->health = POWER_SUPPLY_HEALTH_GOOD; + chip->capacity_level = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; + } } static uint16_t max17048_get_version(struct i2c_client *client) @@ -222,8 +245,6 @@ static void max17048_battery_status(enum charging_states status, else chip->status = POWER_SUPPLY_STATUS_DISCHARGING; - if (chip->soc > MAX17048_BATTERY_FULL) - chip->status = POWER_SUPPLY_STATUS_FULL; power_supply_changed(&chip->battery); power_supply_changed(&chip->usb); @@ -234,6 +255,8 @@ static enum power_supply_property max17048_battery_props[] = { POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CAPACITY, + POWER_SUPPLY_PROP_HEALTH, + POWER_SUPPLY_PROP_CAPACITY_LEVEL, }; static enum power_supply_property max17048_ac_props[] = { |