From 16cbaf1cd1c839e3d061a1a8d9cb34fe14ab288e Mon Sep 17 00:00:00 2001 From: Alec Berg Date: Mon, 3 Aug 2015 14:04:37 -0700 Subject: oak: add usb charger tasks Add USB charger tasks to oak to detect legacy charger type. BUG=none BRANCH=none TEST=make -j buildall Change-Id: Idb8061c39b0bb8b42f47cbe3ff213b04f14c889a Signed-off-by: Alec Berg Reviewed-on: https://chromium-review.googlesource.com/290420 Reviewed-by: Rong Chang Commit-Queue: Rong Chang Tested-by: Rong Chang --- board/oak/board.c | 46 ++-------------------------------------------- board/oak/board.h | 1 + board/oak/ec.tasklist | 4 ++-- board/oak/gpio.inc | 4 ++-- board/oak/usb_pd_policy.c | 8 ++++---- common/usb_charger.c | 4 ++++ 6 files changed, 15 insertions(+), 52 deletions(-) diff --git a/board/oak/board.c b/board/oak/board.c index ba7858ffe1..3dd9d75615 100644 --- a/board/oak/board.c +++ b/board/oak/board.c @@ -187,54 +187,12 @@ void i2c_set_timeout(int port, uint32_t timeout) /* Initialize board. */ static void board_init(void) { - int i, bc12_status; - struct charge_port_info charge_none, charge_vbus; - struct charge_port_info *charge_sel; - /* Enable rev1 testing GPIOs */ gpio_set_level(GPIO_SYSTEM_POWER_H, 1); /* Enable PD MCU interrupt */ gpio_enable_interrupt(GPIO_PD_MCU_INT); /* Enable VBUS interrupt */ gpio_enable_interrupt(GPIO_VBUS_WAKE_L); - - charge_none.voltage = USB_CHARGER_VOLTAGE_MV; - charge_none.current = 0; - charge_vbus.voltage = USB_CHARGER_VOLTAGE_MV; - charge_vbus.current = USB_CHARGER_MIN_CURR_MA; - for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { - /* Initialize all pericom charge suppliers to 0 */ - 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 VBUS */ - /* TODO(crbug.com/498974): Don't do i2c from hook_init. */ - bc12_status = pi3usb9281_get_charger_status(i); - charge_sel = PI3USB9281_CHG_STATUS_ANY(bc12_status) ? - &charge_vbus : &charge_none; - charge_manager_update_charge( - CHARGE_SUPPLIER_VBUS, - i, - charge_sel); - } } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); @@ -252,8 +210,8 @@ int board_set_active_charge_port(int charge_port) int is_real_port = (charge_port >= 0 && charge_port < CONFIG_USB_PD_PORT_COUNT); /* check if we are source VBUS on the port */ - int source = gpio_get_level(charge_port == 0 ? GPIO_USB_C0_5V_OUT : - GPIO_USB_C1_5V_OUT); + int source = gpio_get_level(charge_port == 0 ? GPIO_USB_C0_5V_EN : + GPIO_USB_C1_5V_EN); if (is_real_port && source) { CPRINTF("Skip enable p%d", charge_port); diff --git a/board/oak/board.h b/board/oak/board.h index b1c9806041..1dbc42e18f 100644 --- a/board/oak/board.h +++ b/board/oak/board.h @@ -57,6 +57,7 @@ #define CONFIG_PMIC_FW_LONG_PRESS_TIMER #define CONFIG_POWER_BUTTON #define CONFIG_POWER_COMMON +#define CONFIG_USB_CHARGER #define CONFIG_USBC_SS_MUX #define CONFIG_USBC_SS_MUX_DFP_ONLY #define CONFIG_USBC_VCONN diff --git a/board/oak/ec.tasklist b/board/oak/ec.tasklist index 2b74f6da5e..30b716c885 100644 --- a/board/oak/ec.tasklist +++ b/board/oak/ec.tasklist @@ -18,6 +18,8 @@ */ #define CONFIG_TASK_LIST \ TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_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(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(PDCMD, pd_command_task, NULL, TASK_STACK_SIZE) \ @@ -26,5 +28,3 @@ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) - -/* TODO: Add pericom USB charger tasks */ diff --git a/board/oak/gpio.inc b/board/oak/gpio.inc index c45e51e785..0bcee1ee5d 100644 --- a/board/oak/gpio.inc +++ b/board/oak/gpio.inc @@ -104,9 +104,9 @@ GPIO(PMIC_PWRON_H, PIN(A, 12), GPIO_OUT_LOW) GPIO(PMIC_WARM_RESET_H, PIN(B, 3), GPIO_OUT_LOW) GPIO(LEVEL_SHIFT_EN_L, PIN(D, 3), GPIO_OUT_LOW) /* LID/AC level shift */ GPIO(USB_PD_RST_L, PIN(A, 15), GPIO_OUT_HIGH) /* PD reset */ -GPIO(USB_C0_5V_OUT, PIN(D, 8), GPIO_OUT_LOW) /* USBC port 0 5V */ +GPIO(USB_C0_5V_EN, PIN(D, 8), GPIO_OUT_LOW) /* USBC port 0 5V */ GPIO(USB_C0_CHARGE_L, PIN(D, 9), GPIO_OUT_LOW) /* USBC port 0 charge */ -GPIO(USB_C1_5V_OUT, PIN(D, 10), GPIO_OUT_LOW) /* USBC port 1 5V */ +GPIO(USB_C1_5V_EN, PIN(D, 10), GPIO_OUT_LOW) /* USBC port 1 5V */ GPIO(USB_C1_CHARGE_L, PIN(D, 11), GPIO_OUT_LOW) /* USBC port 1 charge */ GPIO(USB_PD_VBUS_WAKE, PIN(B, 15), GPIO_OUT_LOW) /* PD VBUS wake */ GPIO(USB_DP_HPD, PIN(F, 3), GPIO_OUT_LOW) diff --git a/board/oak/usb_pd_policy.c b/board/oak/usb_pd_policy.c index 86ceb9fe3c..7bc7a594f7 100644 --- a/board/oak/usb_pd_policy.c +++ b/board/oak/usb_pd_policy.c @@ -78,8 +78,8 @@ int pd_set_power_supply_ready(int port) gpio_set_level(port ? GPIO_USB_C1_CHARGE_L : GPIO_USB_C0_CHARGE_L, 1); /* Provide VBUS */ - gpio_set_level(port ? GPIO_USB_C1_5V_OUT : - GPIO_USB_C0_5V_OUT, 1); + gpio_set_level(port ? GPIO_USB_C1_5V_EN : + GPIO_USB_C0_5V_EN, 1); return EC_SUCCESS; /* we are ready */ } @@ -87,8 +87,8 @@ int pd_set_power_supply_ready(int port) void pd_power_supply_reset(int port) { /* Disable VBUS */ - gpio_set_level(port ? GPIO_USB_C1_5V_OUT : - GPIO_USB_C0_5V_OUT, 0); + gpio_set_level(port ? GPIO_USB_C1_5V_EN : + GPIO_USB_C0_5V_EN, 0); /* * TODO: Currently we can only detect VBUS when charge_l is diff --git a/common/usb_charger.c b/common/usb_charger.c index f686ffaff1..99263fafc9 100644 --- a/common/usb_charger.c +++ b/common/usb_charger.c @@ -227,8 +227,10 @@ void usb_charger_task(void) */ if (evt & USB_CHG_EVENT_VBUS) { pi3usb9281_enable_interrupts(port); +#ifndef CONFIG_USB_PD_TCPM_VBUS CPRINTS("VBUS p%d %d", port, pd_snk_is_vbus_provided(port)); +#endif } } } @@ -258,8 +260,10 @@ static void usb_charger_init(void) i, &charge_none); +#ifndef CONFIG_USB_PD_TCPM_VBUS /* Initialize VBUS supplier based on whether VBUS is present */ update_vbus_supplier(i, pd_snk_is_vbus_provided(i)); +#endif } } DECLARE_HOOK(HOOK_INIT, usb_charger_init, HOOK_PRIO_DEFAULT); -- cgit v1.2.1