cp: Remove charge rate, age, cycle

Moto future products will only show turbo charge for
quick charge. got charge rate only at main charge side.

calculate charge age and cycle also at main charge side.

Change-Id: Ib18db5ccf8665a21e55d53551fa2f686118ace25
Signed-off-by: chailu1 <chailu1@lenovo.com>
Reviewed-on: https://gerrit.mot.com/2031246
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Haijian Ma <mahj8@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
chailu1 2021-08-03 13:44:55 +08:00 • committed by Lu Chai
commit f72ce3acdc
2 changed files with 1 additions and 248 deletions

View file

@ -261,9 +261,7 @@ static int pd_volt_max_init = 0;
static int pd_curr_max_init = 0;
static int *dt_temp_zones;
static struct mmi_chrg_dts_info *chrg_name_list;
static char *charge_rate[] = {
"None", "Normal", "Weak", "Turbo", "Turbo_30W", "Hyper"
};
#define MIN_TEMP_C -20
#define MAX_TEMP_C 60
#define HYSTEREISIS_DEGC 2
@ -752,32 +750,6 @@ static int psy_changed(struct notifier_block *nb, unsigned long evt, void *ptr)
return NOTIFY_OK;
}
static int get_prop_charger_present(struct mmi_charger_manager *chg,
union power_supply_propval *val)
{
int rc = -EINVAL;
val->intval = 0;
rc = mmi_charger_read_iio_chan(chg, SMB5_TYPEC_MODE, &val->intval);
if (rc < 0) {
mmi_chrg_err(chg, "Couldn't read TypeC Mode rc=%d\n", rc);
return rc;
}
switch (val->intval) {
case QTI_POWER_SUPPLY_TYPEC_SOURCE_DEFAULT:
case QTI_POWER_SUPPLY_TYPEC_SOURCE_MEDIUM:
case QTI_POWER_SUPPLY_TYPEC_SOURCE_HIGH:
val->intval = 1;
break;
default:
val->intval = 0;
break;
}
return rc;
}
#define REV_CP_THRESH_UV 4400000
#define CP_IBUS_THRESH_MA 20
#define IBAT_THRESH_UA 10000
@ -821,75 +793,6 @@ bool mmi_is_cable_plugout(struct mmi_charger_manager *chip)
return false;
}
#define WEAK_CHRG_THRSH 450
#define TURBO_CHRG_THRSH 2500
#define TURBO_30W_CHRG_THRSH_UW 25000000
#define HYPER_CHRG_THRSH_UW 40000000
void mmi_chrg_rate_check(struct mmi_charger_manager *chg)
{
union power_supply_propval val;
int chrg_cm_ma = 0;
int chrg_cs_ma = 0;
int charger_power = 0;
int prev_chg_rate = chg->charger_rate;
int rc = -EINVAL;
if (!chg->usb_psy) {
mmi_chrg_err(chg, "No usb PSY\n");
return;
}
val.intval = 0;
rc = get_prop_charger_present(chg, &val);
if (rc < 0) {
mmi_chrg_err(chg, "Error getting Charger Present rc = %d\n", rc);
return;
}
if (val.intval) {
val.intval = 0;
rc = mmi_charger_read_iio_chan(chg, SMB5_HW_CURRENT_MAX, &val.intval);
if (rc < 0) {
mmi_chrg_info(chg, "Error getting HW Current Max rc = %d\n", rc);
return;
}
chrg_cm_ma = val.intval / 1000;
val.intval = 0;
rc = mmi_charger_read_iio_chan(chg, SMB5_USB_INPUT_CURRENT_SETTLED, &val.intval);
if (rc < 0) {
mmi_chrg_err(chg, "Error getting ICL Settled rc = %d\n", rc);
return;
}
chrg_cs_ma = val.intval / 1000;
} else {
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_NONE;
goto end_rate_check;
}
mmi_chrg_info(chg, "SMBMMI: cm %d, cs %d\n", chrg_cm_ma, chrg_cs_ma);
if (chrg_cm_ma >= TURBO_CHRG_THRSH)
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_TURBO;
else if ((chrg_cm_ma > WEAK_CHRG_THRSH) && (chrg_cs_ma < WEAK_CHRG_THRSH))
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_WEAK;
else if (prev_chg_rate == POWER_SUPPLY_CHARGE_RATE_NONE)
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_NORMAL;
if (chg->pd_pps_support) {
charger_power = (chg->pd_curr_max / 1000) * (chg->pd_volt_max / 1000);
if (charger_power >= HYPER_CHRG_THRSH_UW)
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_HYPER;
else if (charger_power >= TURBO_30W_CHRG_THRSH_UW)
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_TURBO_30W;
}
end_rate_check:
if (prev_chg_rate != chg->charger_rate)
mmi_chrg_info(chg, "%s Charger Detected\n",
charge_rate[chg->charger_rate]);
}
static bool mmi_factory_check(void)
{
struct device_node *np = of_find_node_by_path("/chosen");
@ -1017,117 +920,6 @@ static void mmi_awake_vote(struct mmi_charger_manager *chip, bool awake)
pm_relax(chip->dev);
}
static void mmi_batt_age_init(struct mmi_charger_manager *chip)
{
int rc = 0;
union power_supply_propval pval;
if (!chip->batt_psy) {
chip->batt_psy = power_supply_get_by_name("battery");
if (!chip->batt_psy)
return;
}
rc = power_supply_get_property(chip->batt_psy,
POWER_SUPPLY_PROP_STATUS, &pval);
if (rc < 0) {
mmi_chrg_err(chip, "Couldn't get batt status\n");
return;
}
chip->pres_batt_status = pval.intval;
chip->prev_batt_status = chip->pres_batt_status;
rc = power_supply_get_property(chip->batt_psy,
POWER_SUPPLY_PROP_CAPACITY, &pval);
if (rc < 0) {
mmi_chrg_err(chip, "Couldn't get batt capacity\n");
return;
}
chip->soc_cycles_start= pval.intval;
chip->batt_cap_delta = 0;
return;
}
static void mmi_cycle_counts(struct mmi_charger_manager *chip)
{
int rc = 0;
int batt_design_capacity = 0, new_cycles = 0;
int soc_report = 0, soc_delta = 0, batt_delta_capacity = 0;
union power_supply_propval pval;
if (!chip->batt_psy) {
chip->batt_psy = power_supply_get_by_name("battery");
if (!chip->batt_psy)
return;
}
rc = power_supply_get_property(chip->batt_psy,
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, &pval);
if (rc < 0) {
mmi_chrg_err(chip, "Couldn't get batt design capacity\n");
return;
}
batt_design_capacity = pval.intval;
rc = power_supply_get_property(chip->batt_psy,
POWER_SUPPLY_PROP_STATUS, &pval);
if (rc < 0) {
mmi_chrg_err(chip, "Couldn't get batt status\n");
return;
}
chip ->pres_batt_status = pval.intval;
rc = power_supply_get_property(chip->batt_psy,
POWER_SUPPLY_PROP_CAPACITY, &pval);
if (rc < 0) {
mmi_chrg_err(chip, "Couldn't get batt capacity\n");
return;
}
soc_report = pval.intval;
mmi_chrg_dbg(chip, PR_MOTO, "cycle_count %d, pres %d, prev %d, soc_report %d, "
"soc_cycles_start %d, batt_cap_delta %d, "
"design_capcaity %d, batt_soc_delta %d\n",
chip->cycles, chip->pres_batt_status,
chip->prev_batt_status,
soc_report, chip->soc_cycles_start,
chip->batt_cap_delta, batt_design_capacity,
chip->batt_soc_delta);
if (chip->prev_batt_status == POWER_SUPPLY_STATUS_CHARGING
&& chip->pres_batt_status != POWER_SUPPLY_STATUS_CHARGING) {
chip->soc_cycles_start = soc_report;
} else if (chip->prev_batt_status != POWER_SUPPLY_STATUS_CHARGING
&& chip->pres_batt_status == POWER_SUPPLY_STATUS_CHARGING) {
soc_delta = chip->soc_cycles_start - soc_report;
if (soc_delta > 0) {
chip->batt_soc_delta += soc_delta;
batt_delta_capacity = (chip->batt_soc_delta * batt_design_capacity) / 100
+ chip->batt_cap_delta;
new_cycles = batt_delta_capacity / batt_design_capacity;
if (new_cycles > 0) {
chip->cycles += batt_delta_capacity / batt_design_capacity;
chip->batt_cap_delta = batt_delta_capacity % batt_design_capacity;
chip->batt_soc_delta = 0;
}
}
chip->soc_cycles_start = soc_report;
}
chip->prev_batt_status = chip->pres_batt_status;
}
static void mmi_power_supply_changed(struct power_supply *psy,
char *envp_ext[])
{
dev_err(&psy->dev, "%s: %s\n", __func__, envp_ext[0]);
kobject_uevent_env(&psy->dev.kobj, KOBJ_CHANGE, envp_ext);
power_supply_changed(psy);
}
#define HEARTBEAT_DELAY_MS 60000
#define SMBCHG_HEARTBEAT_INTRVAL_NS 70000000000
#define CHG_SHOW_MAX_SIZE 50
@ -1136,8 +928,6 @@ static void mmi_heartbeat_work(struct work_struct *work)
struct mmi_charger_manager *chip = container_of(work,
struct mmi_charger_manager, heartbeat_work.work);
int hb_resch_time = 0, ret = 0, i = 0;
char *chrg_rate_string = NULL;
char *envp[2];
union power_supply_propval val;
bool pd_active;
@ -1237,28 +1027,6 @@ static void mmi_heartbeat_work(struct work_struct *work)
kick_qc3p_sm(chip, 100);
}
if (chip->use_batt_age)
mmi_cycle_counts(chip);
mmi_chrg_rate_check(chip);
chrg_rate_string = kmalloc(CHG_SHOW_MAX_SIZE, GFP_KERNEL);
if (!chrg_rate_string) {
mmi_chrg_err(chip, "SMBMMI: Failed to Get Uevent Mem\n");
envp[0] = NULL;
} else {
scnprintf(chrg_rate_string, CHG_SHOW_MAX_SIZE,
"POWER_SUPPLY_CHARGE_RATE=%s",
charge_rate[chip->charger_rate]);
envp[0] = chrg_rate_string;
envp[1] = NULL;
}
if (chip->qcom_psy) {
mmi_power_supply_changed(chip->batt_psy, envp);
}
kfree(chrg_rate_string);
schedule_work:
schedule_delayed_work(&chip->heartbeat_work,
msecs_to_jiffies(hb_resch_time));
@ -1399,9 +1167,6 @@ static int mmi_chrg_manager_parse_dt(struct mmi_charger_manager *chip)
chip->pl_chrg_vbatt_min =
DEFAULT_PL_CHRG_VBATT_MIN;
chip->use_batt_age = of_property_read_bool(node,
"mmi,use-batt-age");
chip->extrn_fg = of_property_read_bool(node,
"mmi,extrn-fg");
@ -1884,8 +1649,6 @@ static int mmi_chrg_manager_probe(struct platform_device *pdev)
if (ret)
goto cleanup;
mmi_batt_age_init(chip);
init_completion(&chip->sm_completion);
platform_set_drvdata(pdev, chip);

View file

@ -180,7 +180,6 @@ struct mmi_charger_manager {
struct device *dev;
struct power_supply *batt_psy;
struct power_supply *qcom_psy;
struct power_supply *extrn_psy;
struct power_supply *usb_psy;
struct power_supply *mmi_chrg_mgr_psy;
struct usbpd *pd_handle;
@ -232,7 +231,6 @@ struct mmi_charger_manager {
int pps_result_history_idx;
/*save the result of the return from PD request*/
int charger_rate;
bool vbus_present;
bool pd_pps_support;
bool pd_pps_balance;
@ -248,14 +246,6 @@ struct mmi_charger_manager {
bool batt_therm_cooling;
int batt_therm_cooling_cnt;
bool use_batt_age;
int cycles;
int batt_cap_delta;
int batt_soc_delta;
int soc_cycles_start;
int pres_batt_status;
int prev_batt_status;
struct delayed_work mmi_chrg_sm_work; /*mmi charger state machine work*/
struct delayed_work heartbeat_work; /*cycle trig heartbeat work*/
struct completion sm_completion;