From 0e71c391e53bcd65f5739bea57abb79e7b0bcbcb Mon Sep 17 00:00:00 2001 From: Bruno Sampaio Leite Date: Mon, 29 May 2023 13:53:19 -0300 Subject: [PATCH] Add capacity_level to discrete charger driver Miami is having a Kernel Panic when battery reaches 0% while device is charging. Android system uses battery capacity_level prop to control shutdown when device is charging but battery reaches a critical level. Add this prop to discrete charger driver. Change-Id: I6a278ba0157a22a54ecedf0cf26f73361e711354 signed-off-by: brunosmp@motorola.com Reviewed-on: https://gerrit.mot.com/2625350 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Bruno Oliveira Reviewed-by: Lu Chai Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../mmi_discrete_charger_core.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c index 267acd0a2202..1fbab2067aae 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c @@ -569,6 +569,26 @@ static int mmi_get_rp_based_dcp_current(struct mmi_discrete_charger *chg, int ty return rp_ua; } +static int mmi_discrete_get_batt_capacity_level(struct mmi_discrete_charger *chg) +{ + union power_supply_propval batt_soc; + + power_supply_get_property(chg->mmi_psy, POWER_SUPPLY_PROP_CAPACITY, &batt_soc); + + if (batt_soc.intval >= 100) + return POWER_SUPPLY_CAPACITY_LEVEL_FULL; + else if (batt_soc.intval >= 80 && batt_soc.intval < 100) + return POWER_SUPPLY_CAPACITY_LEVEL_HIGH; + else if (batt_soc.intval >= 20 && batt_soc.intval < 80) + return POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; + else if (batt_soc.intval > 0 && batt_soc.intval < 20) + return POWER_SUPPLY_CAPACITY_LEVEL_LOW; + else if (batt_soc.intval == 0) + return POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; + else + return POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN; +} + static int mmi_discrete_handle_usb_current(struct mmi_discrete_charger *chg, int usb_current) { @@ -1328,6 +1348,7 @@ static enum power_supply_property batt_props[] = { POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_CHARGE_TYPE, POWER_SUPPLY_PROP_CAPACITY, + POWER_SUPPLY_PROP_CAPACITY_LEVEL, POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_VOLTAGE_MAX, @@ -1399,6 +1420,9 @@ static int batt_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_VOLTAGE_NOW: rc = power_supply_get_property(chip->bms_psy, psp, val); break; + case POWER_SUPPLY_PROP_CAPACITY_LEVEL: + val->intval = mmi_discrete_get_batt_capacity_level(chip); + break; default: mmi_err(chip, "Get not support prop %d rc = %d\n", psp, rc); rc = -EINVAL;