@@ -74,54 +74,64 @@ static void set_pl_limits(uint32_t spl, uint32_t fppt, uint32_t sppt, uint32_t p
7474 update_peak_package_power_limit (p3t );
7575}
7676
77- static void update_os_power_slider (int mode , int with_dc , int active_mpower )
77+ static void update_os_power_slider (int mode , int active_mpower )
7878{
7979 switch (mode ) {
8080 case EC_DC_BEST_PERFORMANCE :
8181 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 30000 ;
8282 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 35000 ;
83- power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] = battery_mwatt_type - POWER_ROP ;
83+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] =
84+ ((battery_mwatt_type == BATTERY_61mW ) ? 46000 : 40000 );
85+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ] =
86+ ((battery_mwatt_type == BATTERY_61mW ) ? 70000 : 80000 );
8487 CPRINTS ("DC BEST PERFORMANCE" );
8588 break ;
8689 case EC_DC_BALANCED :
8790 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 28000 ;
8891 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 33000 ;
89- power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] = battery_mwatt_type - POWER_ROP ;
92+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] =
93+ ((battery_mwatt_type == BATTERY_61mW ) ? 41000 : 35000 );
94+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ] =
95+ ((battery_mwatt_type == BATTERY_61mW ) ? 70000 : 80000 );
9096 CPRINTS ("DC BALANCED" );
9197 break ;
9298 case EC_DC_BEST_EFFICIENCY :
9399 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 15000 ;
94100 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 20000 ;
95101 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] = 30000 ;
102+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ] =
103+ ((battery_mwatt_type == BATTERY_61mW ) ? 70000 : 80000 );
96104 CPRINTS ("DC BEST EFFICIENCY" );
97105 break ;
98106 case EC_DC_BATTERY_SAVER :
99107 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 15000 ;
100108 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 15000 ;
101109 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] = 30000 ;
110+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ] = battery_mwatt_type ;
102111 CPRINTS ("DC BATTERY SAVER" );
103112 break ;
104113 case EC_AC_BEST_PERFORMANCE :
105114 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 30000 ;
106- power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] =
107- (with_dc ? 35000 : (MIN (35000 , ((active_mpower - 15000 ) * 9 / 10 ))));
115+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 35000 ;
108116 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] = 53000 ;
117+ /* p3t is for minimum power table */
118+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ] = 30000 ;
109119 CPRINTS ("AC BEST PERFORMANCE" );
110120 break ;
111121 case EC_AC_BALANCED :
112122 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 28000 ;
113- power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] =
114- ( with_dc ? 33000 : ( MIN ( 33000 , (( active_mpower - 15000 ) * 9 / 10 )))) ;
115- power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_FPPT ] =
116- ( with_dc ? 51000 : ( MIN ( 51000 , ( active_mpower - 15000 )))) ;
123+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 33000 ;
124+ power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_FPPT ] = 51000 ;
125+ /* p3t is for minimum power table */
126+ power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_P3T ] = 28000 ;
117127 CPRINTS ("AC BALANCED" );
118128 break ;
119129 case EC_AC_BEST_EFFICIENCY :
120- power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = ( with_dc ? 15000 : 28000 ) ;
121- power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] =
122- ( with_dc ? 25000 : ( MIN ( 33000 , (( active_mpower - 15000 ) * 9 / 10 )))) ;
123- power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_FPPT ] =
124- ( with_dc ? 30000 : ( MIN ( 51000 , ( active_mpower - 15000 )))) ;
130+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 15000 ;
131+ power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 25000 ;
132+ power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_FPPT ] = 30000 ;
133+ /* p3t is for minimum power table */
134+ power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_P3T ] = 28000 ;
125135 CPRINTS ("AC BEST EFFICIENCY" );
126136 break ;
127137 default :
@@ -130,33 +140,50 @@ static void update_os_power_slider(int mode, int with_dc, int active_mpower)
130140 }
131141}
132142
133- static void update_adapter_power_limit (int battery_percent , int active_mpower )
143+ static void update_adapter_power_limit (int battery_percent ,
144+ int active_mpower , bool with_dc , int ports_cost )
134145{
135146 if ((active_mpower < 55000 )) {
136- /* dc mode (active_mpower == 0) or AC < 55W (active_mpower == 0) */
147+ /* DC mode (active_mpower == 0) or AC < 55W (active_mpower == 0) */
137148 power_limit [FUNCTION_POWER ].mwatt [TYPE_SPL ] = 30000 ;
138- power_limit [FUNCTION_POWER ].mwatt [TYPE_SPPT ] = battery_mwatt_type - POWER_ROP ;
139- power_limit [FUNCTION_POWER ].mwatt [TYPE_FPPT ] = battery_mwatt_type - POWER_ROP ;
149+ power_limit [FUNCTION_POWER ].mwatt [TYPE_SPPT ] = 35000 ;
150+ power_limit [FUNCTION_POWER ].mwatt [TYPE_FPPT ] =
151+ ((battery_mwatt_type == BATTERY_61mW ) ? 46000 : 40000 );
140152 power_limit [FUNCTION_POWER ].mwatt [TYPE_P3T ] =
141- battery_mwatt_p3t - POWER_ROP - POWER_PORT_COST ;
142- } else if (battery_percent > 40 ) {
143- /* ADP > 55W and Battery percentage > 40% */
153+ power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_P3T ] ;
154+ } else if (! with_dc ) {
155+ /* AC only and AC >= 55W */
144156 power_limit [FUNCTION_POWER ].mwatt [TYPE_SPL ] = 30000 ;
145157 power_limit [FUNCTION_POWER ].mwatt [TYPE_SPPT ] =
146- MIN (43000 , (active_mpower * 85 / 100 ) + battery_mwatt_type - POWER_ROP );
158+ MIN (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ],
159+ (active_mpower - 15000 - ports_cost ));
147160 power_limit [FUNCTION_POWER ].mwatt [TYPE_FPPT ] =
148- MIN (53000 , (active_mpower * 85 / 100 ) + battery_mwatt_type - POWER_ROP );
149- power_limit [FUNCTION_POWER ].mwatt [TYPE_P3T ] = (active_mpower * 95 / 100 )
150- + battery_mwatt_type - POWER_ROP - POWER_PORT_COST ;
161+ MIN (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ],
162+ (active_mpower - 15000 - ports_cost ));
163+ power_limit [FUNCTION_POWER ].mwatt [TYPE_P3T ] =
164+ MAX (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ],
165+ ((active_mpower * 95 / 100 ) - 20000 ));
166+ } else if (battery_percent > 40 ) {
167+ /* ADP > 55W and Battery percentage > 40% */
168+ power_limit [FUNCTION_POWER ].mwatt [TYPE_SPL ] = 30000 ;
169+ power_limit [FUNCTION_POWER ].mwatt [TYPE_SPPT ] = 35000 ;
170+ power_limit [FUNCTION_POWER ].mwatt [TYPE_FPPT ] = 53000 ;
171+ power_limit [FUNCTION_POWER ].mwatt [TYPE_P3T ] =
172+ MAX (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ],
173+ ((active_mpower * 95 / 100 ) - 20000
174+ - (ports_cost ? 5000 : 0 )) + battery_mwatt_type );
151175 } else {
152176 /* ADP > 55W and Battery percentage <= 40% */
153177 power_limit [FUNCTION_POWER ].mwatt [TYPE_SPL ] = 30000 ;
154178 power_limit [FUNCTION_POWER ].mwatt [TYPE_SPPT ] =
155- MIN (43000 , (active_mpower * 85 / 100 ) - POWER_ROP );
179+ MIN (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ],
180+ (active_mpower * 85 / 100 ) - 20000 - ports_cost );
156181 power_limit [FUNCTION_POWER ].mwatt [TYPE_FPPT ] =
157- MIN (53000 , (active_mpower * 85 / 100 ) - POWER_ROP );
182+ MIN (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ],
183+ (active_mpower * 85 / 100 ) - 20000 - ports_cost );
158184 power_limit [FUNCTION_POWER ].mwatt [TYPE_P3T ] =
159- (active_mpower * 95 / 100 ) - POWER_ROP - POWER_PORT_COST ;
185+ MAX (power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ],
186+ ((active_mpower * 95 / 100 ) - 20000 - (ports_cost ? 5000 : 0 )));
160187 }
161188}
162189
@@ -251,6 +278,9 @@ void update_soc_power_limit(bool force_update, bool force_no_adapter)
251278 int active_mpower = charge_manager_get_power_limit_uw () / 1000 ;
252279 bool with_dc = ((battery_is_present () == BP_YES ) ? true : false);
253280 int battery_percent = charge_get_percent ();
281+ int ports_cost ;
282+
283+ ports_cost = cypd_get_port_cost ();
254284
255285 /* azalea take 55W and lower adp as no ac */
256286 if (force_no_adapter || (!extpower_is_present ()) || (active_mpower < 55000 )) {
@@ -261,10 +291,10 @@ void update_soc_power_limit(bool force_update, bool force_no_adapter)
261291
262292 if (old_slider_mode != mode ) {
263293 old_slider_mode = mode ;
264- update_os_power_slider (mode , with_dc , active_mpower );
294+ update_os_power_slider (mode , active_mpower );
265295 }
266296
267- update_adapter_power_limit (battery_percent , active_mpower );
297+ update_adapter_power_limit (battery_percent , active_mpower , with_dc , ports_cost );
268298
269299 if (active_mpower == 0 )
270300 update_dc_safety_power_limit ();
@@ -341,11 +371,11 @@ static void initial_soc_power_limit(void)
341371 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPL ] = 28000 ;
342372 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_SPPT ] = 33000 ;
343373 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_FPPT ] =
344- battery_mwatt_type - POWER_ROP - POWER_PORT_COST ;
374+ (( battery_mwatt_type == BATTERY_61mW ) ? 41000 : 35000 ) ;
345375 power_limit [FUNCTION_SLIDER ].mwatt [TYPE_P3T ] =
346- battery_mwatt_p3t - POWER_ROP - POWER_PORT_COST ;
376+ (( battery_mwatt_type == BATTERY_61mW ) ? 70000 : 80000 ) ;
347377 power_limit [FUNCTION_POWER ].mwatt [TYPE_P3T ] =
348- battery_mwatt_p3t - POWER_ROP - POWER_PORT_COST ;
378+ power_limit [ FUNCTION_SLIDER ]. mwatt [ TYPE_P3T ] ;
349379}
350380DECLARE_HOOK (HOOK_INIT , initial_soc_power_limit , HOOK_PRIO_INIT_I2C );
351381
@@ -357,8 +387,8 @@ static int cmd_cpupower(int argc, const char **argv)
357387 CPRINTF ("Now SOC Power Limit:\n FUNC = %d, SPL %dmW,\n" ,
358388 target_func [TYPE_SPL ], power_limit [target_func [TYPE_SPL ]].mwatt [TYPE_SPL ]);
359389 CPRINTF ("FUNC = %d, fPPT %dmW,\n FUNC = %d, sPPT %dmW,\n FUNC = %d, p3T %dmW\n" ,
360- target_func [TYPE_SPPT ], power_limit [target_func [TYPE_SPPT ]].mwatt [TYPE_SPPT ],
361390 target_func [TYPE_FPPT ], power_limit [target_func [TYPE_FPPT ]].mwatt [TYPE_FPPT ],
391+ target_func [TYPE_SPPT ], power_limit [target_func [TYPE_SPPT ]].mwatt [TYPE_SPPT ],
362392 target_func [TYPE_P3T ], power_limit [target_func [TYPE_P3T ]].mwatt [TYPE_P3T ]);
363393
364394 if (argc >= 2 ) {
0 commit comments