Skip to content

Commit c00f37d

Browse files
Matt WangCommit Bot
authored andcommitted
banshee: modify current limit setting
This modify is prevent the power lose when ac only power on the system. Set the 0x4C bit5 to 1 when AC only then set to 0 when battery present. When the charger input current over the InputCurrentLimit(0x3F) setting. Charger IC will decrease the Vsys until Vsys is under battery voltage and let the battery supplement the adapter(hybrid mode). Therefore, AC only mode should disable the input current limit loop for preventing Vsys drop too low and causing system shutdown. BUG=b:222038282 BRANCH=none TEST=1. AC only can power on the system to OS success. 2. AC+DC boot to OS then unplug the battery the system power not lose. 3. System can power on success from shipping mode. Signed-off-by: Matt Wang <matt_wang@compal.corp-partner.google.com> Change-Id: Ibadef0f523eaca532ec20cbff8a17ec14b6a4d19 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3512113 Reviewed-by: Elthan Huang <elthan_huang@compal.corp-partner.google.com> Reviewed-by: Boris Mittelberg <bmbm@google.com>
1 parent 9763006 commit c00f37d

3 files changed

Lines changed: 42 additions & 1 deletion

File tree

board/banshee/board.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "gpio_signal.h"
1515
#include "hooks.h"
1616
#include "driver/als_tcs3400.h"
17+
#include "driver/charger/isl9241.h"
1718
#include "fw_config.h"
1819
#include "hooks.h"
1920
#include "lid_switch.h"
@@ -41,3 +42,41 @@ static void board_chipset_suspend(void)
4142
{
4243
}
4344
DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, board_chipset_suspend, HOOK_PRIO_DEFAULT);
45+
46+
void board_set_charger_current_limit_deferred(void)
47+
{
48+
int action;
49+
int rv;
50+
51+
if (extpower_is_present() &&
52+
(battery_get_disconnect_state() != BATTERY_NOT_DISCONNECTED))
53+
/* AC only or AC+DC but battery is disconnect */
54+
action = MASK_SET;
55+
else
56+
action = MASK_CLR;
57+
58+
rv = i2c_update16(chg_chips[CHARGER_SOLO].i2c_port,
59+
chg_chips[CHARGER_SOLO].i2c_addr_flags,
60+
ISL9241_REG_CONTROL3,
61+
ISL9241_CONTROL3_INPUT_CURRENT_LIMIT, action);
62+
63+
if (rv)
64+
CPRINTF("Could not set charger input current limit! Error: %d\n"
65+
, rv);
66+
}
67+
68+
DECLARE_DEFERRED(board_set_charger_current_limit_deferred);
69+
DECLARE_HOOK(HOOK_SECOND, board_set_charger_current_limit_deferred,
70+
HOOK_PRIO_DEFAULT);
71+
72+
void battery_present_interrupt(enum gpio_signal signal)
73+
{
74+
hook_call_deferred(&board_set_charger_current_limit_deferred_data, 0);
75+
}
76+
77+
void board_init(void)
78+
{
79+
gpio_enable_interrupt(GPIO_EC_BATT_PRES_ODL);
80+
hook_call_deferred(&board_set_charger_current_limit_deferred_data, 0);
81+
}
82+
DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);

board/banshee/board.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,8 @@ enum mft_channel {
235235
MFT_CH_COUNT
236236
};
237237

238+
void battery_present_interrupt(enum gpio_signal signal);
239+
238240
#endif /* !__ASSEMBLER__ */
239241

240242
#endif /* __CROS_EC_BOARD_H */

board/banshee/gpio.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ GPIO_INT(SEQ_EC_RSMRST_ODL, PIN(E, 2), GPIO_INT_BOTH, power_signal_
2323
GPIO_INT(SLP_S3_L, PIN(A, 5), GPIO_INT_BOTH, power_signal_interrupt)
2424
GPIO_INT(SLP_SUS_L, PIN(F, 1), GPIO_INT_BOTH, power_signal_interrupt)
2525
GPIO_INT(SYS_SLP_S0IX_L, PIN(D, 5), GPIO_INT_BOTH, power_signal_interrupt)
26+
GPIO_INT(EC_BATT_PRES_ODL, PIN(A, 3), GPIO_INT_BOTH, battery_present_interrupt)
2627

2728
GPIO_INT(USB_C0_BC12_INT_ODL, PIN(C, 6), GPIO_INT_FALLING, bc12_interrupt)
2829
GPIO_INT(USB_C1_BC12_INT_ODL, PIN(5, 0), GPIO_INT_FALLING, bc12_interrupt)
@@ -43,7 +44,6 @@ GPIO_INT(USB_C3_RT_INT_ODL, PIN(8, 1), GPIO_INT_FALLING, retimer_in
4344
GPIO(CCD_MODE_ODL, PIN(E, 5), GPIO_INPUT)
4445
GPIO(CHARGER_VAP_OTG_EN, PIN(7, 3), GPIO_OUT_LOW)
4546
GPIO(CPU_C10_GATE_L, PIN(6, 7), GPIO_INPUT)
46-
GPIO(EC_BATT_PRES_ODL, PIN(A, 3), GPIO_INPUT)
4747
GPIO(EC_ENTERING_RW, PIN(0, 3), GPIO_OUT_LOW)
4848
GPIO(EC_EN_EDP_BL, PIN(D, 3), GPIO_OUT_HIGH)
4949
GPIO(EC_GSC_PACKET_MODE, PIN(7, 5), GPIO_OUT_LOW)

0 commit comments

Comments
 (0)