s3ve3g: improved sec-battery compatibility with additional fixes

- 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
This commit is contained in:
prototype74
2020-11-16 10:41:22 +01:00
committed by Francescodario Cuzzocrea
parent 1aa8de5356
commit 93340a4ba8
12 changed files with 54 additions and 56 deletions
@@ -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";
@@ -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>;
};
};
};
@@ -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>;
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
@@ -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
+8 -8
View File
@@ -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
+11 -11
View File
@@ -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% */
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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;
+8
View File
@@ -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;