|
27 | 27 | #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args)
|
28 | 28 |
|
29 | 29 | static bool charger_psys_enable_flag;
|
| 30 | +static int prev_charger_temp_c; |
30 | 31 |
|
31 | 32 | /* charging current is limited to 3200mA or 2800mA */
|
32 | 33 | #define CHARGING_CURRENT_3200 3200
|
@@ -374,27 +375,33 @@ int charger_profile_override(struct charge_state_data *curr)
|
374 | 375 |
|
375 | 376 | rv = isl9241_get_temperature_val(0, &charger_temp);
|
376 | 377 |
|
377 |
| - if (rv == EC_SUCCESS) { |
378 |
| - charger_temp_c = K_TO_C(charger_temp); |
379 |
| - ccprints("ISL9241 Charger temperature: %dC", charger_temp_c); |
380 |
| - if (charger_temp_c >= CHARGING_CURRENT_3200_TEMP && charger_temp_c < CHARGING_CURRENT_2800_TEMP) { |
381 |
| - ccprints("Temperature %dC over %dC, limiting charger current to %dmA", |
382 |
| - charger_temp_c, |
383 |
| - CHARGING_CURRENT_3200_TEMP, |
384 |
| - CHARGING_CURRENT_3200); |
385 |
| - curr->requested_current = |
386 |
| - MIN(curr->requested_current, CHARGING_CURRENT_3200); |
387 |
| - } |
| 378 | + if (rv != EC_SUCCESS) { |
| 379 | + CPRINTS("ISL9241 Charger temperature - Failed to read"); |
| 380 | + return 0; |
| 381 | + } |
388 | 382 |
|
389 |
| - if (charger_temp_c >= CHARGING_CURRENT_2800_TEMP) { |
390 |
| - ccprints("Temperature %dC over %dC, limiting charger current to %dmA", |
| 383 | + charger_temp_c = K_TO_C(charger_temp); |
| 384 | + |
| 385 | + if (charger_temp_c >= CHARGING_CURRENT_2800_TEMP) { |
| 386 | + if (prev_charger_temp_c != 0 && prev_charger_temp_c != charger_temp_c) { |
| 387 | + CPRINTS("Temperature %dC over %dC, limiting charger current to %dmA", |
391 | 388 | charger_temp_c,
|
392 | 389 | CHARGING_CURRENT_2800_TEMP,
|
393 | 390 | CHARGING_CURRENT_2800);
|
394 |
| - curr->requested_current = |
395 |
| - MIN(curr->requested_current, CHARGING_CURRENT_2800); |
396 | 391 | }
|
| 392 | + curr->requested_current = |
| 393 | + MIN(curr->requested_current, CHARGING_CURRENT_2800); |
| 394 | + } else if (charger_temp_c >= CHARGING_CURRENT_3200_TEMP) { |
| 395 | + if (prev_charger_temp_c != 0 && prev_charger_temp_c != charger_temp_c) { |
| 396 | + CPRINTS("Temperature %dC over %dC, limiting charger current to %dmA", |
| 397 | + charger_temp_c, |
| 398 | + CHARGING_CURRENT_3200_TEMP, |
| 399 | + CHARGING_CURRENT_3200); |
| 400 | + } |
| 401 | + curr->requested_current = |
| 402 | + MIN(curr->requested_current, CHARGING_CURRENT_3200); |
397 | 403 | }
|
| 404 | + prev_charger_temp_c = charger_temp_c; |
398 | 405 |
|
399 | 406 | return 0;
|
400 | 407 | }
|
|
0 commit comments