mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
power: supply: rk817_battery: add power supply property for Android R
Signed-off-by: Shunqing Chen <csq@rock-chips.com> Change-Id: I3621212fe6ed941d5d595fbcfd5865e1e265fdb1
This commit is contained in:
@@ -1942,9 +1942,12 @@ static enum power_supply_property rk817_bat_props[] = {
|
||||
POWER_SUPPLY_PROP_VOLTAGE_NOW,
|
||||
POWER_SUPPLY_PROP_HEALTH,
|
||||
POWER_SUPPLY_PROP_CAPACITY,
|
||||
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
|
||||
POWER_SUPPLY_PROP_TEMP,
|
||||
POWER_SUPPLY_PROP_CHARGE_COUNTER,
|
||||
POWER_SUPPLY_PROP_CHARGE_FULL,
|
||||
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
|
||||
POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
|
||||
};
|
||||
|
||||
static int rk817_bat_get_usb_psy(struct device *dev, void *data)
|
||||
@@ -2014,6 +2017,45 @@ static int rk817_bat_get_charge_state(struct rk817_battery_device *battery)
|
||||
return (battery->usb_in || battery->ac_in);
|
||||
}
|
||||
|
||||
static int rk817_get_capacity_leve(struct rk817_battery_device *battery)
|
||||
{
|
||||
int dsoc;
|
||||
|
||||
if (battery->pdata->bat_mode == MODE_VIRTUAL)
|
||||
return POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
|
||||
|
||||
dsoc = (battery->dsoc + 500) / 1000;
|
||||
if (dsoc < 1)
|
||||
return POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
|
||||
else if (dsoc <= 20)
|
||||
return POWER_SUPPLY_CAPACITY_LEVEL_LOW;
|
||||
else if (dsoc <= 70)
|
||||
return POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
|
||||
else if (dsoc <= 90)
|
||||
return POWER_SUPPLY_CAPACITY_LEVEL_HIGH;
|
||||
else
|
||||
return POWER_SUPPLY_CAPACITY_LEVEL_FULL;
|
||||
}
|
||||
|
||||
static int rk817_battery_time_to_full(struct rk817_battery_device *battery)
|
||||
{
|
||||
int time_sec;
|
||||
int cap_temp;
|
||||
|
||||
if (battery->pdata->bat_mode == MODE_VIRTUAL) {
|
||||
time_sec = 3600;
|
||||
} else if (battery->voltage_avg > 0) {
|
||||
cap_temp = battery->design_cap - (battery->remain_cap / 1000);
|
||||
if (cap_temp < 0)
|
||||
cap_temp = 0;
|
||||
time_sec = (3600 * cap_temp) / battery->voltage_avg;
|
||||
} else {
|
||||
time_sec = 3600 * 24; /* One day */
|
||||
}
|
||||
|
||||
return time_sec;
|
||||
}
|
||||
|
||||
static int rk817_battery_get_property(struct power_supply *psy,
|
||||
enum power_supply_property psp,
|
||||
union power_supply_propval *val)
|
||||
@@ -2036,6 +2078,9 @@ static int rk817_battery_get_property(struct power_supply *psy,
|
||||
if (battery->pdata->bat_mode == MODE_VIRTUAL)
|
||||
val->intval = VIRTUAL_SOC;
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
|
||||
val->intval = rk817_get_capacity_leve(battery);
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_HEALTH:
|
||||
val->intval = POWER_SUPPLY_HEALTH_GOOD;
|
||||
break;
|
||||
@@ -2064,8 +2109,12 @@ static int rk817_battery_get_property(struct power_supply *psy,
|
||||
val->intval = battery->charge_count;
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_CHARGE_FULL:
|
||||
case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
|
||||
val->intval = battery->pdata->design_capacity * 1000;/* uAh */
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW:
|
||||
val->intval = rk817_battery_time_to_full(battery);
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_VOLTAGE_MAX:
|
||||
val->intval = 4500 * 1000;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user