From 93340a4ba87dc717418ed9c4db59a6c3d87b024f Mon Sep 17 00:00:00 2001 From: prototype74 <46874884+prototype74@users.noreply.github.com> Date: Sat, 14 Nov 2020 16:56:34 +0100 Subject: [PATCH] s3ve3g: improved sec-battery compatibility with additional fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Disabled increasing VDDMAX in qpnp-charger - Fixed non-charging issue after flashlight has been turned off while charging - Enabled battery swelling protection (CONFIG_BATTERY_SWELLING) in sec-battery to s3ve3g devices (proper configs are defined in battery header already) - Enabled prevent SOC jump. The battery driver will slowly add a SOC until it's 100 when the average current is below 170 and min SOC is 93 - Reduced minimum expected full condition SOC from 95 to 93 - Removed 'ext-ovp-present' bool from device tree as only qpnp-sec-charger calls it - Reworked default high battery temperature threshold/recovery (60°C/47°C to 58°C/53°C) also while in LPM - Switched from Qualcomm's flash-boot-supply to Samsung's flash regulator disabler/enabler - Switched from time measure check type (2400 mins) to current check type (<170mA) while charging to report full charged condition Change-Id: Id74e3d9497d381a389ae56096c61dfa7200a83cf --- .../msm8226-camera-sensor-mtp-s3ve-r01.dtsi | 30 +++++++------------ .../msm8226-sec-s3ve3geur-battery-data.dtsi | 13 +++++--- .../msm8226/msm8226-sec-s3ve3geur-r04.dtsi | 5 ---- arch/arm/configs/lineage_s3ve3gds_defconfig | 2 +- arch/arm/configs/lineage_s3ve3gjv_defconfig | 2 +- arch/arm/configs/lineage_s3ve3gxx_defconfig | 2 +- .../configs/msm8226-sec_s3ve3g_eur_defconfig | 2 +- drivers/battery/s3ve3g_battery_data.h | 16 +++++----- drivers/battery/sec_battery.c | 22 +++++++------- drivers/leds/leds-qpnp.c | 2 +- drivers/power/qpnp-charger.c | 6 ++-- include/linux/battery/sec_battery.h | 8 +++++ 12 files changed, 54 insertions(+), 56 deletions(-) diff --git a/arch/arm/boot/dts/msm8226/msm8226-camera-sensor-mtp-s3ve-r01.dtsi b/arch/arm/boot/dts/msm8226/msm8226-camera-sensor-mtp-s3ve-r01.dtsi index 90e5b2b6a9b..bf7c5e2dbeb 100644 --- a/arch/arm/boot/dts/msm8226/msm8226-camera-sensor-mtp-s3ve-r01.dtsi +++ b/arch/arm/boot/dts/msm8226/msm8226-camera-sensor-mtp-s3ve-r01.dtsi @@ -11,19 +11,17 @@ * GNU General Public License for more details. */ -&spmi_bus { - qcom,pm8226@1 { - qcom,leds@d300 { - compatible = "qcom,leds-qpnp"; - status = "okay"; - reg = <0xd300 0x100>; - label = "flash"; - flash-boost-supply = <&pm8226_chg_boost>; - }; - }; -}; - &soc { + led_flash0: qcom,camera-led-flash { + cell-index = <0>; + compatible = "qcom,camera-led-flash"; + qcom,flash-type = <1>; + qcom,flash-source = <&pm8226_flash0>; + qcom,torch-source = <&pm8226_torch>; + #address-cells = <1>; + #size-cells = <0>; + }; + i2c@20 { cell-index = <20>; compatible = "i2c-gpio"; @@ -47,14 +45,6 @@ }; }; - led_flash0: qcom,camera-led-flash { - cell-index = <0>; - compatible = "qcom,camera-led-flash"; - qcom,flash-type = <1>; - qcom,flash-source = <&pm8226_flash0 &pm8226_flash1>; - qcom,torch-source = <&pm8226_torch>; - }; - spi@f9923000 { eeprom0: qcom,eeprom@0 { compatible = "qcom,eeprom"; diff --git a/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-battery-data.dtsi b/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-battery-data.dtsi index 2138c55c92b..61636d732e0 100755 --- a/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-battery-data.dtsi +++ b/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-battery-data.dtsi @@ -43,8 +43,8 @@ battery,temp_check_type = <2>; /* SEC_BATTERY_TEMP_CHECK_TEMP */ battery,temp_check_count = <1>; battery,full_check_type = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */ - battery,full_check_type_2nd = <3>; /* SEC_BATTERY_FULLCHARGED_TIME */ - battery,full_check_count = <2>; + battery,full_check_type_2nd = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */ + battery,full_check_count = <1>; battery,chg_gpio_full_check = <0>; battery,chg_polarity_full_check = <1>; @@ -52,7 +52,7 @@ SEC_BATTERY_FULL_CONDITION_NOTIMEFULL | SEC_BATTERY_FULL_CONDITION_VCELL */ battery,full_condition_type = <13>; - battery,full_condition_soc = <95>; + battery,full_condition_soc = <93>; battery,full_condition_vcell = <4250>; battery,recharge_check_count = <1>; @@ -64,17 +64,22 @@ battery,recharging_total_time = <5400>; battery,charging_reset_time = <0>; + battery,swelling_full_check_current = <170>; + battery,swelling_high_rechg_voltage = <4150>; + battery,swelling_low_rechg_voltage = <4050>; + charger { status = "disable"; /* Charger */ battery,charger_name = "qpnp-chg"; battery,ovp_uvlo_check_type = <3>; /* SEC_BATTERY_OVP_UVLO_CHGPOLLING */ battery,full_check_type = <2>; /* SEC_BATTERY_FULLCHARGED_FG_CURRENT */ + battery,chg_float_voltage = <4350>; battery,input_current_limit = <1000 500 500 1000 500 1000 1000 500 500 1000 650 1000 1000 500 500 300 1000 1000 300 1000 1000 500 500>; battery,fast_charging_current = <1000 0 500 1000 500 1000 1000 500 0 1000 750 1000 1000 (-1) 500 300 1000 1000 300 1000 1000 0 0>; battery,full_check_current_1st = <170 0 170 170 170 170 170 170 0 170 170 170 170 0 170 170 170 170 170 170 170 0 0>; - battery,full_check_current_2nd = <2400 0 2400 2400 2400 2400 2400 2400 0 2400 2400 2400 2400 0 2400 2400 2400 2400 2400 2400 2400 0 0>; + battery,full_check_current_2nd = <170 0 170 170 170 170 170 170 0 170 170 170 170 0 170 170 170 170 170 170 170 0 0>; }; }; }; diff --git a/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-r04.dtsi b/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-r04.dtsi index 9a65f09e848..f1bbbfcc7c8 100755 --- a/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-r04.dtsi +++ b/arch/arm/boot/dts/msm8226/msm8226-sec-s3ve3geur-r04.dtsi @@ -411,10 +411,6 @@ &spmi_bus { qcom,pm8226@0 { - pm8226_chg: qcom,charger { - qcom,ext-ovp-present = <0>; - }; - qcom,leds@a300 { status = "okay"; qcom,led_mpp_4 { @@ -642,7 +638,6 @@ }; &pm8226_chg { - qcom,charging-disabled; qcom,battery-data = <&mtp_batterydata>; qcom,cool-bat-decidegc = <(-50)>; qcom,warm-bat-decidegc = <700>; diff --git a/arch/arm/configs/lineage_s3ve3gds_defconfig b/arch/arm/configs/lineage_s3ve3gds_defconfig index a2f2528c2cb..601c432c518 100644 --- a/arch/arm/configs/lineage_s3ve3gds_defconfig +++ b/arch/arm/configs/lineage_s3ve3gds_defconfig @@ -2311,7 +2311,7 @@ CONFIG_QPNP_CHARGER=y CONFIG_BATTERY_BCL=y # CONFIG_CHARGER_SMB347 is not set CONFIG_QPNP_BMS=y -# CONFIG_BATTERY_SWELLING is not set +CONFIG_BATTERY_SWELLING=y CONFIG_HWMON=y # CONFIG_HWMON_VID is not set # CONFIG_HWMON_DEBUG_CHIP is not set diff --git a/arch/arm/configs/lineage_s3ve3gjv_defconfig b/arch/arm/configs/lineage_s3ve3gjv_defconfig index 5bf956cfcd9..359d97b0812 100644 --- a/arch/arm/configs/lineage_s3ve3gjv_defconfig +++ b/arch/arm/configs/lineage_s3ve3gjv_defconfig @@ -2311,7 +2311,7 @@ CONFIG_QPNP_CHARGER=y CONFIG_BATTERY_BCL=y # CONFIG_CHARGER_SMB347 is not set CONFIG_QPNP_BMS=y -# CONFIG_BATTERY_SWELLING is not set +CONFIG_BATTERY_SWELLING=y CONFIG_HWMON=y # CONFIG_HWMON_VID is not set # CONFIG_HWMON_DEBUG_CHIP is not set diff --git a/arch/arm/configs/lineage_s3ve3gxx_defconfig b/arch/arm/configs/lineage_s3ve3gxx_defconfig index 52efd3bc1c2..8368744ccf8 100644 --- a/arch/arm/configs/lineage_s3ve3gxx_defconfig +++ b/arch/arm/configs/lineage_s3ve3gxx_defconfig @@ -2311,7 +2311,7 @@ CONFIG_QPNP_CHARGER=y CONFIG_BATTERY_BCL=y # CONFIG_CHARGER_SMB347 is not set CONFIG_QPNP_BMS=y -# CONFIG_BATTERY_SWELLING is not set +CONFIG_BATTERY_SWELLING=y CONFIG_HWMON=y # CONFIG_HWMON_VID is not set # CONFIG_HWMON_DEBUG_CHIP is not set diff --git a/arch/arm/configs/msm8226-sec_s3ve3g_eur_defconfig b/arch/arm/configs/msm8226-sec_s3ve3g_eur_defconfig index b2147097c0e..c2901113a81 100644 --- a/arch/arm/configs/msm8226-sec_s3ve3g_eur_defconfig +++ b/arch/arm/configs/msm8226-sec_s3ve3g_eur_defconfig @@ -94,7 +94,7 @@ CONFIG_BATTERY_SAMSUNG_DATA_FILE="s3ve3g_battery_data.h" CONFIG_QPNP_CHARGER=y CONFIG_BATTERY_BCL=y CONFIG_QPNP_BMS=y -# CONFIG_BATTERY_SWELLING is not set +CONFIG_BATTERY_SWELLING=y #Sec Thermistor CONFIG_SEC_THERMISTOR=y diff --git a/drivers/battery/s3ve3g_battery_data.h b/drivers/battery/s3ve3g_battery_data.h index 6c14922599b..8510e947a75 100755 --- a/drivers/battery/s3ve3g_battery_data.h +++ b/drivers/battery/s3ve3g_battery_data.h @@ -22,9 +22,9 @@ static void * samsung_battery_data; -#define CAPACITY_MAX 1000 +#define CAPACITY_MAX 1000 #define CAPACITY_MAX_MARGIN 50 -#define CAPACITY_MIN 0 +#define CAPACITY_MIN 0 static sec_bat_adc_table_data_t temp_table[] = { {26537, 800}, @@ -54,16 +54,16 @@ static sec_bat_adc_table_data_t chg_temp_table[] = { {0, 0}, }; -#define TEMP_HIGH_THRESHOLD_EVENT 600 -#define TEMP_HIGH_RECOVERY_EVENT 470 +#define TEMP_HIGH_THRESHOLD_EVENT 580 +#define TEMP_HIGH_RECOVERY_EVENT 530 #define TEMP_LOW_THRESHOLD_EVENT (-50) #define TEMP_LOW_RECOVERY_EVENT 0 -#define TEMP_HIGH_THRESHOLD_NORMAL 600 -#define TEMP_HIGH_RECOVERY_NORMAL 470 +#define TEMP_HIGH_THRESHOLD_NORMAL 580 +#define TEMP_HIGH_RECOVERY_NORMAL 530 #define TEMP_LOW_THRESHOLD_NORMAL (-50) #define TEMP_LOW_RECOVERY_NORMAL 0 -#define TEMP_HIGH_THRESHOLD_LPM 600 -#define TEMP_HIGH_RECOVERY_LPM 470 +#define TEMP_HIGH_THRESHOLD_LPM 580 +#define TEMP_HIGH_RECOVERY_LPM 530 #define TEMP_LOW_THRESHOLD_LPM (-50) #define TEMP_LOW_RECOVERY_LPM 0 diff --git a/drivers/battery/sec_battery.c b/drivers/battery/sec_battery.c index 2f5f9a2c290..2541660a5a5 100644 --- a/drivers/battery/sec_battery.c +++ b/drivers/battery/sec_battery.c @@ -1925,8 +1925,8 @@ static void sec_bat_get_battery_info( { union power_supply_propval value; #if defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_VIENNAVZW) || defined(CONFIG_MACH_VIENNAKOR) || defined(CONFIG_MACH_V2) || \ - defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_SEC_DEGAS_PROJECT) || \ - defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW) + defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) || \ + defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW) || defined(CONFIG_SEC_DEGAS_PROJECT) static struct timespec old_ts; struct timespec c_ts; @@ -2029,8 +2029,8 @@ static void sec_bat_get_battery_info( sec_bat_check_changed_soc(battery, &value); #if defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_VIENNAVZW) || defined(CONFIG_MACH_VIENNAKOR) || defined(CONFIG_MACH_V2) || \ - defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_SEC_DEGAS_PROJECT) || \ - defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW) + defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) || \ + defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW) || defined(CONFIG_SEC_DEGAS_PROJECT) /* if the battery status was full, and SOC wasn't 100% yet, then ignore FG SOC, and report (previous SOC +1)% */ if (battery->status != POWER_SUPPLY_STATUS_FULL) { @@ -2406,17 +2406,17 @@ continue_monitor: "%s: battery->stability_test(%d), battery->eng_not_full_status(%d)\n", __func__, battery->stability_test, battery->eng_not_full_status); #endif - if (battery->store_mode && battery->cable_type != POWER_SUPPLY_TYPE_BATTERY) { + if (battery->store_mode && !poweroff_charging && (battery->cable_type != POWER_SUPPLY_TYPE_BATTERY)) { dev_info(battery->dev, "%s: @battery->capacity = (%d), battery->status= (%d), battery->store_mode=(%d)\n", __func__, battery->capacity, battery->status, battery->store_mode); - if ((battery->capacity >= 35) && (battery->status == POWER_SUPPLY_STATUS_CHARGING)) { + if ((battery->capacity >= STORE_MODE_CHARGING_MAX) && (battery->status == POWER_SUPPLY_STATUS_CHARGING)) { battery->status = POWER_SUPPLY_STATUS_DISCHARGING; sec_bat_set_charge(battery, false); } - if ((battery->capacity <= 30) && (battery->status == POWER_SUPPLY_STATUS_DISCHARGING)) { + if ((battery->capacity <= STORE_MODE_CHARGING_MIN) && (battery->status == POWER_SUPPLY_STATUS_DISCHARGING)) { battery->status = POWER_SUPPLY_STATUS_CHARGING; sec_bat_set_charge(battery, true); } @@ -3637,8 +3637,8 @@ static int sec_bat_get_property(struct power_supply *psy, } #if defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_VIENNAVZW) || defined(CONFIG_MACH_VIENNAKOR) || defined(CONFIG_MACH_V2) || \ - defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || \ - defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW)|| defined(CONFIG_SEC_DEGAS_PROJECT) + defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) || \ + defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW) || defined(CONFIG_SEC_DEGAS_PROJECT) if (battery->status == POWER_SUPPLY_STATUS_FULL && battery->capacity != 100) { val->intval = POWER_SUPPLY_STATUS_CHARGING; @@ -3725,8 +3725,8 @@ static int sec_bat_get_property(struct power_supply *psy, } #else #if defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_VIENNAVZW) || defined(CONFIG_MACH_VIENNAKOR) || defined(CONFIG_MACH_V2) || \ - defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || \ - defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW)|| defined(CONFIG_SEC_DEGAS_PROJECT) + defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) || \ + defined(CONFIG_AFC_CHARGER_MODE) || defined(CONFIG_MACH_KLTE_USC) || defined(CONFIG_MACH_KLIMT_VZW) || defined(CONFIG_SEC_DEGAS_PROJECT) val->intval = battery->capacity; #else /* In full-charged status, SOC is always 100% */ diff --git a/drivers/leds/leds-qpnp.c b/drivers/leds/leds-qpnp.c index 5a96e0c3e4c..ec9c590e83a 100644 --- a/drivers/leds/leds-qpnp.c +++ b/drivers/leds/leds-qpnp.c @@ -235,7 +235,7 @@ #endif #define SAMSUNG_TKEY_LED_BRIGHTNESS 90 -#if defined(CONFIG_SEC_AFYON_PROJECT) || defined(CONFIG_SEC_ATLANTIC_PROJECT) || defined( CONFIG_SEC_VASTA_PROJECT) || defined(CONFIG_MACH_MEGA2LTE_KTT) +#if defined(CONFIG_SEC_AFYON_PROJECT) || defined(CONFIG_SEC_ATLANTIC_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) || defined(CONFIG_SEC_VASTA_PROJECT) || defined(CONFIG_MACH_MEGA2LTE_KTT) #define SAMSUNG_USE_EXTERNAL_CHARGER #endif diff --git a/drivers/power/qpnp-charger.c b/drivers/power/qpnp-charger.c index 1ca3ae04a8a..c597b105ac4 100644 --- a/drivers/power/qpnp-charger.c +++ b/drivers/power/qpnp-charger.c @@ -1639,7 +1639,7 @@ qpnp_chg_set_appropriate_vddmax(struct qpnp_chg_chip *chip) chip->delta_vddmax_mv); } -#if !defined(CONFIG_SEC_ATLANTIC_PROJECT) +#if !defined(CONFIG_SEC_ATLANTIC_PROJECT) || !defined(CONFIG_MACH_S3VE3G_EUR) #define MIN_DELTA_MV_TO_INCREASE_VDD_MAX 8 #define MAX_DELTA_VDD_MAX_MV 80 #define VDD_MAX_CENTER_OFFSET 4 @@ -4669,7 +4669,7 @@ qpnp_chg_setup_flags(struct qpnp_chg_chip *chip) return 0; } -#if !defined(CONFIG_SEC_ATLANTIC_PROJECT) +#if !defined(CONFIG_SEC_ATLANTIC_PROJECT) || !defined(CONFIG_MACH_S3VE3G_EUR) static void sec_qpnp_chg_check_vddmax(struct qpnp_chg_chip *chip) { @@ -5612,7 +5612,7 @@ sec_qpnp_chg_get_property(struct power_supply *psy, val->intval = POWER_SUPPLY_HEALTH_GOOD; break; case POWER_SUPPLY_PROP_CURRENT_MAX: -#if !defined(CONFIG_SEC_ATLANTIC_PROJECT) +#if !defined(CONFIG_SEC_ATLANTIC_PROJECT) || !defined(CONFIG_MACH_S3VE3G_EUR) sec_qpnp_chg_check_vddmax(chip); #endif val->intval = charger->charging_current_max; diff --git a/include/linux/battery/sec_battery.h b/include/linux/battery/sec_battery.h index de41a277167..f88e183cf05 100644 --- a/include/linux/battery/sec_battery.h +++ b/include/linux/battery/sec_battery.h @@ -42,6 +42,14 @@ struct sec_battery_extcon_cable{ #define TEMP_HIGHLIMIT_DEFAULT 2000 +#if defined(CONFIG_CHARGING_VZWCONCEPT) +#define STORE_MODE_CHARGING_MAX 35 +#define STORE_MODE_CHARGING_MIN 30 +#else +#define STORE_MODE_CHARGING_MAX 70 +#define STORE_MODE_CHARGING_MIN 60 +#endif + struct adc_sample_info { unsigned int cnt; int total_adc;