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
4949enum {
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 }
0 commit comments