diff options
author | Vijay Hiremath <vijay.p.hiremath@intel.com> | 2016-06-02 11:42:36 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-06-08 19:17:56 -0700 |
commit | 2225fbac6c818752309b1627093ca9d7ca1ac00f (patch) | |
tree | ec9602b742b9684665a85f58c8501189cbe3bc9c | |
parent | 4a6967951f107dfaf4ea7cc14516b5b1c0819244 (diff) | |
download | chrome-ec-2225fbac6c818752309b1627093ca9d7ca1ac00f.tar.gz |
reef: Enable BC1.2 support
BUG=chrome-os-partner:53688, chrome-os-partner:53721
BRANCH=none
TEST=Type-C, DCP & SDP chargers can negotiate to desired current
& voltage. Battery can charge. USB3.0 & USB2.0 sync devices
are detected by the Kernel.
Change-Id: I37890518c151ef94da2b2ade67a023f72d48fce6
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/346784
Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
-rw-r--r-- | board/reef/board.c | 79 | ||||
-rw-r--r-- | board/reef/board.h | 3 | ||||
-rw-r--r-- | board/reef/ec.tasklist | 2 | ||||
-rw-r--r-- | board/reef/gpio.inc | 2 |
4 files changed, 17 insertions, 69 deletions
diff --git a/board/reef/board.c b/board/reef/board.c index b298b64b6e..1fe7aaab80 100644 --- a/board/reef/board.c +++ b/board/reef/board.c @@ -66,16 +66,6 @@ static void tcpc_alert_event(enum gpio_signal signal) #endif } - -/* Exchange status with PD MCU. */ -static void pd_mcu_interrupt(enum gpio_signal signal) -{ -#ifdef HAS_TASK_PDCMD - /* Exchange status with PD MCU to determine interrupt cause */ - host_command_pd_send_status(0); -#endif -} - /* * enable_input_devices() is called by the tablet_mode ISR, but changes the * state of GPIOs, so its definition must reside after including gpio_list. @@ -287,68 +277,19 @@ static void chipset_pre_init(void) /* Enable PD interrupts */ gpio_enable_interrupt(GPIO_USB_C0_PD_INT); gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); - - /* Enable charger interrupts */ - gpio_enable_interrupt(GPIO_PD_MCU_INT); #endif } DECLARE_HOOK(HOOK_CHIPSET_PRE_INIT, chipset_pre_init, HOOK_PRIO_DEFAULT); -static void update_vbus_supplier(int port, int vbus_level) -{ - struct charge_port_info charge; - - /* - * 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 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++) { - charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY, - i, - &charge_none); - charge_manager_update_charge(CHARGE_SUPPLIER_BC12_CDP, - i, - &charge_none); - charge_manager_update_charge(CHARGE_SUPPLIER_BC12_DCP, - i, - &charge_none); - charge_manager_update_charge(CHARGE_SUPPLIER_BC12_SDP, - i, - &charge_none); - charge_manager_update_charge(CHARGE_SUPPLIER_OTHER, - 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); */ + /* Enable charger interrupts */ + gpio_enable_interrupt(GPIO_CHARGER_INT_L); + /* * There are dependencies in Reef's power topology: * 1. PP5000 must be enabled before PP3300 (chrome-os-partner:50807). @@ -426,6 +367,15 @@ int board_set_active_charge_port(int charge_port) */ void board_set_charge_limit(int port, int supplier, int charge_ma) { + /* Enable charging trigger by BC1.2 detection */ + int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP || + supplier == CHARGE_SUPPLIER_BC12_DCP || + supplier == CHARGE_SUPPLIER_BC12_SDP || + supplier == CHARGE_SUPPLIER_OTHER); + + if (bd99955_bc12_enable_charging(port, bc12_enable)) + return; + charge_set_input_current_limit(MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT)); } @@ -436,11 +386,6 @@ int extpower_is_present(void) return bd99955_is_vbus_provided(BD99955_CHARGE_PORT_BOTH); } -int usb_charger_port_is_sourcing_vbus(int port) -{ - return gpio_get_level(port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN); -} - /* Enable or disable input devices, based upon chipset state and tablet mode */ static void enable_input_devices(void) { diff --git a/board/reef/board.h b/board/reef/board.h index 08cbd7235a..837bd292dd 100644 --- a/board/reef/board.h +++ b/board/reef/board.h @@ -29,6 +29,7 @@ #define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1 #define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000 #define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1 +#define CONFIG_USB_CHARGER /* USB PD config */ #define CONFIG_USB_PD_ALT_MODE @@ -38,7 +39,7 @@ #define CONFIG_USB_PD_LOGGING #define CONFIG_USB_PD_LOG_SIZE 512 #define CONFIG_USB_PD_PORT_COUNT 2 -#define CONFIG_USB_PD_VBUS_DETECT_TCPC +#define CONFIG_USB_PD_VBUS_DETECT_CHARGER #define CONFIG_USB_PD_TCPM_MUX /* for both PS8751 and ANX3429 */ #define CONFIG_USB_PD_TCPM_TCPCI #define CONFIG_USB_PD_TCPM_ANX74XX diff --git a/board/reef/ec.tasklist b/board/reef/ec.tasklist index a07c0f66af..cd755be38c 100644 --- a/board/reef/ec.tasklist +++ b/board/reef/ec.tasklist @@ -23,6 +23,8 @@ #define CONFIG_TASK_LIST \ TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_ALWAYS(ALS, als_task, NULL, TASK_STACK_SIZE) \ + TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, TASK_STACK_SIZE) \ + TASK_ALWAYS(USB_CHG_P1, usb_charger_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \ diff --git a/board/reef/gpio.inc b/board/reef/gpio.inc index 1c69b0ef8f..c7f3bc7336 100644 --- a/board/reef/gpio.inc +++ b/board/reef/gpio.inc @@ -8,7 +8,7 @@ /* Declare symbolic names for all the GPIOs that we care about. * Note: Those with interrupt handlers must be declared first. */ -GPIO_INT(PD_MCU_INT, PIN(3, 3), GPIO_INT_LOW, pd_mcu_interrupt) /* CHARGER_EC_INT_ODL from BD99955 */ +GPIO_INT(CHARGER_INT_L, PIN(3, 3), GPIO_INT_FALLING, bd99955_vbus_interrupt) /* CHARGER_EC_INT_ODL from BD99955 */ GPIO_INT(USB_C0_PD_INT, PIN(3, 7), GPIO_INT_RISING, tcpc_alert_event) /* from Analogix TCPC */ GPIO_INT(USB_C1_PD_INT_ODL, PIN(D, 2), GPIO_INT_FALLING, tcpc_alert_event) /* from Parade TCPC */ |