summaryrefslogtreecommitdiff
path: root/board/reef
diff options
context:
space:
mode:
Diffstat (limited to 'board/reef')
-rw-r--r--board/reef/battery.c11
-rw-r--r--board/reef/board.c8
2 files changed, 17 insertions, 2 deletions
diff --git a/board/reef/battery.c b/board/reef/battery.c
index 6e05dc00b5..6483f25252 100644
--- a/board/reef/battery.c
+++ b/board/reef/battery.c
@@ -8,6 +8,7 @@
#include "battery.h"
#include "battery_smart.h"
#include "bd9995x.h"
+#include "charge_ramp.h"
#include "charge_state.h"
#include "console.h"
#include "ec_commands.h"
@@ -279,11 +280,17 @@ int charger_profile_override(struct charge_state_data *curr)
*
* To overcome this issue enable the battery learning operation
* and suspend USB charging and DC/DC converter.
+ *
+ * And also to avoid inrush current from the external charger, enable
+ * discharge on AC till the new charger is detected and charge detect
+ * delay has passed.
*/
- disch_on_ac = curr->batt.is_present == BP_YES &&
+ disch_on_ac = (curr->batt.is_present == BP_YES &&
!battery_is_cut_off() &&
!(curr->batt.flags & BATT_FLAG_WANT_CHARGE) &&
- curr->batt.status & STATUS_FULLY_CHARGED;
+ curr->batt.status & STATUS_FULLY_CHARGED) ||
+ (!chg_ramp_is_detected() &&
+ curr->batt.state_of_charge > 2);
charger_discharge_on_ac(disch_on_ac);
diff --git a/board/reef/board.c b/board/reef/board.c
index 9e4a69d21d..e7d433a89f 100644
--- a/board/reef/board.c
+++ b/board/reef/board.c
@@ -568,6 +568,14 @@ int board_set_active_charge_port(int charge_port)
case CHARGE_PORT_NONE:
bd9995x_port_select = 0;
bd9995x_port = BD9995X_CHARGE_PORT_BOTH;
+
+ /*
+ * To avoid inrush current from the external charger, enable
+ * discharge on AC till the new charger is detected and
+ * charge detect delay has passed.
+ */
+ if (charge_get_percent() > 2)
+ charger_discharge_on_ac(1);
break;
default:
panic("Invalid charge port\n");