summaryrefslogtreecommitdiff
path: root/common/charge_state_v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/charge_state_v2.c')
-rw-r--r--common/charge_state_v2.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index 9505194720..f51a03f185 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -53,6 +53,7 @@ enum problem_type {
PR_SET_VOLTAGE,
PR_SET_CURRENT,
PR_SET_MODE,
+ PR_SET_INPUT_CURR,
PR_POST_INIT,
PR_CHG_FLAGS,
PR_BATT_FLAGS,
@@ -65,6 +66,7 @@ static const char * const prob_text[] = {
"set voltage",
"set current",
"set mode",
+ "set input current",
"post init",
"chg params",
"batt params",
@@ -464,6 +466,7 @@ void charger_task(void)
/* Initialize all the state */
memset(&curr, 0, sizeof(curr));
curr.batt.is_present = BP_NOT_SURE;
+ curr.desired_input_current = CONFIG_CHARGER_INPUT_CURRENT;
prev_ac = prev_charge = -1;
state_machine_force_idle = 0;
shutdown_warning_time.val = 0UL;
@@ -481,13 +484,20 @@ void charger_task(void)
/*
* Some chargers are unpowered when the AC is
* off, so we'll reinitialize it when AC
- * comes back. Try again if it fails.
+ * comes back and set the input current limit.
+ * Try again if it fails.
*/
int rv = charger_post_init();
- if (rv != EC_SUCCESS)
+ if (rv != EC_SUCCESS) {
problem(PR_POST_INIT, rv);
- else
- prev_ac = curr.ac;
+ } else {
+ rv = charger_set_input_current(
+ curr.desired_input_current);
+ if (rv != EC_SUCCESS)
+ problem(PR_SET_INPUT_CURR, rv);
+ else
+ prev_ac = curr.ac;
+ }
} else {
/* Some things are only meaningful on AC */
state_machine_force_idle = 0;
@@ -811,6 +821,12 @@ int charge_temp_sensor_get_val(int idx, int *temp_ptr)
return EC_SUCCESS;
}
+int charge_set_input_current_limit(int ma)
+{
+ curr.desired_input_current = ma;
+ return charger_set_input_current(ma);
+}
+
/*****************************************************************************/
/* Hooks */