diff options
author | Rob Barnes <robbarnes@google.com> | 2020-12-11 16:28:10 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-01-08 21:20:58 +0000 |
commit | 8c746d55286c75323846e3dea90b13837331110d (patch) | |
tree | 2ab09d03899dadea8f46871ce72df3de7ff8fcc6 /baseboard | |
parent | b1f19242d1cc5ae6d855c889889de76683001c41 (diff) | |
download | chrome-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.tasklist | 4 | ||||
-rw-r--r-- | baseboard/guybrush/baseboard.c | 130 | ||||
-rw-r--r-- | baseboard/guybrush/baseboard.h | 120 | ||||
-rw-r--r-- | baseboard/guybrush/build.mk | 1 | ||||
-rw-r--r-- | baseboard/guybrush/usb_pd_policy.c | 41 |
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); +} |