Skip to content

Commit 78ae57a

Browse files
vantomanvbajs
authored andcommitted
power: import k6a changes
Signed-off-by: Yahya Wessam <yahyawessam2002@gmail.com>
1 parent 15b39ed commit 78ae57a

File tree

6 files changed

+81
-12
lines changed

6 files changed

+81
-12
lines changed

drivers/power/supply/qcom/smb5-lib.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,7 @@ int smblib_set_fastcharge_mode(struct smb_charger *chg, bool enable)
967967
if (enable) {
968968
/* ffc need clear 4.4V non_fcc_vfloat_voter first */
969969
vote(chg->fv_votable, NON_FFC_VFLOAT_VOTER, false, 0);
970+
vote(chg->fcc_votable, PD_UNVERIFED_VOTER, false, 0);
970971
rc = power_supply_get_property(chg->bms_psy,
971972
POWER_SUPPLY_PROP_FFC_CHG_TERMINATION_CURRENT, &pval);
972973
if (rc < 0) {

drivers/power/supply/qcom/smb5-lib.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ enum print_reason {
104104
#define BATT_VERIFY_VOTER "BATT_VERIFY_VOTER"
105105

106106
#define PD_VERIFED_VOTER "PD_VERIFED_VOTER"
107+
#define PD_UNVERIFED_VOTER "PD_UNVERIFED_VOTER"
107108
#define PD_REMOVE_COMP_VOTER "PD_REMOVE_COMP_VOTER"
108109

109110
/* used for bq charge pump solution */

drivers/power/supply/qcom/step-chg-jeita.c

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,9 @@ static int handle_dynamic_fv(struct step_chg_info *chip)
781781
#define JEITA_SUSPEND_HYST_UV 130000
782782
#define JEITA_SIX_PIN_BATT_HYST_UV 100000
783783
#define WARM_VFLOAT_UV 4100000
784+
#define BATT_HOT_SHUTDOWN_TEMP 580
785+
#define BATT_TOO_COLD_TEMP -100
786+
784787
static int handle_jeita(struct step_chg_info *chip)
785788
{
786789
union power_supply_propval pval = {0, };
@@ -790,6 +793,8 @@ static int handle_jeita(struct step_chg_info *chip)
790793
int temp, pd_authen_result = 0;
791794
static bool fast_mode_dis;
792795
int chg_term_current = 0, batt_soc = 0, batt_temp = 0;
796+
static int last_fcc_ua = 0;
797+
static struct votable *chg_disable_votable;
793798

794799
rc = power_supply_get_property(chip->batt_psy,
795800
POWER_SUPPLY_PROP_SW_JEITA_ENABLED, &pval);
@@ -844,12 +849,44 @@ static int handle_jeita(struct step_chg_info *chip)
844849
rc = get_val(chip->jeita_fcc_config->fcc_cfg,
845850
chip->jeita_fcc_config->param.hysteresis,
846851
chip->jeita_fcc_index,
847-
pval.intval,
852+
temp,
848853
&chip->jeita_fcc_index,
849854
&fcc_ua);
850855
if (rc < 0)
851856
fcc_ua = 0;
852857

858+
rc = power_supply_get_property(chip->batt_psy,
859+
POWER_SUPPLY_PROP_VOLTAGE_NOW, &pval);
860+
if (rc < 0) {
861+
pr_err("Get battery voltage failed, rc = %d\n", rc);
862+
fcc_ua = 0;
863+
}
864+
curr_vbat_uv = pval.intval;
865+
866+
if (temp < 0 && temp >= (-100)) {
867+
if (curr_vbat_uv < 4200000) {
868+
if (last_fcc_ua == 735000 && curr_vbat_uv > 4100000)
869+
fcc_ua = 735000;
870+
else
871+
fcc_ua = 900000;
872+
} else
873+
fcc_ua = 735000;
874+
last_fcc_ua = fcc_ua;
875+
pr_err("%S -10 - 0, ibat = %d\n", __func__, fcc_ua);
876+
}
877+
878+
if (!chg_disable_votable)
879+
chg_disable_votable = find_votable("CHG_DISABLE");
880+
if (temp > BATT_HOT_SHUTDOWN_TEMP
881+
|| temp < BATT_TOO_COLD_TEMP) {
882+
pr_err("battery too hot/cold, not charging");
883+
if (chg_disable_votable)
884+
vote(chg_disable_votable, BATT_HOT_SHUTDOWN_TEMP_VOTER, true, 0);
885+
} else if (is_client_vote_enabled_locked(chg_disable_votable, BATT_HOT_SHUTDOWN_TEMP_VOTER)) {
886+
if (chg_disable_votable)
887+
vote(chg_disable_votable, BATT_HOT_SHUTDOWN_TEMP_VOTER, false, 0);
888+
}
889+
853890
if (!chip->fcc_votable)
854891
chip->fcc_votable = find_votable("FCC");
855892
if (!chip->fcc_votable)
@@ -864,13 +901,13 @@ static int handle_jeita(struct step_chg_info *chip)
864901
rc = get_val(chip->jeita_fv_config->fv_cfg,
865902
chip->jeita_fv_config->param.hysteresis,
866903
chip->jeita_fv_index,
867-
pval.intval,
904+
temp,
868905
&chip->jeita_fv_index,
869906
&fv_uv);
870907
if (rc < 0)
871908
fv_uv = 0;
872909
if (chip->ffc_iterm_change_by_temp) {
873-
batt_temp = pval.intval;
910+
batt_temp = temp;
874911
rc = power_supply_get_property(chip->bms_psy,
875912
POWER_SUPPLY_PROP_CAPACITY, &pval);
876913
if (rc < 0) {
@@ -1029,6 +1066,7 @@ static int handle_jeita(struct step_chg_info *chip)
10291066
}
10301067

10311068
set_jeita_fv:
1069+
10321070
vote(chip->fv_votable, JEITA_VOTER, fv_uv ? true : false, fv_uv);
10331071

10341072
update_time:

drivers/power/supply/qcom/step-chg-jeita.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
#define FFC_LOW_TEMP_CHG_TERM_CURRENT -980
3535
#define FFC_HIGH_TEMP_CHG_TERM_CURRENT -1110
3636
#endif
37-
37+
#define BATT_HOT_SHUTDOWN_TEMP_VOTER "BATT_HOT_SHUTDOWN_TEMP_VOTER"
38+
#define FCC_TAPER_FCC_VOTER "FCC_TAPER_FCC_VOTER"
3839
enum hvdcp3_class_type {
3940
HVDCP3_CLASS_NONE = 0,
4041
HVDCP3_CLASS_A_18W,

drivers/power/supply/ti/pd_policy_manager.c

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
#define BAT_CURR_LOOP_LMT BATT_FAST_CHG_CURR
4545
#define BUS_VOLT_LOOP_LMT BUS_OVP_THRESHOLD
4646

47-
#define PM_WORK_RUN_INTERVAL 100
47+
#define PM_WORK_RUN_INTERVAL 500
4848

4949
enum {
5050
PM_ALGO_RET_OK,
@@ -215,10 +215,10 @@ static bool pd_disable_cp_by_jeita_status(struct usbpd_pm *pdpm)
215215
pr_info("warm_thres: %d\n", warm_thres);
216216
pr_info("cool_thres: %d\n", cool_thres);
217217

218-
if (batt_temp >= warm_thres && !pdpm->jeita_triggered) {
218+
if (batt_temp > warm_thres && !pdpm->jeita_triggered) {
219219
pdpm->jeita_triggered = true;
220220
return true;
221-
} else if (batt_temp <= cool_thres && !pdpm->jeita_triggered) {
221+
} else if (batt_temp < cool_thres && !pdpm->jeita_triggered) {
222222
pdpm->jeita_triggered = true;
223223
return true;
224224
} else if ((batt_temp <= (warm_thres - JEITA_HYSTERESIS))
@@ -883,6 +883,7 @@ static void usbpd_pm_evaluate_src_caps(struct usbpd_pm *pdpm)
883883
int ret;
884884
int i;
885885
union power_supply_propval pval = {0, };
886+
int apdo_max = 0;
886887

887888
if (!pdpm->pd) {
888889
pdpm->pd = smb_get_usbpd();
@@ -904,6 +905,13 @@ static void usbpd_pm_evaluate_src_caps(struct usbpd_pm *pdpm)
904905
for (i = 0; i < PDO_MAX_NUM; i++) {
905906
if (pdpm->pdo[i].type == PD_SRC_PDO_TYPE_AUGMENTED
906907
&& pdpm->pdo[i].pps && pdpm->pdo[i].pos) {
908+
if (pdpm->pdo[i].max_volt_mv > 11000)
909+
pdpm->pdo[i].max_volt_mv = 11000;
910+
if (apdo_max < ((pdpm->pdo[i].max_volt_mv/1000) * (pdpm->pdo[i].curr_ma/10) / 100)) {
911+
apdo_max = (pdpm->pdo[i].max_volt_mv/1000) * (pdpm->pdo[i].curr_ma/10) / 100;
912+
}
913+
pr_err("%s max_volt:%d, curr_ma:%d, apdo_max:%d\n", __func__,
914+
pdpm->pdo[i].max_volt_mv, pdpm->pdo[i].curr_ma, apdo_max);
907915
if (pdpm->pdo[i].max_volt_mv >= pdpm->apdo_max_volt
908916
&& pdpm->pdo[i].curr_ma >= pdpm->apdo_max_curr
909917
&& pdpm->pdo[i].max_volt_mv <= APDO_MAX_VOLT) {
@@ -922,7 +930,10 @@ static void usbpd_pm_evaluate_src_caps(struct usbpd_pm *pdpm)
922930
pdpm->apdo_max_curr);
923931
if (pdpm->apdo_max_curr <= LOW_POWER_PPS_CURR_THR)
924932
pdpm->apdo_max_curr = XIAOMI_LOW_POWER_PPS_CURR_MAX;
925-
pval.intval = (pdpm->apdo_max_volt / 1000) * (pdpm->apdo_max_curr / 1000);
933+
pval.intval = (pdpm->apdo_max_volt / 1000) * (pdpm->apdo_max_curr / 10) / 100;
934+
if (pval.intval < apdo_max) {
935+
pval.intval = apdo_max;
936+
}
926937
power_supply_set_property(pdpm->usb_psy,
927938
POWER_SUPPLY_PROP_APDO_MAX, &pval);
928939
} else {
@@ -1137,8 +1148,8 @@ static int usbpd_pm_fc2_charge_algo(struct usbpd_pm *pdpm)
11371148
pr_info("steps: %d, sw_ctrl_steps:%d, hw_ctrl_steps:%d\n", steps, sw_ctrl_steps, hw_ctrl_steps);
11381149
pdpm->request_voltage += steps * STEP_MV;
11391150

1140-
if (pdpm->apdo_max_volt == PPS_VOL_MAX)
1141-
pdpm->apdo_max_volt = pdpm->apdo_max_volt - PPS_VOL_HYS;
1151+
// if (pdpm->apdo_max_volt == PPS_VOL_MAX)
1152+
// pdpm->apdo_max_volt = pdpm->apdo_max_volt - PPS_VOL_HYS;
11421153

11431154
if (pdpm->request_voltage > pdpm->apdo_max_volt)
11441155
pdpm->request_voltage = pdpm->apdo_max_volt;
@@ -1480,9 +1491,12 @@ static void usbpd_pm_disconnect(struct usbpd_pm *pdpm)
14801491

14811492
cancel_delayed_work_sync(&pdpm->pm_work);
14821493

1483-
if (pdpm->fcc_votable)
1494+
if (pdpm->fcc_votable) {
14841495
vote(pdpm->fcc_votable, BQ_TAPER_FCC_VOTER,
14851496
false, 0);
1497+
vote(pdpm->fcc_votable, PD_UNVERIFED_VOTER,
1498+
false, 0);
1499+
}
14861500
pdpm->pps_supported = false;
14871501
pdpm->jeita_triggered = false;
14881502
pdpm->is_temp_out_fc2_range = false;
@@ -1527,8 +1541,19 @@ static void usbpd_pps_non_verified_contact(struct usbpd_pm *pdpm, bool connected
15271541

15281542
if (connected) {
15291543
usbpd_pm_evaluate_src_caps(pdpm);
1530-
if (pdpm->pps_supported)
1544+
if (pdpm->pps_supported){
1545+
if (!pdpm->fcc_votable)
1546+
pdpm->fcc_votable = find_votable("FCC");
1547+
1548+
if ((pdpm->apdo_max_volt / 1000) * (pdpm->apdo_max_curr / 1000) < 33) {
1549+
if (pdpm->fcc_votable)
1550+
vote(pdpm->fcc_votable, PD_UNVERIFED_VOTER, true, PD_UNVERIFED_CURRENT_LOW);
1551+
} else {
1552+
if (pdpm->fcc_votable)
1553+
vote(pdpm->fcc_votable, PD_UNVERIFED_VOTER, true, PD_UNVERIFED_CURRENT_HIGH);
1554+
}
15311555
schedule_delayed_work(&pdpm->pm_work, 5*HZ);
1556+
}
15321557
} else {
15331558
usbpd_pm_disconnect(pdpm);
15341559
}

drivers/power/supply/ti/pd_policy_manager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,12 @@ enum pm_state {
6868
/* voters for usbpd */
6969
#define STEP_BMS_CHG_VOTER "STEP_BMS_CHG_VOTER"
7070
#define BQ_TAPER_FCC_VOTER "BQ_TAPER_FCC_VOTER"
71+
#define PD_UNVERIFED_VOTER "PD_UNVERIFED_VOTER"
7172

7273
/* defined for non_verified pps charger maxium fcc */
7374
#define NON_VERIFIED_PPS_FCC_MAX 3000
75+
#define PD_UNVERIFED_CURRENT_LOW 4300000
76+
#define PD_UNVERIFED_CURRENT_HIGH 5600000
7477
#define MAX_THERMAL_LEVEL 13
7578
/* jeita related */
7679
#ifdef CONFIG_K6_CHARGE

0 commit comments

Comments
 (0)