From 5207bf3492f9e48c9e45fbe9cac65ae292bfe2ca Mon Sep 17 00:00:00 2001 From: Subbaraman Narayanamurthy Date: Wed, 14 Dec 2016 15:05:22 -0800 Subject: [PATCH 1/2] power_supply: Add SOC_REPORTING_READY property Add SOC_REORTING_READY property to indicate if the SOC is ready to be reported. Change-Id: I53ac153ba9f7ae81bb0657b17e0e798fd3fe4f48 Signed-off-by: Subbaraman Narayanamurthy --- drivers/power/power_supply_sysfs.c | 1 + include/linux/power_supply.h | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c index a4aee80798e4..83b75fcd257e 100644 --- a/drivers/power/power_supply_sysfs.c +++ b/drivers/power/power_supply_sysfs.c @@ -278,6 +278,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(parallel_percent), POWER_SUPPLY_ATTR(pe_start), POWER_SUPPLY_ATTR(set_ship_mode), + POWER_SUPPLY_ATTR(soc_reporting_ready), /* Local extensions of type int64_t */ POWER_SUPPLY_ATTR(charge_counter_ext), /* Properties of type `const char *' */ diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 9b6359241018..20280ff20e52 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -227,6 +227,7 @@ enum power_supply_property { POWER_SUPPLY_PROP_PARALLEL_PERCENT, POWER_SUPPLY_PROP_PE_START, POWER_SUPPLY_PROP_SET_SHIP_MODE, + POWER_SUPPLY_PROP_SOC_REPORTING_READY, /* Local extensions of type int64_t */ POWER_SUPPLY_PROP_CHARGE_COUNTER_EXT, /* Properties of type `const char *' */ From a38365351b82cc698a3144b70486aafe1c3e91eb Mon Sep 17 00:00:00 2001 From: Subbaraman Narayanamurthy Date: Wed, 14 Dec 2016 15:10:15 -0800 Subject: [PATCH 2/2] power: qpnp-fg-gen3: add SOC_REPORTING_READY property Add SOC_REPORTING_READY property which indicates when the SOC reporting is ready from FG driver. This can be read by healthd daemon during its start. Change-Id: I415e322e99bacd61c4e9ac921643d87d3eec4b3e Signed-off-by: Subbaraman Narayanamurthy --- drivers/power/qcom-charger/fg-core.h | 1 + drivers/power/qcom-charger/qpnp-fg-gen3.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/power/qcom-charger/fg-core.h b/drivers/power/qcom-charger/fg-core.h index d8b6754a465f..6f8266a3161c 100644 --- a/drivers/power/qcom-charger/fg-core.h +++ b/drivers/power/qcom-charger/fg-core.h @@ -335,6 +335,7 @@ struct fg_chip { bool recharge_soc_adjusted; bool ki_coeff_dischg_en; bool esr_fcc_ctrl_en; + bool soc_reporting_ready; struct completion soc_update; struct completion soc_ready; struct delayed_work profile_load_work; diff --git a/drivers/power/qcom-charger/qpnp-fg-gen3.c b/drivers/power/qcom-charger/qpnp-fg-gen3.c index 22025ac27ffa..7c1ece431beb 100644 --- a/drivers/power/qcom-charger/qpnp-fg-gen3.c +++ b/drivers/power/qcom-charger/qpnp-fg-gen3.c @@ -2050,6 +2050,7 @@ done: fg_notify_charger(chip); chip->profile_loaded = true; + chip->soc_reporting_ready = true; fg_dbg(chip, FG_STATUS, "profile loaded successfully"); out: vote(chip->awake_votable, PROFILE_LOAD, false, 0); @@ -2386,6 +2387,9 @@ static int fg_psy_get_property(struct power_supply *psy, case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG: rc = fg_get_time_to_empty(chip, &pval->intval); break; + case POWER_SUPPLY_PROP_SOC_REPORTING_READY: + pval->intval = chip->soc_reporting_ready; + break; default: pr_err("unsupported property %d\n", psp); rc = -EINVAL; @@ -2483,6 +2487,7 @@ static enum power_supply_property fg_psy_props[] = { POWER_SUPPLY_PROP_CHARGE_COUNTER, POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, + POWER_SUPPLY_PROP_SOC_REPORTING_READY, }; static const struct power_supply_desc fg_psy_desc = { @@ -2773,9 +2778,11 @@ static irqreturn_t fg_batt_missing_irq_handler(int irq, void *data) chip->profile_available = false; chip->profile_loaded = false; clear_cycle_counter(chip); + chip->soc_reporting_ready = false; } else { rc = fg_get_batt_profile(chip); if (rc < 0) { + chip->soc_reporting_ready = true; pr_err("Error in getting battery profile, rc:%d\n", rc); return IRQ_HANDLED; } @@ -3213,9 +3220,11 @@ static int fg_parse_dt(struct fg_chip *chip) chip->rradc_base = base; rc = fg_get_batt_profile(chip); - if (rc < 0) + if (rc < 0) { + chip->soc_reporting_ready = true; pr_warn("profile for batt_id=%dKOhms not found..using OTP, rc:%d\n", chip->batt_id_ohms / 1000, rc); + } /* Read all the optional properties below */ rc = of_property_read_u32(node, "qcom,fg-cutoff-voltage", &temp);