diff options
author | Vijay Hiremath <vijay.p.hiremath@intel.com> | 2016-05-26 18:45:21 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-05-28 00:08:38 -0700 |
commit | dc3de2c826fe96c6d45cd72a2135951da4237c74 (patch) | |
tree | 6ad17aa97ed7998e194e6e967011959d8c3a06c1 | |
parent | 52fdd95321cb56094498f358872400969e260f9e (diff) | |
download | chrome-ec-dc3de2c826fe96c6d45cd72a2135951da4237c74.tar.gz |
reef: Initialize charge suppliers after change manager is initialized
Initialize the charge suppliers after change manager is initialized,
otherwise charge supplier current & voltage values will be overwritten
to -1 by the charge manager ini function.
BUG=chrome-os-partner:53788
BRANCH=None
TEST=Observed there are no "CL: p(port) s(supplier) i-1 v-1" prints
on the EC console.
Change-Id: Id0212c502d5833c016ac79ee15d21304d6d7ceb2
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/347896
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>
-rw-r--r-- | board/reef/board.c | 42 | ||||
-rw-r--r-- | common/charge_manager.c | 2 | ||||
-rw-r--r-- | common/usb_charger.c | 4 | ||||
-rw-r--r-- | include/hooks.h | 2 |
4 files changed, 36 insertions, 14 deletions
diff --git a/board/reef/board.c b/board/reef/board.c index 395ef77ef2..0b93da8bb0 100644 --- a/board/reef/board.c +++ b/board/reef/board.c @@ -294,20 +294,32 @@ static void chipset_pre_init(void) } DECLARE_HOOK(HOOK_CHIPSET_PRE_INIT, chipset_pre_init, HOOK_PRIO_DEFAULT); -/* Initialize board. */ -static void board_init(void) +static void update_vbus_supplier(int port, int vbus_level) { - /* FIXME: Handle tablet mode */ - /* gpio_enable_interrupt(GPIO_TABLET_MODE_L); */ + struct charge_port_info charge; - struct charge_port_info charge_none; + /* + * If VBUS is low, or VBUS is high and we are not outputting VBUS + * ourselves, then update the VBUS supplier. + */ + if (!vbus_level || !usb_charger_port_is_sourcing_vbus(port)) { + charge.voltage = USB_CHARGER_VOLTAGE_MV; + charge.current = vbus_level ? USB_CHARGER_MIN_CURR_MA : 0; + charge_manager_update_charge(CHARGE_SUPPLIER_VBUS, + port, + &charge); + } +} + +/* TODO: Implement BC1.2 + VBUS detection */ +static void usb_charger_init(void) +{ int i; + struct charge_port_info charge_none; - /* Initialize all BC1.2 charge suppliers to 0 */ + /* Initialize all charge suppliers to 0 */ charge_none.voltage = USB_CHARGER_VOLTAGE_MV; charge_none.current = 0; - - /* TODO: Implement BC1.2 + VBUS detection */ for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY, i, @@ -324,10 +336,18 @@ static void board_init(void) charge_manager_update_charge(CHARGE_SUPPLIER_OTHER, i, &charge_none); - charge_manager_update_charge(CHARGE_SUPPLIER_VBUS, - i, - &charge_none); + + /* Initialize VBUS supplier based on whether VBUS is present */ + update_vbus_supplier(i, pd_snk_is_vbus_provided(i)); } +} +DECLARE_HOOK(HOOK_INIT, usb_charger_init, HOOK_PRIO_CHARGE_MANAGER_INIT + 1); + +/* Initialize board. */ +static void board_init(void) +{ + /* FIXME: Handle tablet mode */ + /* gpio_enable_interrupt(GPIO_TABLET_MODE_L); */ /* * There are dependencies in Reef's power topology: diff --git a/common/charge_manager.c b/common/charge_manager.c index d57037aae8..58f87819bd 100644 --- a/common/charge_manager.c +++ b/common/charge_manager.c @@ -114,7 +114,7 @@ static void charge_manager_init(void) CAP_UNKNOWN; } } -DECLARE_HOOK(HOOK_INIT, charge_manager_init, HOOK_PRIO_DEFAULT-1); +DECLARE_HOOK(HOOK_INIT, charge_manager_init, HOOK_PRIO_CHARGE_MANAGER_INIT); /** * Returns 1 if all ports + suppliers have reported in with some initial charge, diff --git a/common/usb_charger.c b/common/usb_charger.c index 8e938233a3..2b9c505f2e 100644 --- a/common/usb_charger.c +++ b/common/usb_charger.c @@ -69,7 +69,7 @@ static void usb_charger_init(void) int i; struct charge_port_info charge_none; - /* Initialize all pericom charge suppliers to 0 */ + /* Initialize all charge suppliers to 0 */ charge_none.voltage = USB_CHARGER_VOLTAGE_MV; charge_none.current = 0; for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { @@ -95,4 +95,4 @@ static void usb_charger_init(void) #endif } } -DECLARE_HOOK(HOOK_INIT, usb_charger_init, HOOK_PRIO_DEFAULT); +DECLARE_HOOK(HOOK_INIT, usb_charger_init, HOOK_PRIO_CHARGE_MANAGER_INIT + 1); diff --git a/include/hooks.h b/include/hooks.h index 1eec3b7ff3..ae4bfd9732 100644 --- a/include/hooks.h +++ b/include/hooks.h @@ -39,6 +39,8 @@ enum hook_priority { HOOK_PRIO_INIT_EXTPOWER = HOOK_PRIO_FIRST + 9, /* Init VBOOT hash later, since it depends on deferred functions */ HOOK_PRIO_INIT_VBOOT_HASH = HOOK_PRIO_FIRST + 10, + /* Init charge manager before usage in board init */ + HOOK_PRIO_CHARGE_MANAGER_INIT = HOOK_PRIO_FIRST + 11, /* Specific values to lump temperature-related hooks together */ HOOK_PRIO_TEMP_SENSOR = 6000, |