Merge "power: bcl_peripheral: Enable BCL LMH algorithm only once"

This commit is contained in:
Linux Build Service Account 2017-03-01 11:09:02 -08:00 committed by Gerrit - the friendly Code Review server
commit db26a193ab
2 changed files with 22 additions and 14 deletions

View file

@ -288,23 +288,13 @@ static void soc_mitigate(struct work_struct *work)
update_cpu_freq(); update_cpu_freq();
} }
static int power_supply_callback(struct notifier_block *nb, static int get_and_evaluate_battery_soc(void)
unsigned long event, void *data)
{ {
struct power_supply *psy = data;
static struct power_supply *batt_psy; static struct power_supply *batt_psy;
union power_supply_propval ret = {0,}; union power_supply_propval ret = {0,};
int battery_percentage; int battery_percentage;
enum bcl_threshold_state prev_soc_state; enum bcl_threshold_state prev_soc_state;
if (gbcl->bcl_mode != BCL_DEVICE_ENABLED) {
pr_debug("BCL is not enabled\n");
return NOTIFY_OK;
}
if (strcmp(psy->desc->name, "battery"))
return NOTIFY_OK;
if (!batt_psy) if (!batt_psy)
batt_psy = power_supply_get_by_name("battery"); batt_psy = power_supply_get_by_name("battery");
if (batt_psy) { if (batt_psy) {
@ -328,6 +318,22 @@ static int power_supply_callback(struct notifier_block *nb,
return NOTIFY_OK; return NOTIFY_OK;
} }
static int power_supply_callback(struct notifier_block *nb,
unsigned long event, void *data)
{
struct power_supply *psy = data;
if (gbcl->bcl_mode != BCL_DEVICE_ENABLED) {
pr_debug("BCL is not enabled\n");
return NOTIFY_OK;
}
if (strcmp(psy->desc->name, "battery"))
return NOTIFY_OK;
return get_and_evaluate_battery_soc();
}
static int bcl_get_battery_voltage(int *vbatt_mv) static int bcl_get_battery_voltage(int *vbatt_mv)
{ {
static struct power_supply *psy; static struct power_supply *psy;
@ -646,7 +652,7 @@ static void bcl_periph_mode_set(enum bcl_device_mode mode)
* power state changes. Make sure we read the current SoC * power state changes. Make sure we read the current SoC
* and mitigate. * and mitigate.
*/ */
power_supply_callback(&gbcl->psy_nb, 1, gbcl); get_and_evaluate_battery_soc();
ret = power_supply_reg_notifier(&gbcl->psy_nb); ret = power_supply_reg_notifier(&gbcl->psy_nb);
if (ret < 0) { if (ret < 0) {
pr_err("Unable to register soc notifier rc = %d\n", pr_err("Unable to register soc notifier rc = %d\n",

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. * Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -482,8 +482,10 @@ static int bcl_access_monitor_enable(bool enable)
if (enable == bcl_perph->enabled) if (enable == bcl_perph->enabled)
goto access_exit; goto access_exit;
if ((bcl_perph_version == BCL_PMI8998) && !hw_enabled && enable) if ((bcl_perph_version == BCL_PMI8998) && !hw_enabled && enable) {
bcl_lmh_dcvs_enable(); bcl_lmh_dcvs_enable();
hw_enabled = true;
}
for (; i < BCL_PARAM_MAX; i++) { for (; i < BCL_PARAM_MAX; i++) {
perph_data = &bcl_perph->param[i]; perph_data = &bcl_perph->param[i];