summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxiong.huang <xiong.huang@bitland.corp-partner.google.com>2020-06-10 19:40:43 +0800
committerCommit Bot <commit-bot@chromium.org>2020-06-14 07:53:20 +0000
commit36a658857a7760b4666942aae0d938b4fd59777c (patch)
tree12266fab82f78036e9c9d32a94cbc54fdd16ef99
parent13d9ff85b01bf69c78e4e3623797b4c1f5c56ffa (diff)
downloadchrome-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.h11
-rw-r--r--board/boten/board.c136
-rw-r--r--board/boten/board.h27
-rw-r--r--board/boten/ec.tasklist3
-rw-r--r--board/boten/gpio.inc6
-rw-r--r--board/boten/usb_pd_policy.c40
-rw-r--r--board/waddledee/board.h1
-rw-r--r--board/waddledoo/board.h10
-rw-r--r--board/wheelie/board.h1
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, &regval)) {
+ /* 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, &regval);
+ 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, &regval);
+ 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