summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVijay Hiremath <vijay.p.hiremath@intel.com>2016-05-26 18:45:21 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-05-28 00:08:38 -0700
commitdc3de2c826fe96c6d45cd72a2135951da4237c74 (patch)
tree6ad17aa97ed7998e194e6e967011959d8c3a06c1
parent52fdd95321cb56094498f358872400969e260f9e (diff)
downloadchrome-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.c42
-rw-r--r--common/charge_manager.c2
-rw-r--r--common/usb_charger.c4
-rw-r--r--include/hooks.h2
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,