diff options
author | Paul Ma <magf@bitland.corp-partner.google.com> | 2019-08-13 16:30:40 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-08-21 05:46:32 +0000 |
commit | 0e894c6d4ae0426c9690a763a4ccd910226b5973 (patch) | |
tree | 6676b7bb73e22555d64fb1abedc04a35cd8ba6f9 /board/careena | |
parent | 8df548726b24536acdefd00c73cee5dd282d4cef (diff) | |
download | chrome-ec-0e894c6d4ae0426c9690a763a4ccd910226b5973.tar.gz |
Grunt/Treeya: Add ANX3447 variant for TCPC 0.
Merge common TCPC code into baseboard, and add choice of ANX3429 or
ANX3447 for port 0 TCPC.
Treeya uses ANX3447, all others use ANX3429.
BUG=b:138744661
BRANCH=none
TEST=build -j BOARD=treeya
Change-Id: I66f84ae50be0b5fe80479dfdc699717427e4457c
Signed-off-by: Paul Ma <magf@bitland.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1751302
Reviewed-by: Jett Rink <jettrink@chromium.org>
Reviewed-by: Martin Roth <martinroth@chromium.org>
Tested-by: Martin Roth <martinroth@chromium.org>
Commit-Queue: Martin Roth <martinroth@chromium.org>
Diffstat (limited to 'board/careena')
-rw-r--r-- | board/careena/board.c | 177 | ||||
-rw-r--r-- | board/careena/board.h | 2 |
2 files changed, 2 insertions, 177 deletions
diff --git a/board/careena/board.c b/board/careena/board.c index cc129b07ce..7f037ae131 100644 --- a/board/careena/board.c +++ b/board/careena/board.c @@ -5,79 +5,15 @@ /* Careena board-specific configuration */ -#include "adc.h" -#include "adc_chip.h" #include "button.h" -#include "charge_manager.h" -#include "charge_state.h" -#include "charge_state_v2.h" -#include "common.h" -#include "compile_time_macros.h" -#include "console.h" -#include "driver/led/lm3630a.h" -#include "driver/ppc/sn5s330.h" -#include "driver/tcpm/anx74xx.h" -#include "driver/tcpm/ps8xxx.h" -#include "driver/temp_sensor/sb_tsi.h" -#include "ec_commands.h" #include "extpower.h" -#include "gpio.h" -#include "hooks.h" #include "i2c.h" -#include "keyboard_scan.h" #include "lid_switch.h" #include "power.h" #include "power_button.h" #include "pwm.h" #include "pwm_chip.h" -#include "registers.h" #include "switch.h" -#include "system.h" -#include "task.h" -#include "tcpci.h" -#include "temp_sensor.h" -#include "thermistor.h" -#include "usb_mux.h" -#include "usb_pd_tcpm.h" -#include "usbc_ppc.h" -#include "util.h" - -#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) -#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) - -#ifdef CONFIG_USB_PD_TCPC_LOW_POWER -static void anx74xx_cable_det_handler(void) -{ - int cable_det = gpio_get_level(GPIO_USB_C0_CABLE_DET); - int reset_n = gpio_get_level(GPIO_USB_C0_PD_RST_L); - - /* - * A cable_det low->high transition was detected. If following the - * debounce time, cable_det is high, and reset_n is low, then ANX3429 is - * currently in standby mode and needs to be woken up. Set the - * TCPC_RESET event which will bring the ANX3429 out of standby - * mode. Setting this event is gated on reset_n being low because the - * ANX3429 will always set cable_det when transitioning to normal mode - * and if in normal mode, then there is no need to trigger a tcpc reset. - */ - if (cable_det && !reset_n) - task_set_event(TASK_ID_PD_C0, PD_EVENT_TCPC_RESET, 0); -} -DECLARE_DEFERRED(anx74xx_cable_det_handler); - -void anx74xx_cable_det_interrupt(enum gpio_signal signal) -{ - /* debounce for 2 msec */ - hook_call_deferred(&anx74xx_cable_det_handler_data, (2 * MSEC)); -} -#endif - -static void ppc_interrupt(enum gpio_signal signal) -{ - int port = (signal == GPIO_USB_C0_SWCTL_INT_ODL) ? 0 : 1; - - sn5s330_interrupt(port); -} #include "gpio_list.h" @@ -109,119 +45,6 @@ const struct pwm_t pwm_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); -void board_overcurrent_event(int port, int is_overcurrented) -{ - enum gpio_signal signal = (port == 0) ? GPIO_USB_C0_OC_L - : GPIO_USB_C1_OC_L; - /* Note that the levels are inverted because the pin is active low. */ - int lvl = is_overcurrented ? 0 : 1; - - gpio_set_level(signal, lvl); - - CPRINTS("p%d: overcurrent!", port); -} - -void board_tcpc_init(void) -{ - int port; - - /* Only reset TCPC if not sysjump */ - if (!system_jumped_to_this_image()) - board_reset_pd_mcu(); - - /* Enable PPC interrupts. */ - gpio_enable_interrupt(GPIO_USB_C0_SWCTL_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_SWCTL_INT_ODL); - - /* Enable TCPC interrupts. */ - gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); - -#ifdef CONFIG_USB_PD_TCPC_LOW_POWER - /* Enable CABLE_DET interrupt for ANX3429 wake from standby */ - gpio_enable_interrupt(GPIO_USB_C0_CABLE_DET); -#endif - /* - * Initialize HPD to low; after sysjump SOC needs to see - * HPD pulse to enable video path - */ - for (port = 0; port < CONFIG_USB_PD_PORT_COUNT; port++) { - const struct usb_mux *mux = &usb_muxes[port]; - - mux->hpd_update(port, 0, 0); - } -} -DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C + 1); - -uint16_t tcpc_get_alert_status(void) -{ - uint16_t status = 0; - - if (!gpio_get_level(GPIO_USB_C0_PD_INT_ODL)) { - if (gpio_get_level(GPIO_USB_C0_PD_RST_L)) - status |= PD_STATUS_TCPC_ALERT_0; - } - - if (!gpio_get_level(GPIO_USB_C1_PD_INT_ODL)) { - if (gpio_get_level(GPIO_USB_C1_PD_RST_L)) - status |= PD_STATUS_TCPC_ALERT_1; - } - - return status; -} - -/** - * Power on (or off) a single TCPC. - * minimum on/off delays are included. - * - * @param port Port number of TCPC. - * @param mode 0: power off, 1: power on. - */ -void board_set_tcpc_power_mode(int port, int mode) -{ - if (port != USB_PD_PORT_ANX74XX) - return; - - switch (mode) { - case ANX74XX_NORMAL_MODE: - gpio_set_level(GPIO_EN_USB_C0_TCPC_PWR, 1); - msleep(ANX74XX_PWR_H_RST_H_DELAY_MS); - gpio_set_level(GPIO_USB_C0_PD_RST_L, 1); - break; - case ANX74XX_STANDBY_MODE: - gpio_set_level(GPIO_USB_C0_PD_RST_L, 0); - msleep(ANX74XX_RST_L_PWR_L_DELAY_MS); - gpio_set_level(GPIO_EN_USB_C0_TCPC_PWR, 0); - msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS); - break; - default: - break; - } -} - -void board_reset_pd_mcu(void) -{ - /* Assert reset to TCPC1 (ps8751) */ - gpio_set_level(GPIO_USB_C1_PD_RST_L, 0); - - /* Assert reset to TCPC0 (anx3429) */ - gpio_set_level(GPIO_USB_C0_PD_RST_L, 0); - - /* TCPC1 (ps8751) requires 1ms reset down assertion */ - msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS)); - - /* Deassert reset to TCPC1 */ - gpio_set_level(GPIO_USB_C1_PD_RST_L, 1); - /* Disable TCPC0 power */ - gpio_set_level(GPIO_EN_USB_C0_TCPC_PWR, 0); - - /* - * anx3429 requires 10ms reset/power down assertion - */ - msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS); - board_set_tcpc_power_mode(USB_PD_PORT_ANX74XX, 1); -} - #ifdef CONFIG_KEYBOARD_FACTORY_TEST /* * We have total 24 pins for keyboard connecter, {-1, -1} mean diff --git a/board/careena/board.h b/board/careena/board.h index b0e5c0467f..cfe0abd479 100644 --- a/board/careena/board.h +++ b/board/careena/board.h @@ -8,6 +8,8 @@ #ifndef __CROS_EC_BOARD_H #define __CROS_EC_BOARD_H +#define VARIANT_GRUNT_TCPC_0_ANX3429 + #include "baseboard.h" /* |