diff options
author | xiong.huang <xiong.huang@bitland.corp-partner.google.com> | 2020-06-10 19:40:43 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-14 07:53:20 +0000 |
commit | 36a658857a7760b4666942aae0d938b4fd59777c (patch) | |
tree | 12266fab82f78036e9c9d32a94cbc54fdd16ef99 | |
parent | 13d9ff85b01bf69c78e4e3623797b4c1f5c56ffa (diff) | |
download | chrome-ec-36a658857a7760b4666942aae0d938b4fd59777c.tar.gz |
boten: use charger/TCPC RAA48900
Use charger/TCPC RAA48900 instead of TCPC IT8320 + charger SM5803
combination at MB side.
BUG=b:157626290, b:158023819
BRANCH=none
TEST=make buildall -j
Signed-off-by: xiong.huang <xiong.huang@bitland.corp-partner.google.com>
Change-Id: Ibb97a41e1d280da7c92cf2c00202b5eb205f99b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2239599
Reviewed-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Diana Z <dzigterman@chromium.org>
-rw-r--r-- | baseboard/dedede/baseboard.h | 11 | ||||
-rw-r--r-- | board/boten/board.c | 136 | ||||
-rw-r--r-- | board/boten/board.h | 27 | ||||
-rw-r--r-- | board/boten/ec.tasklist | 3 | ||||
-rw-r--r-- | board/boten/gpio.inc | 6 | ||||
-rw-r--r-- | board/boten/usb_pd_policy.c | 40 | ||||
-rw-r--r-- | board/waddledee/board.h | 1 | ||||
-rw-r--r-- | board/waddledoo/board.h | 10 | ||||
-rw-r--r-- | board/wheelie/board.h | 1 |
9 files changed, 119 insertions, 116 deletions
diff --git a/baseboard/dedede/baseboard.h b/baseboard/dedede/baseboard.h index 8b15a0f6ad..d3e6d18237 100644 --- a/baseboard/dedede/baseboard.h +++ b/baseboard/dedede/baseboard.h @@ -32,16 +32,6 @@ #define CONFIG_FLASH_SIZE (512 * 1024) #define CONFIG_SPI_FLASH_REGS #define CONFIG_SPI_FLASH_W25Q80 /* Internal SPI flash type. */ - - /* USB defines specific to external TCPCs */ - #define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE - #define CONFIG_USB_PD_VBUS_DETECT_TCPC - #define CONFIG_USB_PD_DISCHARGE_TCPC - #define CONFIG_USB_PD_TCPC_LOW_POWER - - /* Variant references the TCPCs to determine Vbus sourcing */ - #define CONFIG_USB_PD_5V_EN_CUSTOM - #elif defined(VARIANT_DEDEDE_EC_IT8320) /* Flash clock must be > (50Mhz / 2) */ #define CONFIG_IT83XX_FLASH_CLOCK_48MHZ @@ -168,7 +158,6 @@ #define CONFIG_USB_PD_DUAL_ROLE #define CONFIG_USB_PD_LOGGING #define CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT TYPEC_RP_3A0 -#define CONFIG_USB_PD_PORT_MAX_COUNT 2 #define CONFIG_USB_PD_REV30 #define CONFIG_USB_PD_TCPM_MUX #define CONFIG_USB_PD_TCPM_TCPCI diff --git a/board/boten/board.c b/board/boten/board.c index 17d0066258..f1ff1ca721 100644 --- a/board/boten/board.c +++ b/board/boten/board.c @@ -12,10 +12,11 @@ #include "driver/accel_lis2dh.h" #include "driver/accelgyro_lsm6dsm.h" #include "driver/bc12/pi3usb9201.h" -#include "driver/charger/sm5803.h" +#include "driver/charger/isl923x.h" #include "driver/sync.h" #include "driver/temp_sensor/thermistor.h" -#include "driver/tcpm/it83xx_pd.h" +#include "driver/tcpm/raa489000.h" +#include "driver/tcpm/tcpci.h" #include "driver/usb_mux/it5205.h" #include "gpio.h" #include "hooks.h" @@ -40,40 +41,14 @@ #define CPRINTUSB(format, args...) cprints(CC_USBCHARGE, format, ## args) -#define INT_RECHECK_US 5000 - -/* C0 interrupt line shared by BC 1.2 and charger */ -static void check_c0_line(void); -DECLARE_DEFERRED(check_c0_line); - -static void notify_c0_chips(void) -{ - task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12, 0); - sm5803_interrupt(0); -} - -static void check_c0_line(void) +static void usb_c0_interrupt(enum gpio_signal s) { /* - * If line is still being held low, see if there's more to process from - * one of the chips + * The interrupt line is shared between the TCPC and BC 1.2 detection + * chip. */ - if (!gpio_get_level(GPIO_USB_C0_INT_ODL)) { - notify_c0_chips(); - hook_call_deferred(&check_c0_line_data, INT_RECHECK_US); - } -} - -static void usb_c0_interrupt(enum gpio_signal s) -{ - /* Cancel any previous calls to check the interrupt line */ - hook_call_deferred(&check_c0_line_data, -1); - - /* Notify all chips using this line that an interrupt came in */ - notify_c0_chips(); - - /* Check the line again in 5ms */ - hook_call_deferred(&check_c0_line_data, INT_RECHECK_US); + schedule_deferred_pd_interrupt(0); + task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12, 0); } static void c0_ccsbu_ovp_interrupt(enum gpio_signal s) @@ -98,8 +73,8 @@ const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = { const struct charger_config_t chg_chips[] = { { .i2c_port = I2C_PORT_USB_C0, - .i2c_addr_flags = SM5803_ADDR_CHARGER_FLAGS, - .drv = &sm5803_drv, + .i2c_addr_flags = ISL923X_ADDR_FLAGS, + .drv = &isl923x_drv, }, }; const unsigned int chg_cnt = ARRAY_SIZE(chg_chips); @@ -107,8 +82,13 @@ const unsigned int chg_cnt = ARRAY_SIZE(chg_chips); /* TCPCs */ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { { - .bus_type = EC_BUS_TYPE_EMBEDDED, - .drv = &it83xx_tcpm_drv, + .bus_type = EC_BUS_TYPE_I2C, + .i2c_info = { + .port = I2C_PORT_USB_C0, + .addr_flags = RAA489000_TCPC0_I2C_FLAGS, + }, + .flags = TCPC_FLAGS_TCPCI_REV2_0, + .drv = &raa489000_tcpm_drv, }, }; @@ -126,10 +106,8 @@ void board_init(void) { gpio_enable_interrupt(GPIO_USB_C0_INT_ODL); gpio_enable_interrupt(GPIO_USB_C0_CCSBU_OVP_ODL); - - /* Charger on the MB will be outputting PROCHOT_ODL and OD CHG_DET */ - sm5803_configure_gpio0(CHARGER_SOLO, GPIO0_MODE_PROCHOT, 1); - sm5803_configure_chg_det_od(CHARGER_SOLO, 1); + /* Enable gpio interrupt for base accelgyro sensor */ + gpio_enable_interrupt(GPIO_BASE_SIXAXIS_INT_L); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); @@ -143,21 +121,31 @@ void board_reset_pd_mcu(void) uint16_t tcpc_get_alert_status(void) { + uint16_t status = 0; + int regval; + /* - * TODO(b/157626290): Boten will use one TCPC RAA489000. + * The interrupt line is shared between the TCPC and BC1.2 detector IC. + * Therefore, go out and actually read the alert registers to report the + * alert status. */ - uint16_t status = 0; + if (!gpio_get_level(GPIO_USB_C0_INT_ODL)) { + if (!tcpc_read16(0, TCPC_REG_ALERT, ®val)) { + /* The TCPCI Rev 1.0 spec says to ignore bits 14:12. */ + if (!(tcpc_config[0].flags & TCPC_FLAGS_TCPCI_REV2_0)) + regval &= ~((1 << 14) | (1 << 13) | (1 << 12)); + + if (regval) + status |= PD_STATUS_TCPC_ALERT_0; + } + } return status; } int extpower_is_present(void) { - int chg0 = 0; - - sm5803_get_chg_det(0, &chg0); - - return chg0; + return pd_check_vbus_level(0, VBUS_PRESENT); } void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, @@ -172,38 +160,44 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, charge_set_input_current_limit(icl, charge_mv); } -int board_set_active_charge_port(int port) +int board_is_sourcing_vbus(int port) { - /* - * TODO(b/157626290): Boten will use one charge RAA489000. - */ + int regval; - return EC_SUCCESS; -} + tcpc_read(port, TCPC_REG_POWER_STATUS, ®val); + return !!(regval & TCPC_REG_POWER_STATUS_SOURCING_VBUS); -/* Vconn control for integrated ITE TCPC */ -void board_pd_vconn_ctrl(int port, enum usbpd_cc_pin cc_pin, int enabled) -{ - /* Vconn control is only for port 0 */ - if (port) - return; - - if (cc_pin == USBPD_CC_PIN_1) - gpio_set_level(GPIO_EN_USB_C0_CC1_VCONN, !!enabled); - else - gpio_set_level(GPIO_EN_USB_C0_CC2_VCONN, !!enabled); } -__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp) +int board_set_active_charge_port(int port) { - int current; + if (port != 0 && port != CHARGE_PORT_NONE) + return EC_ERROR_INVAL; - if (port != 0) - return; + CPRINTUSB("New chg p%d", port); - current = (rp == TYPEC_RP_3A0) ? 3000 : 1500; + /* Disable all ports. */ + if (port == CHARGE_PORT_NONE) { + tcpc_write(0, TCPC_REG_COMMAND, + TCPC_REG_COMMAND_SNK_CTRL_LOW); - chg_chips[port].drv->set_otg_current_voltage(port, current, 5000); + return EC_SUCCESS; + } + + /* Check if port is sourcing VBUS. */ + if (board_is_sourcing_vbus(port)) { + CPRINTUSB("Skip enable p%d", port); + return EC_ERROR_INVAL; + } + + /* Enable requested charge port. */ + if (tcpc_write(0, TCPC_REG_COMMAND, + TCPC_REG_COMMAND_SNK_CTRL_HIGH)) { + CPRINTUSB("p%d: sink path enable failed.", port); + return EC_ERROR_UNKNOWN; + } + + return EC_SUCCESS; } /* PWM channels. Must be in the exactly same order as in enum pwm_channel. */ diff --git a/board/boten/board.h b/board/boten/board.h index be1adabdcf..40de5495b9 100644 --- a/board/boten/board.h +++ b/board/boten/board.h @@ -22,10 +22,11 @@ #define CONFIG_BC12_DETECT_PI3USB9201 /* Charger */ -#define CONFIG_CHARGER_SM5803 /* C0 Charger */ -#define CONFIG_USB_PD_VBUS_DETECT_CHARGER -#define CONFIG_USB_PD_5V_CHARGER_CTRL -#define CONFIG_CHARGER_OTG +#define CONFIG_CHARGER_DISCHARGE_ON_AC +#define CONFIG_CHARGER_RAA489000 +#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10 +#define CONFIG_CHARGER_SENSE_RESISTOR 10 +#define CONFIG_OCPC_DEF_RBATT_MOHMS 22 /* R_DS(on) 11.6mOhm + 10mOhm sns rstr */ /* LED */ #define CONFIG_LED_PWM_COUNT 1 @@ -57,10 +58,17 @@ #define CONFIG_GMR_TABLET_MODE /* TCPC */ -#undef CONFIG_USB_PD_PORT_MAX_COUNT #define CONFIG_USB_PD_PORT_MAX_COUNT 1 -#define CONFIG_USB_PD_TCPM_ITE_ON_CHIP /* C0: ITE EC TCPC */ -#define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 1 +#define CONFIG_USB_PD_TCPM_RAA489000 + +/* USB defines specific to external TCPCs */ +#define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE +#define CONFIG_USB_PD_VBUS_DETECT_TCPC +#define CONFIG_USB_PD_DISCHARGE_TCPC +#define CONFIG_USB_PD_TCPC_LOW_POWER + +/* Variant references the TCPCs to determine Vbus sourcing */ +#define CONFIG_USB_PD_5V_EN_CUSTOM /* Thermistors */ #define CONFIG_TEMP_SENSOR @@ -68,9 +76,8 @@ #define CONFIG_STEINHART_HART_3V3_51K1_47K_4050B #define CONFIG_TEMP_SENSOR_POWER_GPIO GPIO_EN_PP3300_A -/* USB Mux and Retimer */ -#define CONFIG_USB_MUX_IT5205 /* C1: ITE Mux */ -#define I2C_PORT_USB_MUX I2C_PORT_USB_C0 /* Required for ITE Mux */ +/* USB Mux */ +#define CONFIG_USB_MUX_IT5205 #ifndef __ASSEMBLER__ diff --git a/board/boten/ec.tasklist b/board/boten/ec.tasklist index 7a73a8fdcc..217d36805f 100644 --- a/board/boten/ec.tasklist +++ b/board/boten/ec.tasklist @@ -18,4 +18,5 @@ TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_ALWAYS(POWERBTN, power_button_task, NULL, VENTI_TASK_STACK_SIZE) \ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) + TASK_ALWAYS(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) \ + TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, VENTI_TASK_STACK_SIZE) diff --git a/board/boten/gpio.inc b/board/boten/gpio.inc index 6f7286792b..f4e9681675 100644 --- a/board/boten/gpio.inc +++ b/board/boten/gpio.inc @@ -78,11 +78,8 @@ GPIO(EC_I2C_USB_C0_SCL, PIN(A, 4), GPIO_INPUT) GPIO(EC_I2C_USB_C0_SDA, PIN(A, 5), GPIO_INPUT) /* USB pins */ -GPIO(EN_USB_C0_CC1_VCONN, PIN(H, 4), GPIO_OUT_LOW) -GPIO(EN_USB_C0_CC2_VCONN, PIN(H, 6), GPIO_OUT_LOW) GPIO(EC_AP_USB_C0_HPD, PIN(L, 4), GPIO_OUT_LOW) GPIO(EC_AP_USB_C1_HDMI_HPD, PIN(K, 7), GPIO_OUT_LOW) -GPIO(USB_C0_FRS, PIN(C, 4), GPIO_OUT_LOW) GPIO(HDMI_SEL_L, PIN(C, 6), GPIO_OUT_HIGH) /* MKBP event synchronization */ @@ -107,12 +104,15 @@ GPIO(ECH1_PACKET_MODE, PIN(H, 1), GPIO_OUT_LOW) /* NC pins, enable internal pull-down to avoid floating state. */ GPIO(GPIOC0_NC, PIN(C, 0), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOC3_NC, PIN(C, 3), GPIO_INPUT | GPIO_PULL_DOWN) +GPIO(GPIOC4_NC, PIN(C, 4), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOE6_NC, PIN(E, 6), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOG3_NC, PIN(G, 3), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOG4_NC, PIN(G, 4), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOG5_NC, PIN(G, 5), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOG6_NC, PIN(G, 6), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOG7_NC, PIN(G, 7), GPIO_INPUT | GPIO_PULL_DOWN) +GPIO(GPIOH4_NC, PIN(H, 4), GPIO_INPUT | GPIO_PULL_DOWN) +GPIO(GPIOH6_NC, PIN(H, 6), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOJ4_NC, PIN(J, 4), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOJ5_NC, PIN(J, 5), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(GPIOJ6_NC, PIN(J, 6), GPIO_INPUT | GPIO_PULL_DOWN) diff --git a/board/boten/usb_pd_policy.c b/board/boten/usb_pd_policy.c index 0fc682b28e..47acd5e67e 100644 --- a/board/boten/usb_pd_policy.c +++ b/board/boten/usb_pd_policy.c @@ -24,20 +24,11 @@ int pd_check_vconn_swap(int port) void pd_power_supply_reset(int port) { - int prev_en; - - if (port < 0 || port >= CONFIG_USB_PD_PORT_MAX_COUNT) + if (port != 0) return; - /* TODO(b/147440290): charger functions should take chgnum */ - prev_en = chg_chips[port].drv->is_sourcing_otg_power(port, port); - - /* Disable Vbus */ - chg_chips[port].drv->enable_otg_power(port, 0); - - /* Discharge Vbus if previously enabled */ - if (prev_en) - sm5803_set_vbus_disch(port, 1); + /* Disable VBUS */ + tcpc_write(port, TCPC_REG_COMMAND, TCPC_REG_COMMAND_SRC_CTRL_LOW); #ifdef CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT /* Give back the current quota we are no longer using */ @@ -50,18 +41,24 @@ void pd_power_supply_reset(int port) int pd_set_power_supply_ready(int port) { - enum ec_error_list rv; + int rv; + + if (port != 0) + return EC_ERROR_INVAL; - /* Disable charging */ - rv = chg_chips[port].drv->set_mode(port, CHARGE_FLAG_INHIBIT_CHARGE); + /* Disable charging. */ + rv = tcpc_write(port, TCPC_REG_COMMAND, TCPC_REG_COMMAND_SNK_CTRL_LOW); if (rv) return rv; - /* Disable Vbus discharge */ - sm5803_set_vbus_disch(port, 0); + /* Our policy is not to source VBUS when the AP is off. */ + if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) + return EC_ERROR_NOT_POWERED; - /* Provide Vbus */ - chg_chips[port].drv->enable_otg_power(port, 1); + /* Provide Vbus. */ + rv = tcpc_write(port, TCPC_REG_COMMAND, TCPC_REG_COMMAND_SRC_CTRL_HIGH); + if (rv) + return rv; #ifdef CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT /* Ensure we advertise the proper available current quota */ @@ -76,5 +73,8 @@ int pd_set_power_supply_ready(int port) int pd_snk_is_vbus_provided(int port) { - return sm5803_is_vbus_present(port); + int regval = 0; + + tcpc_read(port, TCPC_REG_POWER_STATUS, ®val); + return regval & TCPC_REG_POWER_STATUS_VBUS_PRES; } diff --git a/board/waddledee/board.h b/board/waddledee/board.h index faa3e1aa13..a1d59b0fd6 100644 --- a/board/waddledee/board.h +++ b/board/waddledee/board.h @@ -58,6 +58,7 @@ #define CONFIG_GMR_TABLET_MODE /* TCPC */ +#define CONFIG_USB_PD_PORT_MAX_COUNT 2 #define CONFIG_USB_PD_TCPM_ITE_ON_CHIP /* C0: ITE EC TCPC */ #define CONFIG_USB_PD_TCPM_ANX7447 /* C1: ANX TCPC + Mux */ #define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 1 diff --git a/board/waddledoo/board.h b/board/waddledoo/board.h index d4bdf284ac..45504e0806 100644 --- a/board/waddledoo/board.h +++ b/board/waddledoo/board.h @@ -49,8 +49,18 @@ #define CONFIG_USBC_RETIMER_NB7V904M /* USB PD */ +#define CONFIG_USB_PD_PORT_MAX_COUNT 2 #define CONFIG_USB_PD_TCPM_RAA489000 +/* USB defines specific to external TCPCs */ +#define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE +#define CONFIG_USB_PD_VBUS_DETECT_TCPC +#define CONFIG_USB_PD_DISCHARGE_TCPC +#define CONFIG_USB_PD_TCPC_LOW_POWER + +/* Variant references the TCPCs to determine Vbus sourcing */ +#define CONFIG_USB_PD_5V_EN_CUSTOM + /* I2C configuration */ #define I2C_PORT_EEPROM NPCX_I2C_PORT7_0 #define I2C_PORT_BATTERY NPCX_I2C_PORT5_0 diff --git a/board/wheelie/board.h b/board/wheelie/board.h index fbeb23f576..f8c567dc3f 100644 --- a/board/wheelie/board.h +++ b/board/wheelie/board.h @@ -59,6 +59,7 @@ #define CONFIG_GMR_TABLET_MODE /* TCPC */ +#define CONFIG_USB_PD_PORT_MAX_COUNT 2 #define CONFIG_USB_PD_TCPM_ITE_ON_CHIP /* C0: ITE EC TCPC */ #define CONFIG_USB_PD_TCPM_ANX7447 /* C1: ANX TCPC + Mux */ #define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 1 |