summaryrefslogtreecommitdiff
path: root/baseboard
diff options
context:
space:
mode:
authorRob Barnes <robbarnes@google.com>2020-12-11 16:28:10 -0700
committerCommit Bot <commit-bot@chromium.org>2021-01-08 21:20:58 +0000
commit8c746d55286c75323846e3dea90b13837331110d (patch)
tree2ab09d03899dadea8f46871ce72df3de7ff8fcc6 /baseboard
parentb1f19242d1cc5ae6d855c889889de76683001c41 (diff)
downloadchrome-ec-8c746d55286c75323846e3dea90b13837331110d.tar.gz
guybrush: USB and charger configuration
Minimal USB, charger and battery configuration. Stubs still need to be implemented. BUG=b:175400400 BRANCH=None TEST=Build Change-Id: I83a5e3e248094e4438bcd2df48664345614a6349 Signed-off-by: Rob Barnes <robbarnes@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2593363 Reviewed-by: Diana Z <dzigterman@chromium.org> Reviewed-by: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r--baseboard/guybrush/base_ec.tasklist4
-rw-r--r--baseboard/guybrush/baseboard.c130
-rw-r--r--baseboard/guybrush/baseboard.h120
-rw-r--r--baseboard/guybrush/build.mk1
-rw-r--r--baseboard/guybrush/usb_pd_policy.c41
5 files changed, 291 insertions, 5 deletions
diff --git a/baseboard/guybrush/base_ec.tasklist b/baseboard/guybrush/base_ec.tasklist
index 6d22f38b3f..e9214fda1c 100644
--- a/baseboard/guybrush/base_ec.tasklist
+++ b/baseboard/guybrush/base_ec.tasklist
@@ -9,6 +9,10 @@
#define BASEBOARD_CONFIG_TASK_LIST \
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(CHG_RAMP, chg_ramp_task, NULL, TASK_STACK_SIZE) \
+ TASK_ALWAYS(USB_CHG_P0, usb_charger_task, 0, TASK_STACK_SIZE) \
+ TASK_ALWAYS(USB_CHG_P1, usb_charger_task, 1, TASK_STACK_SIZE) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(HOSTCMD, host_command_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(POWERBTN, power_button_task, NULL, VENTI_TASK_STACK_SIZE) \
diff --git a/baseboard/guybrush/baseboard.c b/baseboard/guybrush/baseboard.c
index a91bed0690..eb3f5dc5d0 100644
--- a/baseboard/guybrush/baseboard.c
+++ b/baseboard/guybrush/baseboard.c
@@ -7,12 +7,27 @@
#include "adc.h"
#include "adc_chip.h"
+#include "battery_fuel_gauge.h"
#include "chipset.h"
+#include "charge_manager.h"
+#include "charge_ramp.h"
+#include "charge_state.h"
+#include "charge_state_v2.h"
+#include "charger.h"
+#include "driver/ppc/aoz1380.h"
+#include "driver/ppc/nx20p348x.h"
+#include "driver/tcpm/nct38xx.h"
#include "gpio.h"
#include "i2c.h"
+#include "isl9241.h"
+#include "nct38xx.h"
+#include "pi3usb9201.h"
#include "power.h"
#include "temp_sensor.h"
#include "thermal.h"
+#include "usb_mux.h"
+#include "usb_pd_tcpm.h"
+#include "usbc_ppc.h"
/* Wake Sources */
const enum gpio_signal hibernate_wake_pins[] = {
@@ -216,6 +231,91 @@ struct ec_thermal_config thermal_params[TEMP_SENSOR_COUNT] = {
};
BUILD_ASSERT(ARRAY_SIZE(thermal_params) == TEMP_SENSOR_COUNT);
+const struct board_batt_params board_battery_info[] = {
+ /* TODO: Fill in guybrush battery configs */
+};
+BUILD_ASSERT(ARRAY_SIZE(board_battery_info) == BATTERY_TYPE_COUNT);
+
+const struct charger_config_t chg_chips[] = {
+ {
+ .i2c_port = I2C_PORT_CHARGER,
+ .i2c_addr_flags = ISL9241_ADDR_FLAGS,
+ .drv = &isl9241_drv,
+ },
+};
+
+const struct tcpc_config_t tcpc_config[] = {
+ [USBC_PORT_C0] = {
+ .bus_type = EC_BUS_TYPE_I2C,
+ .i2c_info = {
+ .port = I2C_PORT_TCPC0,
+ .addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS,
+ },
+ .drv = &nct38xx_tcpm_drv,
+ .flags = TCPC_FLAGS_TCPCI_REV2_0,
+ },
+ [USBC_PORT_C1] = {
+ .bus_type = EC_BUS_TYPE_I2C,
+ .i2c_info = {
+ .port = I2C_PORT_TCPC1,
+ .addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS,
+ },
+ .drv = &nct38xx_tcpm_drv,
+ .flags = TCPC_FLAGS_TCPCI_REV2_0,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == USBC_PORT_COUNT);
+BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT);
+
+const int usb_port_enable[USBA_PORT_COUNT] = {
+ IOEX_EN_PP5000_USB_A0_VBUS,
+ IOEX_EN_PP5000_USB_A1_VBUS_DB,
+};
+
+struct ppc_config_t ppc_chips[] = {
+ [USBC_PORT_C0] = {
+ /* Device does not talk I2C */
+ .drv = &aoz1380_drv
+ },
+
+ [USBC_PORT_C1] = {
+ .i2c_port = I2C_PORT_TCPC1,
+ .i2c_addr_flags = NX20P3483_ADDR1_FLAGS,
+ .drv = &nx20p348x_drv
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
+unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
+
+const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = {
+ [USBC_PORT_C0] = {
+ .i2c_port = I2C_PORT_TCPC0,
+ .i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
+ },
+
+ [USBC_PORT_C1] = {
+ .i2c_port = I2C_PORT_TCPC1,
+ .i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(pi3usb9201_bc12_chips) == USBC_PORT_COUNT);
+
+struct usb_mux usb_muxes[] = {
+ [USBC_PORT_C0] = {
+ /* TODO: FIll in FP6 USB Mux configuration */
+ },
+ [USBC_PORT_C1] = {
+ /* TODO: Fill in dynamically */
+ }
+};
+BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == USBC_PORT_COUNT);
+
+int board_set_active_charge_port(int port)
+{
+
+ return EC_SUCCESS;
+}
+
int board_is_i2c_port_powered(int port)
{
switch (port) {
@@ -232,6 +332,24 @@ int board_is_i2c_port_powered(int port)
}
}
+/*
+ * In the AOZ1380 PPC, there are no programmable features. We use
+ * the attached NCT3807 to control a GPIO to indicate 1A5 or 3A0
+ * current limits.
+ */
+int board_aoz1380_set_vbus_source_current_limit(int port,
+ enum tcpc_rp_value rp)
+{
+ /* TODO */
+ return 0;
+}
+
+void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
+{
+ /* TODO */
+}
+
void sbu_fault_interrupt(enum ioex_signal signal)
{
/* TODO */
@@ -257,3 +375,15 @@ int baseboard_get_temp(int idx, int *temp_ptr)
/* TODO */
return 0;
}
+
+int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
+{
+ /* TODO */
+ return false;
+}
+
+int board_get_default_battery_type(void)
+{
+ /* TODO set DEFAULT_BATTERY_TYPE and remove this stub */
+ return 0;
+}
diff --git a/baseboard/guybrush/baseboard.h b/baseboard/guybrush/baseboard.h
index 5b5c20a8a2..26afc7546b 100644
--- a/baseboard/guybrush/baseboard.h
+++ b/baseboard/guybrush/baseboard.h
@@ -69,14 +69,110 @@
#define CONFIG_GMR_TABLET_MODE
#define GMR_TABLET_MODE_GPIO_L GPIO_TABLET_MODE
-/* Common charger defines */
-
-/* Common battery defines */
+/* Battery Config */
+#define CONFIG_BATTERY_PRESENT_GPIO GPIO_EC_BATT_PRES_ODL
+#define CONFIG_BATTERY_CUT_OFF
+#define CONFIG_BATTERY_FUEL_GAUGE
+#define CONFIG_BATTERY_REVIVE_DISCONNECT
+#define CONFIG_BATTERY_SMART
+#define CONFIG_BATTERY_V2
+#define CONFIG_BATTERY_COUNT 1
+#define CONFIG_HOSTCMD_BATTERY_V2
+#define CONFIG_BC12_DETECT_PI3USB9201
+
+/* Charger Config */
+#define CONFIG_CHARGER
+#define CONFIG_CHARGE_MANAGER
+#define CONFIG_CHARGER_DISCHARGE_ON_AC
+#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_ISL9241
+#define CONFIG_CHARGER_SENSE_RESISTOR 10
+#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
+
+/*
+ * EC will boot AP to depthcharge if: (BAT >= 4%) || (AC >= 50W)
+ * CONFIG_CHARGER_LIMIT_* is not set, so there is no additional restriction on
+ * Depthcharge to boot OS.
+ */
+#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 4
+#define CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON 50000
-/* USB Type C and USB PD defines */
+/*
+ * We would prefer to use CONFIG_CHARGE_RAMP_HW to enable legacy BC1.2 charging
+ * but that feature of ISL9241 is broken (b/160287056) so we have to use
+ * CONFIG_CHARGE_RAMP_SW instead.
+ */
+#define CONFIG_CHARGE_RAMP_SW
+
+/* USB Type C and USB PD config */
+#define CONFIG_USB_PD_REV30
+#define CONFIG_USB_PD_TCPMV2
+#define CONFIG_USB_PD_DECODE_SOP
+#define CONFIG_USB_DRP_ACC_TRYSRC
+/* TODO: Enable TCPMv2 Fast Role Swap (FRS) */
+#define CONFIG_HOSTCMD_PD_CONTROL
+#define CONFIG_CMD_TCPC_DUMP
+#define CONFIG_USB_CHARGER
+#define CONFIG_USB_POWER_DELIVERY
+#define CONFIG_USB_PD_ALT_MODE
+#define CONFIG_USB_PD_ALT_MODE_DFP
+#define CONFIG_USB_PD_DISCHARGE_TCPC
+#define CONFIG_USB_PD_DP_HPD_GPIO
+#define CONFIG_USB_PD_DUAL_ROLE
+#define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
+#define CONFIG_USB_PD_LOGGING
+#define CONFIG_USB_PD_TCPC_LOW_POWER
+#define CONFIG_USB_PD_TCPM_MUX
+#define CONFIG_USB_PD_TCPM_NCT38XX
+#define CONFIG_USB_PD_TCPM_TCPCI
+#define CONFIG_USB_PD_TRY_SRC
+#define CONFIG_USB_PD_VBUS_DETECT_TCPC
+#define CONFIG_USBC_PPC
+#define CONFIG_USBC_PPC_SBU
+#define CONFIG_USBC_PPC_AOZ1380
+#define CONFIG_USBC_RETIMER_PI3HDX1204
+#define CONFIG_USBC_SS_MUX
+#define CONFIG_USBC_SS_MUX_DFP_ONLY
+#define CONFIG_USBC_VCONN
+#define CONFIG_USBC_VCONN_SWAP
+#define CONFIG_USB_MUX_ANX7440
+#define CONFIG_USB_PD_PORT_MAX_COUNT 2
+#define CONFIG_USBC_PPC_NX20P3483
+#define CONFIG_USBC_RETIMER_PS8818
+#define CONFIG_USB_MUX_RUNTIME_CONFIG
+
+#define GPIO_USB_C0_DP_HPD GPIO_USB_C0_HPD
+#define GPIO_USB_C1_DP_HPD GPIO_USB_C1_HPD
+
+#define CONFIG_IO_EXPANDER
+#define CONFIG_IO_EXPANDER_NCT38XX
#define CONFIG_IO_EXPANDER_PORT_COUNT USBC_PORT_COUNT
-/* USB Type A Features */
+/* TODO(b/176988382): Tune values for guybrush */
+#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */
+#define PD_POWER_SUPPLY_TURN_OFF_DELAY 30000 /* us */
+#define PD_VCONN_SWAP_DELAY 5000 /* us */
+
+#define PD_OPERATING_POWER_MW 15000
+#define PD_MAX_POWER_MW 65000
+#define PD_MAX_CURRENT_MA 3250
+#define PD_MAX_VOLTAGE_MV 20000
+
+/* USB-A config */
+#define USB_PORT_COUNT USBA_PORT_COUNT
+#define CONFIG_USB_PORT_POWER_SMART
+#define CONFIG_USB_PORT_POWER_SMART_CDP_SDP_ONLY
+#define CONFIG_USB_PORT_POWER_SMART_DEFAULT_MODE USB_CHARGE_MODE_CDP
+#define CONFIG_USB_PORT_POWER_SMART_INVERTED
+
+#define GPIO_USB1_ILIM_SEL IOEX_USB_A0_LIMIT_SDP
+#define GPIO_USB2_ILIM_SEL IOEX_USB_A1_LIMIT_SDP_DB
+
+/*
+ * USB ID - This is allocated specifically for Guybrush
+ */
+#define CONFIG_USB_PID 0x504D
+
/* BC 1.2 */
@@ -128,6 +224,14 @@ enum usbc_port {
USBC_PORT_COUNT
};
+/* USB-A ports */
+enum usba_port {
+ USBA_PORT_A0 = 0,
+ USBA_PORT_A1,
+ USBA_PORT_COUNT
+};
+
+/* ADC Channels */
enum adc_channel {
ADC_TEMP_SENSOR_SOC = 0,
ADC_TEMP_SENSOR_CHARGER,
@@ -135,6 +239,7 @@ enum adc_channel {
ADC_CH_COUNT
};
+/* Temp Sensors */
enum temp_sensor_id {
TEMP_SENSOR_SOC = 0,
TEMP_SENSOR_CHARGER,
@@ -143,6 +248,11 @@ enum temp_sensor_id {
TEMP_SENSOR_COUNT
};
+/* Battery Types */
+enum battery_type {
+ BATTERY_TYPE_COUNT,
+};
+
/* Common definition for the USB PD interrupt handlers. */
void tcpc_alert_event(enum gpio_signal signal);
void bc12_interrupt(enum gpio_signal signal);
diff --git a/baseboard/guybrush/build.mk b/baseboard/guybrush/build.mk
index 7e12a54d43..e1ccef48d9 100644
--- a/baseboard/guybrush/build.mk
+++ b/baseboard/guybrush/build.mk
@@ -11,3 +11,4 @@ CHIP_FAMILY:=npcx9
CHIP_VARIANT:=npcx9m3f
baseboard-y=baseboard.o
+baseboard-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o \ No newline at end of file
diff --git a/baseboard/guybrush/usb_pd_policy.c b/baseboard/guybrush/usb_pd_policy.c
new file mode 100644
index 0000000000..213a457593
--- /dev/null
+++ b/baseboard/guybrush/usb_pd_policy.c
@@ -0,0 +1,41 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Shared USB-C policy for Zork boards */
+
+#include "charge_manager.h"
+#include "chipset.h"
+#include "common.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "ec_commands.h"
+#include "gpio.h"
+#include "system.h"
+#include "usb_mux.h"
+#include "usb_pd.h"
+#include "usbc_ppc.h"
+#include "util.h"
+
+int pd_check_vconn_swap(int port)
+{
+ /* TODO */
+ return 0;
+}
+
+void pd_power_supply_reset(int port)
+{
+ /* TODO */
+}
+
+int pd_set_power_supply_ready(int port)
+{
+ /* TODO */
+ return 0;
+}
+
+int board_vbus_source_enabled(int port)
+{
+ return ppc_is_sourcing_vbus(port);
+}