From 1ddf07d8e2648b4ad2bf294f84ca403cea2ba5c6 Mon Sep 17 00:00:00 2001 From: Subbaraman Narayanamurthy Date: Tue, 1 Nov 2016 16:29:46 -0700 Subject: [PATCH] qpnp-fg-gen3: update empty voltage threshold and empty SOC irq handling As per the hardware characterization, update the battery empty voltage threshold to 2.8V. Since this moves the voltage little away from cutoff voltage, update the empty SOC interrupt handling to report SOC as 0. Since we only need the rising edge of empty SOC interrupt, modify the interrupt flag as well. Change-Id: I665a6f879af4e6b6e9f94b5464be7894d5ea67cb Signed-off-by: Subbaraman Narayanamurthy --- .../bindings/power/qcom-charger/qpnp-fg-gen3.txt | 2 +- arch/arm/boot/dts/qcom/msm-pmicobalt.dtsi | 3 ++- drivers/power/qcom-charger/fg-core.h | 1 + drivers/power/qcom-charger/qpnp-fg-gen3.c | 9 ++++++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/power/qcom-charger/qpnp-fg-gen3.txt b/Documentation/devicetree/bindings/power/qcom-charger/qpnp-fg-gen3.txt index caabcd347a72..4f5e0a117b2d 100644 --- a/Documentation/devicetree/bindings/power/qcom-charger/qpnp-fg-gen3.txt +++ b/Documentation/devicetree/bindings/power/qcom-charger/qpnp-fg-gen3.txt @@ -55,7 +55,7 @@ First Level Node - FG Gen3 device be notified via the power supply framework. The userspace will read 0% soc and immediately shutdown. If this property is not specified, then the default value used will be - 3100mV. + 2800mV. - qcom,fg-vbatt-low-thr Usage: optional diff --git a/arch/arm/boot/dts/qcom/msm-pmicobalt.dtsi b/arch/arm/boot/dts/qcom/msm-pmicobalt.dtsi index a5243aff4282..64d85380c5dd 100644 --- a/arch/arm/boot/dts/qcom/msm-pmicobalt.dtsi +++ b/arch/arm/boot/dts/qcom/msm-pmicobalt.dtsi @@ -334,7 +334,8 @@ <0x2 0x40 0x2 IRQ_TYPE_EDGE_BOTH>, <0x2 0x40 0x3 IRQ_TYPE_EDGE_BOTH>, <0x2 0x40 0x4 IRQ_TYPE_EDGE_BOTH>, - <0x2 0x40 0x5 IRQ_TYPE_EDGE_BOTH>, + <0x2 0x40 0x5 + IRQ_TYPE_EDGE_RISING>, <0x2 0x40 0x6 IRQ_TYPE_EDGE_BOTH>, <0x2 0x40 0x7 IRQ_TYPE_EDGE_BOTH>; interrupt-names = "soc-update", diff --git a/drivers/power/qcom-charger/fg-core.h b/drivers/power/qcom-charger/fg-core.h index cb5880189fbf..1a36ccca19f5 100644 --- a/drivers/power/qcom-charger/fg-core.h +++ b/drivers/power/qcom-charger/fg-core.h @@ -288,6 +288,7 @@ struct fg_chip { bool battery_missing; bool fg_restarting; bool charge_full; + bool charge_empty; bool recharge_soc_adjusted; bool ki_coeff_dischg_en; struct completion soc_update; diff --git a/drivers/power/qcom-charger/qpnp-fg-gen3.c b/drivers/power/qcom-charger/qpnp-fg-gen3.c index c9edc667f35d..7bb7866f3d2d 100644 --- a/drivers/power/qcom-charger/qpnp-fg-gen3.c +++ b/drivers/power/qcom-charger/qpnp-fg-gen3.c @@ -676,6 +676,7 @@ static bool is_debug_batt_id(struct fg_chip *chip) #define FULL_CAPACITY 100 #define FULL_SOC_RAW 255 #define DEBUG_BATT_SOC 67 +#define EMPTY_SOC 0 static int fg_get_prop_capacity(struct fg_chip *chip, int *val) { int rc, msoc; @@ -685,6 +686,11 @@ static int fg_get_prop_capacity(struct fg_chip *chip, int *val) return 0; } + if (chip->charge_empty) { + *val = EMPTY_SOC; + return 0; + } + if (chip->charge_full) { *val = FULL_CAPACITY; return 0; @@ -2302,6 +2308,7 @@ static irqreturn_t fg_empty_soc_irq_handler(int irq, void *data) { struct fg_chip *chip = data; + chip->charge_empty = true; if (is_charger_available(chip)) power_supply_changed(chip->batt_psy); @@ -2523,7 +2530,7 @@ static int fg_parse_ki_coefficients(struct fg_chip *chip) } #define DEFAULT_CUTOFF_VOLT_MV 3200 -#define DEFAULT_EMPTY_VOLT_MV 3100 +#define DEFAULT_EMPTY_VOLT_MV 2800 #define DEFAULT_CHG_TERM_CURR_MA 100 #define DEFAULT_SYS_TERM_CURR_MA -125 #define DEFAULT_DELTA_SOC_THR 1