mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-17 18:41:22 +00:00
reef: Enable BD9995X power save mode when hibernated
Turn off the charger BGATE when the system is hibernated to
save maximum power.
BUG=chrome-os-partner:59001
BRANCH=none
TEST=Manually verified on the Reef.
System can boot from hibernate wake sources.
Following are the power measurement values at Battery
voltage = 8.3V & temperature = 23 deg C.
a. Normal operation 540uA, 3.500mW
b. BGATE OFF 80uA, 0.592mW
Change-Id: Ia30655ccefbf0dded623246150d53b2a815df2de
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/404685
Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
df028763fb
commit
cbc14b38f4
@@ -918,6 +918,9 @@ void board_hibernate(void)
|
||||
|
||||
/* Enable both the VBUS & VCC ports before entering PG3 */
|
||||
bd9995x_select_input_port(BD9995X_CHARGE_PORT_BOTH, 1);
|
||||
|
||||
/* Turn BGATE OFF for saving the power */
|
||||
bd9995x_set_power_save_mode(BD9995X_PWR_SAVE_MAX);
|
||||
}
|
||||
|
||||
struct {
|
||||
|
||||
@@ -630,7 +630,6 @@ int charger_set_voltage(int voltage)
|
||||
static void bd99995_init(void)
|
||||
{
|
||||
int reg;
|
||||
int power_save_mode = BD9995X_PWR_SAVE_OFF;
|
||||
const struct battery_info *bi = battery_get_info();
|
||||
|
||||
/* Enable BC1.2 detection on VCC */
|
||||
@@ -708,10 +707,10 @@ static void bd99995_init(void)
|
||||
|
||||
/* Power save mode when VBUS/VCC is removed. */
|
||||
#ifdef CONFIG_BD9995X_POWER_SAVE_MODE
|
||||
power_save_mode = CONFIG_BD9995X_POWER_SAVE_MODE;
|
||||
bd9995x_set_power_save_mode(CONFIG_BD9995X_POWER_SAVE_MODE);
|
||||
#else
|
||||
bd9995x_set_power_save_mode(BD9995X_PWR_SAVE_OFF);
|
||||
#endif
|
||||
ch_raw_write16(BD9995X_CMD_SMBREG, power_save_mode,
|
||||
BD9995X_EXTENDED_COMMAND);
|
||||
|
||||
#ifdef CONFIG_USB_PD_DISCHARGE
|
||||
/* Set VBUS / VCC detection threshold for discharge enable */
|
||||
@@ -855,6 +854,11 @@ int bd9995x_get_battery_temp(int *temp_ptr)
|
||||
}
|
||||
#endif
|
||||
|
||||
void bd9995x_set_power_save_mode(int mode)
|
||||
{
|
||||
ch_raw_write16(BD9995X_CMD_SMBREG, mode, BD9995X_EXTENDED_COMMAND);
|
||||
}
|
||||
|
||||
#ifdef HAS_TASK_USB_CHG
|
||||
int bd9995x_get_bc12_ilim(int charge_supplier)
|
||||
{
|
||||
@@ -913,23 +917,21 @@ int bd9995x_bc12_enable_charging(enum bd9995x_charge_port port, int enable)
|
||||
|
||||
void usb_charger_set_switches(int port, enum usb_switch setting)
|
||||
{
|
||||
int power_save_mode = BD9995X_PWR_SAVE_OFF;
|
||||
|
||||
/* If switch is not changing then return */
|
||||
if (setting == usb_switch_state[port])
|
||||
return;
|
||||
|
||||
if (setting != USB_SWITCH_RESTORE)
|
||||
usb_switch_state[port] = setting;
|
||||
|
||||
/* ensure we disable power saving when we are using DP/DN */
|
||||
#ifdef CONFIG_BD9995X_POWER_SAVE_MODE
|
||||
power_save_mode = (usb_switch_state[0] == USB_SWITCH_DISCONNECT &&
|
||||
usb_switch_state[1] == USB_SWITCH_DISCONNECT)
|
||||
? CONFIG_BD9995X_POWER_SAVE_MODE
|
||||
: BD9995X_PWR_SAVE_OFF;
|
||||
bd9995x_set_power_save_mode(
|
||||
(usb_switch_state[0] == USB_SWITCH_DISCONNECT &&
|
||||
usb_switch_state[1] == USB_SWITCH_DISCONNECT)
|
||||
? CONFIG_BD9995X_POWER_SAVE_MODE : BD9995X_PWR_SAVE_OFF);
|
||||
#endif
|
||||
ch_raw_write16(BD9995X_CMD_SMBREG, power_save_mode,
|
||||
BD9995X_EXTENDED_COMMAND);
|
||||
|
||||
bd9995x_enable_usb_switch(port, usb_switch_state[port]);
|
||||
}
|
||||
|
||||
|
||||
@@ -357,6 +357,8 @@ int bd9995x_bc12_enable_charging(enum bd9995x_charge_port port, int enable);
|
||||
void bd9995x_vbus_interrupt(enum gpio_signal signal);
|
||||
/* Read temperature measurement value (in Celsius) */
|
||||
int bd9995x_get_battery_temp(int *temp_ptr);
|
||||
/* Set power save mode */
|
||||
void bd9995x_set_power_save_mode(int mode);
|
||||
|
||||
#ifdef CONFIG_CMD_I2C_STRESS_TEST_CHARGER
|
||||
extern struct i2c_stress_test_dev bd9995x_i2c_stress_test_dev;
|
||||
|
||||
Reference in New Issue
Block a user