summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorYH Lin <yueherngl@google.com>2022-11-30 21:45:30 +0000
committerYH Lin <yueherngl@google.com>2022-11-30 21:45:30 +0000
commit184d13e77614be3be5374d3fef9d1edf66ec8687 (patch)
treed0c89ae8814c2ba35c238c6c0644ec6b1602c63a /board
parent19d4d68ffa8b6910d716ab5e1953c41b58614a57 (diff)
parentaa40b859b3a73e5a205bc561c1a29eff38485461 (diff)
downloadchrome-ec-184d13e77614be3be5374d3fef9d1edf66ec8687.tar.gz
Merge remote-tracking branch cros/main into factory-brya-14909.124.B-main
Generated by: util/update_release_branch.py --baseboard brya --relevant_paths_file baseboard/brya/relevant-paths.txt factory-brya-14909.124.B-main Relevant changes: git log --oneline 19d4d68ffa..aa40b859b3 -- baseboard/brya board/agah board/anahera board/banshee board/brya board/crota board/felwinter board/gimble board/kano board/mithrax board/osiris board/primus board/redrix board/taeko board/taniks board/vell board/volmar driver/bc12/pi3usb9201_public.* driver/charger/bq25710.* driver/ppc/nx20p348x.* driver/ppc/syv682x_public.* driver/retimer/bb_retimer_public.* driver/tcpm/nct38xx.* driver/tcpm/ps8xxx_public.* driver/tcpm/tcpci.* include/power/alderlake* include/intel_x86.h power/alderlake* power/intel_x86.c util/getversion.sh e6da633c38 driver: Sort header files 234a87ae2d tcpci: Add FRS enable to driver structure a56be59ccd tcpm_header: add test for tcpm_dump_registers 57b3256963 Rename CONFIG_CHARGER_INPUT_CURRENT to _CHARGER_DEFAULT_CURRENT_LIMIT e420c8ff9a marasov: Modify TypeC and TypeA configuration. 43b53e0045 Add default implementation of board_set_charge_limit b75dc90677 Add CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT f1b563c350 baseboard: Sort header files 7d01b1e58d driver/retimer/ps8818.h: Add I2C ADDR FLAGS 0x30, 0x58, 0x70 ec31407993 Add CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 8f89f69a5b crota: disable lid angle sensor for clamshell BRANCH=None BUG=b:260630630 b:163093572 b:259002141 b:255184961 b:259354679 BUG=b:247100970 b:254328661 TEST=`emerge-brya chromeos-ec` Force-Relevant-Builds: all Change-Id: I0ecfa0e6af68631283c7a9e8f1afb9d827176c62 Signed-off-by: YH Lin <yueherngl@google.com>
Diffstat (limited to 'board')
-rw-r--r--board/adlrvpp_mchp1521/board.h3
-rw-r--r--board/agah/charger_isl9241.c7
-rw-r--r--board/agah/usbc_config.c2
-rw-r--r--board/ambassador/board.c4
-rw-r--r--board/anahera/board.c12
-rw-r--r--board/anahera/board.h2
-rw-r--r--board/anahera/charger.c7
-rw-r--r--board/atlas/board.c32
-rw-r--r--board/atlas/board.h4
-rw-r--r--board/banshee/charger.c7
-rw-r--r--board/beadrix/board.c13
-rw-r--r--board/beetley/board.c13
-rw-r--r--board/beetley/board.h5
-rw-r--r--board/bellis/board.c8
-rw-r--r--board/bellis/board.h1
-rw-r--r--board/blipper/board.c13
-rw-r--r--board/blipper/board.h5
-rw-r--r--board/boten/board.c13
-rw-r--r--board/boten/board.h5
-rw-r--r--board/brask/led.c4
-rw-r--r--board/brya/charger.c7
-rw-r--r--board/bugzzy/board.c13
-rw-r--r--board/bugzzy/board.h13
-rw-r--r--board/burnet/board.c8
-rw-r--r--board/burnet/board.h4
-rw-r--r--board/c2d2/board.h1
-rw-r--r--board/cappy2/board.c13
-rw-r--r--board/cappy2/board.h5
-rw-r--r--board/casta/board.c3
-rw-r--r--board/cerise/board.c8
-rw-r--r--board/cerise/board.h1
-rw-r--r--board/cherry/board.c7
-rw-r--r--board/chocodile_vpdmcu/board.h2
-rw-r--r--board/coachz/board.c9
-rw-r--r--board/coachz/board.h2
-rw-r--r--board/coffeecake/board.h1
-rw-r--r--board/coral/board.c8
-rw-r--r--board/coral/board.h4
-rw-r--r--board/corori/board.c13
-rw-r--r--board/corori/board.h5
-rw-r--r--board/corori2/board.c13
-rw-r--r--board/corori2/board.h8
-rw-r--r--board/cret/board.c13
-rw-r--r--board/cret/board.h5
-rw-r--r--board/crota/board.c2
-rw-r--r--board/crota/board.h2
-rw-r--r--board/crota/charger.c7
-rw-r--r--board/crota/sensors.c21
-rw-r--r--board/damu/board.c8
-rw-r--r--board/damu/board.h1
-rw-r--r--board/dibbi/board.c374
-rw-r--r--board/dibbi/board.h145
-rw-r--r--board/dibbi/build.mk14
-rw-r--r--board/dibbi/ec.tasklist16
-rw-r--r--board/dibbi/gpio.inc142
-rw-r--r--board/dibbi/led.c38
-rw-r--r--board/dibbi/usb_pd_policy.c69
-rw-r--r--board/dibbi/vif_override.xml3
-rw-r--r--board/dingdong/board.h1
-rw-r--r--board/discovery-stm32f072/board.h1
-rw-r--r--board/discovery/board.h11
-rw-r--r--board/dojo/board.c7
-rw-r--r--board/dooly/board.c4
-rw-r--r--board/drawcia/board.c10
-rw-r--r--board/drawcia_riscv/board.c10
-rw-r--r--board/driblee/board.c13
-rw-r--r--board/driblee/board.h5
-rw-r--r--board/drobit/board.c14
-rw-r--r--board/drobit/board.h1
-rw-r--r--board/eldrid/board.c9
-rw-r--r--board/eldrid/board.h2
-rw-r--r--board/elm/board.c9
-rw-r--r--board/elm/board.h5
-rw-r--r--board/eve/board.c8
-rw-r--r--board/eve/board.h4
-rw-r--r--board/ezkinil/board.c13
-rw-r--r--board/ezkinil/board.h3
-rw-r--r--board/felwinter/board.h1
-rw-r--r--board/felwinter/charger_isl9241.c8
-rw-r--r--board/fennel/board.c8
-rw-r--r--board/fennel/board.h1
-rw-r--r--board/fizz/board.c4
-rw-r--r--board/fluffy/board.h1
-rw-r--r--board/fusb307bgevb/board.h1
-rw-r--r--board/gaelin/board.c50
-rw-r--r--board/gaelin/board.h61
-rw-r--r--board/gaelin/build.mk1
-rw-r--r--board/gaelin/ec.tasklist5
-rw-r--r--board/gaelin/fans.c12
-rw-r--r--board/gaelin/gpio.inc91
-rw-r--r--board/gaelin/i2c.c52
-rw-r--r--board/gaelin/led.c4
-rw-r--r--board/gaelin/pwm.c4
-rw-r--r--board/gaelin/thermal.c140
-rw-r--r--board/gaelin/usbc_config.c289
-rw-r--r--board/gaelin/usbc_config.h9
-rw-r--r--board/galtic/board.c12
-rw-r--r--board/gelarshie/board.c9
-rw-r--r--board/gelarshie/board.h4
-rw-r--r--board/gimble/board.c13
-rw-r--r--board/gimble/board.h2
-rw-r--r--board/gimble/charger.c7
-rw-r--r--board/gooey/board.c13
-rw-r--r--board/gooey/board.h5
-rw-r--r--board/haboki/board.c10
-rw-r--r--board/hammer/board.h3
-rw-r--r--board/hatch_fp/board.h1
-rw-r--r--board/hatch_fp/build.mk4
-rw-r--r--board/herobrine/usbc_config.c8
-rw-r--r--board/hoho/board.h1
-rw-r--r--board/homestar/board.c9
-rw-r--r--board/homestar/board.h3
-rw-r--r--board/host/charger.c3
-rw-r--r--board/hyperdebug/board.c22
-rw-r--r--board/hyperdebug/board.h1
-rw-r--r--board/icarus/board.c8
-rw-r--r--board/icarus/board.h1
-rw-r--r--board/jacuzzi/board.c8
-rw-r--r--board/jacuzzi/board.h1
-rw-r--r--board/kano/charger.c7
-rw-r--r--board/kappa/board.c8
-rw-r--r--board/kappa/board.h1
-rw-r--r--board/kappa/led.c1
-rw-r--r--board/kingoftown/usbc_config.c8
-rw-r--r--board/kinox/board.c4
-rw-r--r--board/kracko/board.c10
-rw-r--r--board/kuldax/led.c4
-rw-r--r--board/kuldax/sensors.c6
-rw-r--r--board/lalala/board.c13
-rw-r--r--board/lalala/board.h5
-rw-r--r--board/lantis/board.c12
-rw-r--r--board/lazor/usbc_config.c8
-rw-r--r--board/lisbon/led.c4
-rw-r--r--board/madoo/board.c14
-rw-r--r--board/madoo/board.h5
-rw-r--r--board/magolor/board.c15
-rw-r--r--board/magolor/board.h5
-rw-r--r--board/makomo/board.c8
-rw-r--r--board/makomo/board.h1
-rw-r--r--board/marasov/battery.c77
-rw-r--r--board/marasov/board.c52
-rw-r--r--board/marasov/board.h217
-rw-r--r--board/marasov/build.mk25
-rw-r--r--board/marasov/charger.c83
-rw-r--r--board/marasov/ec.tasklist26
-rw-r--r--board/marasov/fans.c89
-rw-r--r--board/marasov/fw_config.c46
-rw-r--r--board/marasov/fw_config.h52
-rw-r--r--board/marasov/generated-gpio.inc127
-rw-r--r--board/marasov/gpio.inc38
-rw-r--r--board/marasov/i2c.c81
-rw-r--r--board/marasov/keyboard.c25
-rw-r--r--board/marasov/led.c101
-rw-r--r--board/marasov/pwm.c38
-rw-r--r--board/marasov/sensors.c187
-rw-r--r--board/marasov/usbc_config.c348
-rw-r--r--board/marasov/usbc_config.h17
-rw-r--r--board/marasov/vif_override.xml148
-rw-r--r--board/marzipan/board.c8
-rw-r--r--board/mchpevb1/board.c15
-rw-r--r--board/mchpevb1/board.h3
-rw-r--r--board/metaknight/board.c13
-rw-r--r--board/metaknight/board.h5
-rw-r--r--board/mithrax/board.h1
-rw-r--r--board/mithrax/charger_isl9241.c8
-rw-r--r--board/moli/board.c149
-rw-r--r--board/moli/board.h18
-rw-r--r--board/moli/build.mk1
-rw-r--r--board/moli/fw_config.c73
-rw-r--r--board/moli/fw_config.h53
-rw-r--r--board/moli/gpio.inc12
-rw-r--r--board/moli/led.c4
-rw-r--r--board/mrbland/board.c8
-rw-r--r--board/mrbland/board.h2
-rw-r--r--board/munna/board.c8
-rw-r--r--board/munna/board.h1
-rw-r--r--board/nami/board.c7
-rw-r--r--board/nami/board.h3
-rw-r--r--board/nautilus/board.c20
-rw-r--r--board/nautilus/board.h4
-rw-r--r--board/nocturne/board.c13
-rw-r--r--board/nocturne/board.h11
-rw-r--r--board/nocturne_fp/board.h1
-rw-r--r--board/nocturne_fp/build.mk4
-rw-r--r--board/nucleo-dartmonkey/build.mk2
-rw-r--r--board/nucleo-f072rb/board.h1
-rw-r--r--board/nucleo-f411re/board.h1
-rw-r--r--board/nucleo-f412zg/build.mk2
-rw-r--r--board/nucleo-g431rb/board.h1
-rw-r--r--board/nucleo-h743zi/build.mk2
-rw-r--r--board/oak/board.c7
-rw-r--r--board/oak/board.h5
-rw-r--r--board/osiris/charger.c7
-rw-r--r--board/pazquel/board.c8
-rw-r--r--board/pdeval-stm32f072/board.h1
-rw-r--r--board/pico/board.c8
-rw-r--r--board/pico/board.h1
-rw-r--r--board/pirika/board.c14
-rw-r--r--board/plankton/board.h1
-rw-r--r--board/polyberry/board.h1
-rw-r--r--board/pompom/board.c51
-rw-r--r--board/pompom/board.h3
-rw-r--r--board/poppy/board.c9
-rw-r--r--board/poppy/board.h3
-rw-r--r--board/primus/board.c7
-rw-r--r--board/primus/charger.c7
-rw-r--r--board/prism/board.h1
-rw-r--r--board/puff/board.c4
-rw-r--r--board/quackingstick/board.c8
-rw-r--r--board/quackingstick/board.h2
-rw-r--r--board/rainier/board.c4
-rw-r--r--board/rainier/board.h1
-rw-r--r--board/rammus/board.c20
-rw-r--r--board/rammus/board.h4
-rw-r--r--board/redrix/charger.c7
-rw-r--r--board/reef/board.c8
-rw-r--r--board/reef/board.h4
-rw-r--r--board/reef_it8320/board.c8
-rw-r--r--board/reef_it8320/board.h4
-rw-r--r--board/reef_mchp/board.c8
-rw-r--r--board/reef_mchp/board.h4
-rw-r--r--board/sasuke/board.c13
-rw-r--r--board/sasuke/board.h5
-rw-r--r--board/sasukette/board.c13
-rw-r--r--board/sasukette/board.h5
-rw-r--r--board/scarlet/board.c7
-rw-r--r--board/scarlet/board.h4
-rw-r--r--board/servo_micro/board.h1
-rw-r--r--board/servo_v4/board.h3
-rw-r--r--board/servo_v4/usb_pd_policy.c4
-rw-r--r--board/servo_v4p1/board.h1
-rw-r--r--board/servo_v4p1/usb_pd_policy.c4
-rw-r--r--board/shotzo/board.c4
-rw-r--r--board/stern/board.c8
-rw-r--r--board/stern/board.h1
-rw-r--r--board/stm32f446e-eval/board.h1
-rw-r--r--board/stm32l476g-eval/board.h1
-rw-r--r--board/storo/board.c13
-rw-r--r--board/storo/board.h5
-rw-r--r--board/sweetberry/board.h1
-rw-r--r--board/taeko/board.c13
-rw-r--r--board/taeko/board.h3
-rw-r--r--board/taeko/charger.c7
-rw-r--r--board/taniks/board.c13
-rw-r--r--board/taniks/board.h3
-rw-r--r--board/taniks/charger.c7
-rw-r--r--board/terrador/board.c1
-rw-r--r--board/tglrvp_ish/board.h5
-rw-r--r--board/tigertail/board.h1
-rw-r--r--board/trogdor/usbc_config.c8
-rw-r--r--board/twinkie/board.h3
-rw-r--r--board/vell/board.h2
-rw-r--r--board/vell/charger.c12
-rw-r--r--board/vilboz/board.c13
-rw-r--r--board/vilboz/board.h1
-rw-r--r--board/volmar/charger.c7
-rw-r--r--board/waddledee/board.c12
-rw-r--r--board/waddledoo/board.c13
-rw-r--r--board/waddledoo/board.h9
-rw-r--r--board/waddledoo2/board.c13
-rw-r--r--board/waddledoo2/board.h5
-rw-r--r--board/wheelie/board.c12
-rw-r--r--board/willow/board.c8
-rw-r--r--board/willow/board.h1
-rw-r--r--board/woomax/board.c2
-rw-r--r--board/wormdingler/board.c9
-rw-r--r--board/wormdingler/board.h2
267 files changed, 3578 insertions, 1479 deletions
diff --git a/board/adlrvpp_mchp1521/board.h b/board/adlrvpp_mchp1521/board.h
index bcd46acf25..645bfc0598 100644
--- a/board/adlrvpp_mchp1521/board.h
+++ b/board/adlrvpp_mchp1521/board.h
@@ -140,6 +140,9 @@
/* Use internal silicon 32KHz oscillator */
#undef CONFIG_CLOCK_SRC_EXTERNAL
+/* Free up flash space. */
+#undef CONFIG_CONSOLE_CMDHELP
+
#ifndef __ASSEMBLER__
enum adlrvp_i2c_channel {
diff --git a/board/agah/charger_isl9241.c b/board/agah/charger_isl9241.c
index 47e8261f78..d5f3d1a0b4 100644
--- a/board/agah/charger_isl9241.c
+++ b/board/agah/charger_isl9241.c
@@ -196,13 +196,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
static const struct charge_port_info bj_power = {
/* 150W (also default) */
.voltage = 19500,
diff --git a/board/agah/usbc_config.c b/board/agah/usbc_config.c
index a8bad0f121..d078ef59ac 100644
--- a/board/agah/usbc_config.c
+++ b/board/agah/usbc_config.c
@@ -149,7 +149,7 @@ const static struct usb_mux_chain usbc2_ps8818 = {
&(const struct usb_mux){
.usb_port = USBC_PORT_C2,
.i2c_port = I2C_PORT_USB_C2_TCPC,
- .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS,
+ .i2c_addr_flags = PS8818_I2C_ADDR0_FLAGS,
.driver = &ps8818_usb_retimer_driver,
.board_set = &board_ps8818_mux_set,
},
diff --git a/board/ambassador/board.c b/board/ambassador/board.c
index f2bc7557ec..3eff9215bc 100644
--- a/board/ambassador/board.c
+++ b/board/ambassador/board.c
@@ -88,8 +88,8 @@ uint16_t tcpc_get_alert_status(void)
}
/* Called when the charge manager has switched to a new port. */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/anahera/board.c b/board/anahera/board.c
index e087d629a7..cd9eb30870 100644
--- a/board/anahera/board.c
+++ b/board/anahera/board.c
@@ -64,15 +64,3 @@ enum battery_present battery_hw_present(void)
/* The GPIO is low when the battery is physically present */
return gpio_get_level(GPIO_EC_BATT_PRES_ODL) ? BP_NO : BP_YES;
}
-
-__override void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- /*
- * Limit the input current to 95% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/anahera/board.h b/board/anahera/board.h
index 18360171e3..82ba5a4e1c 100644
--- a/board/anahera/board.h
+++ b/board/anahera/board.h
@@ -33,6 +33,8 @@
#define CONFIG_USB_PORT_POWER_DUMB
#define CONFIG_USBC_RETIMER_PS8811
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* USB Type C and USB PD defines */
#define CONFIG_USB_PD_REQUIRE_AP_MODE_ENTRY
diff --git a/board/anahera/charger.c b/board/anahera/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/anahera/charger.c
+++ b/board/anahera/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/atlas/board.c b/board/atlas/board.c
index 6fbbb64b16..d2562d43d3 100644
--- a/board/atlas/board.c
+++ b/board/atlas/board.c
@@ -531,39 +531,15 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-/*
- * Limit the input current to 95% negotiated limit,
- * to account for the charger chip margin.
- */
-
-static int charger_derate(int current)
-{
- return current * 95 / 100;
-}
-
static void board_charger_init(void)
{
- charger_set_input_current_limit(CHARGER_SOLO,
- charger_derate(PD_MAX_CURRENT_MA));
+ charger_set_input_current_limit(
+ CHARGER_SOLO,
+ PD_MAX_CURRENT_MA *
+ (100 - CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT) / 100);
}
DECLARE_HOOK(HOOK_INIT, board_charger_init, HOOK_PRIO_DEFAULT);
-/**
- * Set the charge limit based upon desired maximum.
- *
- * @param port Port number.
- * @param supplier Charge supplier type.
- * @param charge_ma Desired charge limit (mA).
- * @param charge_mv Negotiated charge voltage (mV).
- */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = charger_derate(charge_ma);
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
static void board_chipset_suspend(void)
{
gpio_set_level(GPIO_KBD_BL_EN, 0);
diff --git a/board/atlas/board.h b/board/atlas/board.h
index 9718ab7cdd..3dbce640bb 100644
--- a/board/atlas/board.h
+++ b/board/atlas/board.h
@@ -77,7 +77,9 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGER_PSYS
#define CONFIG_CHARGER_PSYS_READ
diff --git a/board/banshee/charger.c b/board/banshee/charger.c
index 88f5b85a41..7a16fcd5cb 100644
--- a/board/banshee/charger.c
+++ b/board/banshee/charger.c
@@ -79,10 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/beadrix/board.c b/board/beadrix/board.c
index 5cea32f90c..24c6cb960e 100644
--- a/board/beadrix/board.c
+++ b/board/beadrix/board.c
@@ -474,19 +474,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-/* Vconn control for integrated ITE TCPC */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * TODO(b/151955431): Characterize the input current limit in case a
- * scaling needs to be applied here
- */
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > CONFIG_USB_PD_PORT_MAX_COUNT)
diff --git a/board/beetley/board.c b/board/beetley/board.c
index f6b1f1008c..89a1d6b13f 100644
--- a/board/beetley/board.c
+++ b/board/beetley/board.c
@@ -384,19 +384,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/beetley/board.h b/board/beetley/board.h
index a70ee73ebb..b05b8e2eb5 100644
--- a/board/beetley/board.h
+++ b/board/beetley/board.h
@@ -27,6 +27,11 @@
/* Charger */
#define CONFIG_CHARGE_RAMP_HW
#define CONFIG_CHARGER_RAA489000
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define PD_MAX_VOLTAGE_MV 20000
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
#define CONFIG_CHARGER_SENSE_RESISTOR 10
diff --git a/board/bellis/board.c b/board/bellis/board.c
index e03ae1c36c..3acdb66e4f 100644
--- a/board/bellis/board.c
+++ b/board/bellis/board.c
@@ -236,14 +236,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/bellis/board.h b/board/bellis/board.h
index d502c4c5ef..0741de5dc7 100644
--- a/board/bellis/board.h
+++ b/board/bellis/board.h
@@ -40,6 +40,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/blipper/board.c b/board/blipper/board.c
index 766f55579c..ce1bc27700 100644
--- a/board/blipper/board.c
+++ b/board/blipper/board.c
@@ -536,19 +536,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/blipper/board.h b/board/blipper/board.h
index 379a92a007..896ebec76a 100644
--- a/board/blipper/board.h
+++ b/board/blipper/board.h
@@ -29,6 +29,11 @@
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* DAC for PSYS */
#define CONFIG_DAC
diff --git a/board/boten/board.c b/board/boten/board.c
index c47b9e46f0..fc70b11ada 100644
--- a/board/boten/board.c
+++ b/board/boten/board.c
@@ -244,19 +244,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/boten/board.h b/board/boten/board.h
index ec5d25ff9f..2e607f73c1 100644
--- a/board/boten/board.h
+++ b/board/boten/board.h
@@ -32,6 +32,11 @@
*/
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* DAC for PSYS */
#define CONFIG_DAC
diff --git a/board/brask/led.c b/board/brask/led.c
index 0a57994ca0..b86a291625 100644
--- a/board/brask/led.c
+++ b/board/brask/led.c
@@ -249,8 +249,8 @@ int led_set_brightness(enum ec_led_id id, const uint8_t *brightness)
else
return set_color(id, LED_OFF, 0);
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/brya/charger.c b/board/brya/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/brya/charger.c
+++ b/board/brya/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/bugzzy/board.c b/board/bugzzy/board.c
index 5a28fb2c25..443f5f6d2f 100644
--- a/board/bugzzy/board.c
+++ b/board/bugzzy/board.c
@@ -393,19 +393,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/bugzzy/board.h b/board/bugzzy/board.h
index 707314d02a..45bdfdc9f3 100644
--- a/board/bugzzy/board.h
+++ b/board/bugzzy/board.h
@@ -43,6 +43,11 @@
#undef CONFIG_CHARGER_SINGLE_CHIP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_BATTERY_CHECK_CHARGE_TEMP_LIMITS
#define CONFIG_CHARGER_PROFILE_OVERRIDE
@@ -183,6 +188,14 @@
#define CONFIG_TABLET_MODE
#define CONFIG_TABLET_MODE_SWITCH
+/* On-body detection */
+#define CONFIG_BODY_DETECTION
+#define CONFIG_BODY_DETECTION_SENSOR BASE_ACCEL
+#define CONFIG_BODY_DETECTION_VAR_NOISE_FACTOR 150 /* % */
+#define CONFIG_GESTURE_DETECTION
+#define CONFIG_GESTURE_DETECTION_MASK BIT(CONFIG_BODY_DETECTION_SENSOR)
+#define CONFIG_GESTURE_HOST_DETECTION
+
/* LIS2DS Lid accel */
#define CONFIG_ACCEL_LIS2DS
diff --git a/board/burnet/board.c b/board/burnet/board.c
index aa378ca289..a89250ae34 100644
--- a/board/burnet/board.c
+++ b/board/burnet/board.c
@@ -222,14 +222,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/burnet/board.h b/board/burnet/board.h
index 6870ccc2d2..5199ae4aaf 100644
--- a/board/burnet/board.h
+++ b/board/burnet/board.h
@@ -8,6 +8,9 @@
#ifndef __CROS_EC_BOARD_H
#define __CROS_EC_BOARD_H
+/* Free up flash space. */
+#undef CONFIG_CMD_KEYBOARD
+
#define VARIANT_KUKUI_JACUZZI
#define VARIANT_KUKUI_BATTERY_SMART
#define VARIANT_KUKUI_CHARGER_ISL9238
@@ -28,6 +31,7 @@
#define CONFIG_BATTERY_COUNT 1
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_BC12_DETECT_PI3USB9201
diff --git a/board/c2d2/board.h b/board/c2d2/board.h
index 6b1ac69efd..c1b450f482 100644
--- a/board/c2d2/board.h
+++ b/board/c2d2/board.h
@@ -34,7 +34,6 @@
#undef CONFIG_UART_RX_DMA
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
/* USB Configuration */
diff --git a/board/cappy2/board.c b/board/cappy2/board.c
index de651ac874..7956ae77f5 100644
--- a/board/cappy2/board.c
+++ b/board/cappy2/board.c
@@ -229,19 +229,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/cappy2/board.h b/board/cappy2/board.h
index b21a20d6e5..8f503b1bcc 100644
--- a/board/cappy2/board.h
+++ b/board/cappy2/board.h
@@ -39,6 +39,11 @@
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* Keyboard */
#undef CONFIG_PWM_KBLIGHT
diff --git a/board/casta/board.c b/board/casta/board.c
index 512a7c224b..2ae65c7d86 100644
--- a/board/casta/board.c
+++ b/board/casta/board.c
@@ -172,7 +172,8 @@ static void set_input_limit_on_ac_removal(void)
if (get_cbi_ssfc_charger() != SSFC_CHARGER_BQ25710)
return;
- charger_set_input_current_limit(0, CONFIG_CHARGER_INPUT_CURRENT);
+ charger_set_input_current_limit(0,
+ CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT);
}
DECLARE_HOOK(HOOK_AC_CHANGE, set_input_limit_on_ac_removal, HOOK_PRIO_DEFAULT);
diff --git a/board/cerise/board.c b/board/cerise/board.c
index e3fa60c76a..9b214f2dae 100644
--- a/board/cerise/board.c
+++ b/board/cerise/board.c
@@ -236,14 +236,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/cerise/board.h b/board/cerise/board.h
index 41d86b956d..d2c58e9f6e 100644
--- a/board/cerise/board.h
+++ b/board/cerise/board.h
@@ -28,6 +28,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/cherry/board.c b/board/cherry/board.c
index c2ad54acb2..f8700404ed 100644
--- a/board/cherry/board.c
+++ b/board/cherry/board.c
@@ -262,13 +262,6 @@ const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = {
},
};
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
/* Initialize board. */
static void board_init(void)
{
diff --git a/board/chocodile_vpdmcu/board.h b/board/chocodile_vpdmcu/board.h
index ede07dd9a0..0e0ff70ab8 100644
--- a/board/chocodile_vpdmcu/board.h
+++ b/board/chocodile_vpdmcu/board.h
@@ -55,7 +55,6 @@
#undef CONFIG_LID_SWITCH
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_LTO
-#define CONFIG_STM_HWTIMER32
#undef CONFIG_TASK_PROFILING
#undef CONFIG_UART_TX_BUF_SIZE
#undef CONFIG_UART_TX_DMA
@@ -72,6 +71,7 @@
#define CONFIG_USB_PD_DECODE_SOP
#define CONFIG_USB_PD_DUAL_ROLE
#define CONFIG_USB_PD_INTERNAL_COMP
+#undef CONFIG_USB_DPM_SM
#define CONFIG_VBOOT_HASH
#define CONFIG_WATCHDOG
#undef CONFIG_WATCHDOG_HELP
diff --git a/board/coachz/board.c b/board/coachz/board.c
index 1e1ed2ab71..4863cd94c9 100644
--- a/board/coachz/board.c
+++ b/board/coachz/board.c
@@ -513,6 +513,7 @@ void board_tcpc_init(void)
/* 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);
@@ -683,8 +684,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -696,9 +697,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/coachz/board.h b/board/coachz/board.h
index c332b98c34..70594d3efa 100644
--- a/board/coachz/board.h
+++ b/board/coachz/board.h
@@ -40,6 +40,8 @@
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* BC 1.2 Charger */
#define CONFIG_BC12_DETECT_PI3USB9201
diff --git a/board/coffeecake/board.h b/board/coffeecake/board.h
index 966a5b2516..9c7a2643d0 100644
--- a/board/coffeecake/board.h
+++ b/board/coffeecake/board.h
@@ -18,7 +18,6 @@
#define CONFIG_UART_CONSOLE 1
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_ADC
#define CONFIG_BOARD_PRE_INIT
#define CONFIG_CMD_CHARGER
diff --git a/board/coral/board.c b/board/coral/board.c
index c63a2f6ddc..a2a99ed42b 100644
--- a/board/coral/board.c
+++ b/board/coral/board.c
@@ -554,8 +554,8 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Enable charging trigger by BC1.2 detection */
int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP ||
@@ -566,9 +566,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
if (bd9995x_bc12_enable_charging(port, bc12_enable))
return;
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/**
diff --git a/board/coral/board.h b/board/coral/board.h
index bc6226152c..cea83ef4a5 100644
--- a/board/coral/board.h
+++ b/board/coral/board.h
@@ -25,6 +25,7 @@
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define BD9995X_IOUT_GAIN_SELECT \
BD9995X_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_20V
@@ -59,7 +60,8 @@
#define CONFIG_CHARGER_BD9995X
#define CONFIG_CHARGER_BD9995X_CHGEN
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#define CONFIG_CHARGER_MAINTAIN_VBAT
#undef CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON
#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1
diff --git a/board/corori/board.c b/board/corori/board.c
index 4fe1e01fec..52ef76a19c 100644
--- a/board/corori/board.c
+++ b/board/corori/board.c
@@ -311,19 +311,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/corori/board.h b/board/corori/board.h
index 75e0e4eec6..646b14227d 100644
--- a/board/corori/board.h
+++ b/board/corori/board.h
@@ -28,6 +28,11 @@
#undef CONFIG_CMD_CHARGER_DUMP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* LED defines */
#define CONFIG_LED_COMMON
diff --git a/board/corori2/board.c b/board/corori2/board.c
index efebc3af2e..e3103f65ff 100644
--- a/board/corori2/board.c
+++ b/board/corori2/board.c
@@ -454,19 +454,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/corori2/board.h b/board/corori2/board.h
index 3483d96f88..c62cade1c3 100644
--- a/board/corori2/board.h
+++ b/board/corori2/board.h
@@ -20,6 +20,7 @@
/* Save some flash space */
#define CONFIG_CHIP_INIT_ROM_REGION
#undef CONFIG_CONSOLE_CMDHELP
+#undef CONFIG_CONSOLE_HISTORY
#define CONFIG_DEBUG_ASSERT_BRIEF
#define CONFIG_USB_PD_DEBUG_LEVEL 0
@@ -30,6 +31,8 @@
#undef CONFIG_CMD_ACCELSPOOF
#undef CONFIG_CMD_BATTFAKE
#undef CONFIG_CMD_GETTIME
+#undef CONFIG_CMD_I2C_SCAN
+#undef CONFIG_CMD_I2C_XFER
#undef CONFIG_CMD_MEM
/* Battery */
@@ -47,6 +50,11 @@
#undef CONFIG_CHARGER_SINGLE_CHIP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/*
* GPIO for C1 interrupts, for baseboard use
diff --git a/board/cret/board.c b/board/cret/board.c
index c9c34d6d32..3c56757ef7 100644
--- a/board/cret/board.c
+++ b/board/cret/board.c
@@ -304,19 +304,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/cret/board.h b/board/cret/board.h
index 2080185c7c..eb6b261cdf 100644
--- a/board/cret/board.h
+++ b/board/cret/board.h
@@ -34,6 +34,11 @@
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CHARGING_CURRENT_1100MA 1100
diff --git a/board/crota/board.c b/board/crota/board.c
index cb3e79ee56..a12ef75d30 100644
--- a/board/crota/board.c
+++ b/board/crota/board.c
@@ -51,7 +51,7 @@ static void board_chipset_suspend(void)
}
DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, board_chipset_suspend, HOOK_PRIO_DEFAULT);
-static bool board_is_convertible(void)
+bool board_is_convertible(void)
{
/*
* convertible = 0
diff --git a/board/crota/board.h b/board/crota/board.h
index 3d79e190bd..d652a93ad0 100644
--- a/board/crota/board.h
+++ b/board/crota/board.h
@@ -288,6 +288,8 @@ enum thermal_cfg_table { LAPTOP_MODE, TABLET_MODE, THERMAL_CFG_TABLE_COUNT };
void motion_interrupt(enum gpio_signal signal);
+bool board_is_convertible(void);
+
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BOARD_H */
diff --git a/board/crota/charger.c b/board/crota/charger.c
index c7dcf7b0c1..9f044790e0 100644
--- a/board/crota/charger.c
+++ b/board/crota/charger.c
@@ -79,10 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/crota/sensors.c b/board/crota/sensors.c
index 79d2492060..7d60234dc3 100644
--- a/board/crota/sensors.c
+++ b/board/crota/sensors.c
@@ -10,9 +10,11 @@
#include "driver/accel_lis2dw12.h"
#include "driver/accelgyro_bmi_common.h"
#include "driver/accelgyro_lsm6dso.h"
+#include "fw_config.h"
#include "gpio.h"
#include "hooks.h"
#include "motion_sense.h"
+#include "tablet_mode.h"
#include "temp_sensor.h"
#include "thermal.h"
#include "temp_sensor/thermistor.h"
@@ -209,10 +211,29 @@ static void board_update_motion_sensor_config(void)
} else {
ccprints("BASE IMU is LSM6DSO");
}
+
+ if (!board_is_convertible()) {
+ tablet_set_mode(0, TABLET_TRIGGER_LID);
+ gmr_tablet_switch_disable();
+ /* Make sure tablet mode detection is not trigger by mistake. */
+ gpio_set_flags(GPIO_TABLET_MODE_L, GPIO_INPUT | GPIO_PULL_UP);
+ /*
+ * Make sure we don't even try to initialize the lid accel, it
+ * is not present.
+ */
+ motion_sensors[LID_ACCEL].active_mask = 0;
+ gpio_set_flags(GPIO_EC_ACCEL_INT_R_L,
+ GPIO_INPUT | GPIO_PULL_UP);
+ }
}
DECLARE_HOOK(HOOK_CHIPSET_STARTUP, board_update_motion_sensor_config,
HOOK_PRIO_INIT_I2C + 1);
+__override int sensor_board_is_lid_angle_available(void)
+{
+ return board_is_convertible();
+}
+
static void baseboard_sensors_init(void)
{
/* Enable gpio interrupt for lid accel sensor */
diff --git a/board/damu/board.c b/board/damu/board.c
index ddc8885e22..717276e768 100644
--- a/board/damu/board.c
+++ b/board/damu/board.c
@@ -236,14 +236,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/damu/board.h b/board/damu/board.h
index 49875e6883..16e03cf45c 100644
--- a/board/damu/board.h
+++ b/board/damu/board.h
@@ -28,6 +28,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/dibbi/board.c b/board/dibbi/board.c
new file mode 100644
index 0000000000..9b3207859a
--- /dev/null
+++ b/board/dibbi/board.c
@@ -0,0 +1,374 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Dibbi board-specific configuration */
+
+#include "adc_chip.h"
+#include "button.h"
+#include "charge_manager.h"
+#include "charge_state_v2.h"
+#include "charger.h"
+#include "driver/temp_sensor/thermistor.h"
+#include "driver/tcpm/it83xx_pd.h"
+#include "driver/usb_mux/it5205.h"
+#include "gpio.h"
+#include "hooks.h"
+#include "intc.h"
+#include "power.h"
+#include "power_button.h"
+#include "pwm.h"
+#include "pwm_chip.h"
+#include "switch.h"
+#include "system.h"
+#include "tablet_mode.h"
+#include "task.h"
+#include "tcpm/tcpci.h"
+#include "temp_sensor.h"
+#include "uart.h"
+#include "usb_charge.h"
+#include "usb_mux.h"
+#include "usb_pd.h"
+#include "usb_pd_tcpm.h"
+
+#define CPRINTUSB(format, args...) cprints(CC_USBCHARGE, format, ##args)
+
+/* ADC channels */
+const struct adc_t adc_channels[] = {
+ [ADC_VSNS_PP3300_A] = { .name = "PP3300_A_PGOOD",
+ .factor_mul = ADC_MAX_MVOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ .channel = CHIP_ADC_CH0 },
+ [ADC_TEMP_SENSOR_1] = { .name = "TEMP_SENSOR1",
+ .factor_mul = ADC_MAX_MVOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ .channel = CHIP_ADC_CH2 },
+ [ADC_TEMP_SENSOR_2] = { .name = "TEMP_SENSOR2",
+ .factor_mul = ADC_MAX_MVOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ .channel = CHIP_ADC_CH3 },
+ [ADC_PPVAR_PWR_IN_IMON] = { .name = "ADC_PPVAR_PWR_IN_IMON",
+ .factor_mul = ADC_MAX_MVOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ .channel = CHIP_ADC_CH15 },
+ [ADC_SNS_PPVAR_PWR_IN] = { .name = "ADC_SNS_PPVAR_PWR_IN",
+ .factor_mul = ADC_MAX_MVOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ .channel = CHIP_ADC_CH16 },
+};
+BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
+
+/* TCPCs */
+const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = {
+ {
+ .bus_type = EC_BUS_TYPE_EMBEDDED,
+ .drv = &it83xx_tcpm_drv,
+ },
+};
+
+/* USB Muxes */
+const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = {
+ {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = 0,
+ .i2c_port = I2C_PORT_USB_C0,
+ .i2c_addr_flags = IT5205_I2C_ADDR1_FLAGS,
+ .driver = &it5205_usb_mux_driver,
+ },
+ },
+};
+
+/* USB-A ports */
+const int usb_port_enable[USB_PORT_COUNT] = {
+ GPIO_EN_USB_A0_VBUS,
+ GPIO_EN_USB_A1_VBUS,
+ GPIO_EN_USB_A2_VBUS,
+};
+
+/* PWM channels. Must be in the exactly same order as in enum pwm_channel. */
+const struct pwm_t pwm_channels[] = {
+ [PWM_CH_LED_RED] = {
+ .channel = 1,
+ .flags = PWM_CONFIG_DSLEEP | PWM_CONFIG_ACTIVE_LOW,
+ .freq_hz = 2400,
+ },
+
+ [PWM_CH_LED_GREEN] = {
+ .channel = 2,
+ .flags = PWM_CONFIG_DSLEEP | PWM_CONFIG_ACTIVE_LOW,
+ .freq_hz = 2400,
+ },
+
+ [PWM_CH_LED_BLUE] = {
+ .channel = 3,
+ .flags = PWM_CONFIG_DSLEEP | PWM_CONFIG_ACTIVE_LOW,
+ .freq_hz = 2400,
+ }
+
+};
+BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT);
+
+/* Thermistors */
+const struct temp_sensor_t temp_sensors[] = {
+ [TEMP_SENSOR_1] = { .name = "Memory",
+ .type = TEMP_SENSOR_TYPE_BOARD,
+ .read = get_temp_3v3_51k1_47k_4050b,
+ .idx = ADC_TEMP_SENSOR_1 },
+ [TEMP_SENSOR_2] = { .name = "Ambient",
+ .type = TEMP_SENSOR_TYPE_BOARD,
+ .read = get_temp_3v3_51k1_47k_4050b,
+ .idx = ADC_TEMP_SENSOR_2 },
+};
+BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT);
+
+static void c0_ccsbu_ovp_interrupt(enum gpio_signal s)
+{
+ cprints(CC_USBPD, "C0: CC OVP, SBU OVP, or thermal event");
+ pd_handle_cc_overvoltage(0);
+}
+
+void board_init(void)
+{
+ int on;
+
+ gpio_enable_interrupt(GPIO_USB_C0_CCSBU_OVP_ODL);
+ gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT_L);
+ gpio_enable_interrupt(GPIO_USBC_ADP_PRESENT_L);
+
+ /* Turn on 5V if the system is on, otherwise turn it off */
+ on = chipset_in_state(CHIPSET_STATE_ON | CHIPSET_STATE_ANY_SUSPEND |
+ CHIPSET_STATE_SOFT_OFF);
+ board_power_5v_enable(on);
+}
+DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
+
+void board_reset_pd_mcu(void)
+{
+ /*
+ * Nothing to do. TCPC C0 is internal.
+ */
+}
+
+__override void board_power_5v_enable(int enable)
+{
+ /*
+ * Mainboard 5V regulator activated by GPIO.
+ * USB-A ports are activated by usb_port_power_dumb.
+ */
+ gpio_set_level(GPIO_EN_PP5000, !!enable);
+}
+
+void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
+ int charge_mv)
+{
+ int insufficient_power =
+ (charge_ma * charge_mv) <
+ (CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON * 1000);
+ /* TODO(b/259467280) blink LED on error */
+ (void)insufficient_power;
+}
+
+int board_vbus_source_enabled(int port)
+{
+ if (port != CHARGE_PORT_TYPEC0)
+ return 0;
+ return gpio_get_level(GPIO_EN_USB_C0_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 ilim3A;
+
+ if (port < 0 || port > CONFIG_USB_PD_PORT_MAX_COUNT)
+ return;
+
+ /* Switch between 1.5A and 3A ILIM values */
+ ilim3A = (rp == TYPEC_RP_3A0);
+ gpio_set_level(GPIO_USB_C0_VBUS_ILIM, ilim3A);
+}
+
+/******************************************************************************/
+/*
+ * Since dibbi has no battery, it must source all of its power from either
+ * USB-C or the barrel jack (preferred). Fizz operates in continuous safe
+ * mode (charge_manager_leave_safe_mode() will never be called), which
+ * modifies port selection as follows:
+ *
+ * - Dual-role / dedicated capability of the port partner is ignored.
+ * - Charge ceiling on PD voltage transition is ignored.
+ * - CHARGE_PORT_NONE will never be selected.
+ */
+
+/* List of BJ adapters */
+enum bj_adapter {
+ BJ_NONE,
+ BJ_65W_19V,
+};
+
+/* Barrel-jack power adapter ratings. */
+static const struct charge_port_info bj_adapters[] = {
+ [BJ_NONE] = { .current = 0, .voltage = 0 },
+ [BJ_65W_19V] = { .current = 3420, .voltage = 19000 },
+};
+#define BJ_ADP_RATING_DEFAULT BJ_65W_19V /* BJ power ratings default */
+#define ADP_DEBOUNCE_MS 1000 /* Debounce time for BJ plug/unplug */
+
+/* Debounced connection state of the barrel jack */
+static int8_t bj_adp_connected = -1;
+static void adp_connect_deferred(void)
+{
+ const struct charge_port_info *pi;
+ int connected = !gpio_get_level(GPIO_BJ_ADP_PRESENT_L);
+
+ /* Debounce */
+ if (connected == bj_adp_connected)
+ return;
+
+ if (connected) {
+ pi = &bj_adapters[BJ_ADP_RATING_DEFAULT];
+ } else {
+ /* No barrel-jack, zero out this power supply */
+ pi = &bj_adapters[BJ_NONE];
+ }
+ /* This will result in a call to board_set_active_charge_port */
+ charge_manager_update_charge(CHARGE_SUPPLIER_DEDICATED,
+ DEDICATED_CHARGE_PORT, pi);
+ bj_adp_connected = connected;
+}
+DECLARE_DEFERRED(adp_connect_deferred);
+
+/* IRQ for BJ plug/unplug. It shouldn't be called if BJ is the power source. */
+void adp_connect_interrupt(enum gpio_signal signal)
+{
+ hook_call_deferred(&adp_connect_deferred_data, ADP_DEBOUNCE_MS * MSEC);
+}
+
+/* IRQ for USB-C plug/unplug. */
+void usbc_connect_interrupt(enum gpio_signal signal)
+{
+ task_wake(TASK_ID_PD_C0);
+}
+
+int board_set_active_charge_port(int port)
+{
+ const int active_port = charge_manager_get_active_charge_port();
+
+ CPRINTUSB("Requested charge port change to %d", port);
+
+ if (port < 0 || CHARGE_PORT_COUNT <= port)
+ return EC_ERROR_INVAL;
+
+ if (port == active_port)
+ return EC_SUCCESS;
+
+ /* Don't sink from a source port */
+ if (board_vbus_source_enabled(port))
+ return EC_ERROR_INVAL;
+
+ if (!chipset_in_state(CHIPSET_STATE_ANY_OFF)) {
+ int bj_requested;
+
+ if (charge_manager_get_active_charge_port() != CHARGE_PORT_NONE)
+ /* Change is only permitted while the system is off */
+ return EC_ERROR_INVAL;
+
+ /*
+ * Current setting is no charge port but the AP is on, so the
+ * charge manager is out of sync (probably because we're
+ * reinitializing after sysjump). Reject requests that aren't
+ * in sync with our outputs.
+ */
+ bj_requested = port == CHARGE_PORT_BARRELJACK;
+ if (bj_adp_connected != bj_requested)
+ return EC_ERROR_INVAL;
+ }
+
+ CPRINTUSB("New charger p%d", port);
+
+ switch (port) {
+ case CHARGE_PORT_TYPEC0:
+ gpio_set_level(GPIO_EN_PPVAR_USBC_ADP_L, 0);
+ gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_L, 1);
+ gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT_L);
+ break;
+ case CHARGE_PORT_BARRELJACK:
+ /* Make sure BJ adapter is sourcing power */
+ if (gpio_get_level(GPIO_BJ_ADP_PRESENT_L))
+ return EC_ERROR_INVAL;
+ gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_L, 0);
+ gpio_set_level(GPIO_EN_PPVAR_USBC_ADP_L, 1);
+ gpio_disable_interrupt(GPIO_BJ_ADP_PRESENT_L);
+ break;
+ default:
+ return EC_ERROR_INVAL;
+ }
+
+ return EC_SUCCESS;
+}
+
+static void board_charge_manager_init(void)
+{
+ enum charge_port port;
+
+ /*
+ * Initialize all charge suppliers to 0. The charge manager waits until
+ * all ports have reported in before doing anything.
+ */
+ for (int i = 0; i < CHARGE_PORT_COUNT; i++) {
+ for (int j = 0; j < CHARGE_SUPPLIER_COUNT; j++)
+ charge_manager_update_charge(j, i, NULL);
+ }
+
+ port = gpio_get_level(GPIO_BJ_ADP_PRESENT_L) ? CHARGE_PORT_TYPEC0 :
+ CHARGE_PORT_BARRELJACK;
+ CPRINTUSB("Power source is p%d (%s)", port,
+ port == CHARGE_PORT_TYPEC0 ? "USB-C" : "BJ");
+
+ /* Initialize the power source supplier */
+ switch (port) {
+ case CHARGE_PORT_TYPEC0:
+ typec_set_input_current_limit(port, 3000, 5000);
+ break;
+ case CHARGE_PORT_BARRELJACK:
+ charge_manager_update_charge(
+ CHARGE_SUPPLIER_DEDICATED, DEDICATED_CHARGE_PORT,
+ &bj_adapters[BJ_ADP_RATING_DEFAULT]);
+ break;
+ }
+
+ /* Report charge state from the barrel jack. */
+ adp_connect_deferred();
+}
+DECLARE_HOOK(HOOK_INIT, board_charge_manager_init,
+ HOOK_PRIO_INIT_CHARGE_MANAGER + 1);
+
+__override int extpower_is_present(void)
+{
+ /*
+ * There's no battery, so running this method implies we have power.
+ */
+ return 1;
+}
+
+/* Must come after other header files and interrupt handler declarations */
+#include "gpio_list.h"
diff --git a/board/dibbi/board.h b/board/dibbi/board.h
new file mode 100644
index 0000000000..c59a540b5d
--- /dev/null
+++ b/board/dibbi/board.h
@@ -0,0 +1,145 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Dibbi board configuration */
+
+#ifndef __CROS_EC_BOARD_H
+#define __CROS_EC_BOARD_H
+
+/* Select Baseboard features */
+#define VARIANT_DEDEDE_EC_IT8320
+#include "baseboard.h"
+
+/* System unlocked in early development */
+#define CONFIG_SYSTEM_UNLOCKED
+
+#define CONFIG_CMD_CHARGER_DUMP
+
+/* Power */
+#undef CONFIG_CHARGER
+#undef CONFIG_CHARGER_DISCHARGE_ON_AC
+#undef CONFIG_USB_PD_VBUS_MEASURE_CHARGER
+#define CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON 16000
+#define PD_MAX_VOLTAGE_MV 15000
+#define CONFIG_USB_PD_VBUS_DETECT_GPIO
+/* ADC sensors could measure VBUS on this board, but components are DNS */
+#define CONFIG_USB_PD_VBUS_MEASURE_NOT_PRESENT
+
+/* Override macro for C0 only */
+#define PORT_TO_HPD(port) (GPIO_USB_C0_DP_HPD)
+
+/* Power: Dedicated barreljack charger port */
+#undef CONFIG_DEDICATED_CHARGE_PORT_COUNT
+#define CONFIG_DEDICATED_CHARGE_PORT_COUNT 1
+#define DEDICATED_CHARGE_PORT 1
+
+/* USB Type-C */
+#undef CONFIG_USB_CHARGER
+#undef CONFIG_USB_MUX_PI3USB31532
+
+/* TCPC */
+#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
+
+/* USB Mux and Retimer */
+#define CONFIG_USB_MUX_IT5205 /* C0: ITE Mux */
+#define I2C_PORT_USB_MUX I2C_PORT_USB_C0 /* Required for ITE Mux */
+
+/* USB Type A Features */
+#define CONFIG_USB_PORT_POWER_DUMB
+#define USB_PORT_COUNT 3 /* Type A ports */
+
+/* No battery */
+#undef CONFIG_BATTERY_CUT_OFF
+#undef CONFIG_BATTERY_PRESENT_GPIO
+#undef CONFIG_BATTERY_REQUESTS_NIL_WHEN_DEAD
+#undef CONFIG_BATTERY_REVIVE_DISCONNECT
+#undef CONFIG_BATTERY_SMART
+
+/* LED */
+/* TODO(b/259467280) Determine what LED/PWM impl is needed*/
+/* #define CONFIG_LED_PWM */
+/* #define CONFIG_LED_PWM_COUNT 1 */
+
+/* PWM */
+#define CONFIG_PWM
+
+/* Thermistors */
+#define CONFIG_TEMP_SENSOR
+#define CONFIG_THERMISTOR
+#define CONFIG_STEINHART_HART_3V3_51K1_47K_4050B
+
+/* Buttons */
+#define CONFIG_DEDICATED_RECOVERY_BUTTON
+#define CONFIG_DEDICATED_RECOVERY_BUTTON_2
+#define CONFIG_POWER_BUTTON
+#define CONFIG_POWER_BUTTON_IGNORE_LID
+#define CONFIG_POWER_BUTTON_X86
+
+/* No Keyboard */
+#undef CONFIG_MKBP_EVENT
+#undef CONFIG_MKBP_EVENT_WAKEUP_MASK
+#undef CONFIG_MKBP_USE_GPIO_AND_HOST_EVENT
+#undef CONFIG_KEYBOARD_COL2_INVERTED
+#undef CONFIG_KEYBOARD_PROTOCOL_8042
+#undef CONFIG_MKBP_INPUT_DEVICES
+#undef CONFIG_CMD_KEYBOARD
+#undef CONFIG_KEYBOARD_BOOT_KEYS
+#undef CONFIG_KEYBOARD_RUNTIME_KEYS
+
+/* No backlight */
+#undef CONFIG_BACKLIGHT_LID
+#undef GPIO_ENABLE_BACKLIGHT
+
+/* Unused features - Misc */
+#undef CONFIG_HIBERNATE
+#undef CONFIG_VOLUME_BUTTONS
+#undef CONFIG_LID_SWITCH
+#undef CONFIG_TABLET_MODE
+#undef CONFIG_TABLET_MODE_SWITCH
+#undef CONFIG_GMR_TABLET_MODE
+#undef GPIO_TABLET_MODE_L
+
+/* Unused GPIOs */
+#undef GPIO_USB_C1_DP_HPD
+
+/* Pin renaming */
+#define GPIO_RECOVERY_L GPIO_EC_RECOVERY_BTN_ODL
+#define GPIO_RECOVERY_L_2 GPIO_H1_EC_RECOVERY_BTN_ODL
+#define GPIO_POWER_BUTTON_L GPIO_H1_EC_PWR_BTN_ODL
+
+#ifndef __ASSEMBLER__
+
+#include "gpio_signal.h"
+#include "registers.h"
+
+enum charge_port {
+ CHARGE_PORT_TYPEC0,
+ CHARGE_PORT_BARRELJACK,
+};
+
+enum pwm_channel {
+ PWM_CH_LED_RED,
+ PWM_CH_LED_GREEN,
+ PWM_CH_LED_BLUE,
+ PWM_CH_COUNT,
+};
+
+/* ADC channels */
+enum adc_channel {
+ ADC_VSNS_PP3300_A, /* ADC0 */
+ ADC_TEMP_SENSOR_1, /* ADC2 */
+ ADC_TEMP_SENSOR_2, /* ADC3 */
+ ADC_PPVAR_PWR_IN_IMON, /* ADC15 */
+ ADC_SNS_PPVAR_PWR_IN, /* ADC16 */
+ ADC_CH_COUNT
+};
+
+enum temp_sensor_id { TEMP_SENSOR_1, TEMP_SENSOR_2, TEMP_SENSOR_COUNT };
+
+#endif /* !__ASSEMBLER__ */
+
+#endif /* __CROS_EC_BOARD_H */
diff --git a/board/dibbi/build.mk b/board/dibbi/build.mk
new file mode 100644
index 0000000000..07ea50c392
--- /dev/null
+++ b/board/dibbi/build.mk
@@ -0,0 +1,14 @@
+# -*- makefile -*-
+# Copyright 2022 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Board specific files build
+#
+
+CHIP:=it83xx
+CHIP_FAMILY:=it8320
+CHIP_VARIANT:=it8320dx
+BASEBOARD:=dedede
+
+board-y=board.o led.o usb_pd_policy.o
diff --git a/board/dibbi/ec.tasklist b/board/dibbi/ec.tasklist
new file mode 100644
index 0000000000..768c31112a
--- /dev/null
+++ b/board/dibbi/ec.tasklist
@@ -0,0 +1,16 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * See CONFIG_TASK_LIST in config.h for details.
+ */
+
+#define CONFIG_TASK_LIST \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_NOTEST(CHIPSET, chipset_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(POWERBTN, power_button_task, NULL, ULTRA_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_C0, pd_task, NULL, ULTRA_TASK_STACK_SIZE)
diff --git a/board/dibbi/gpio.inc b/board/dibbi/gpio.inc
new file mode 100644
index 0000000000..a5c0c02a72
--- /dev/null
+++ b/board/dibbi/gpio.inc
@@ -0,0 +1,142 @@
+/* -*- mode:c -*-
+ *
+ * Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Declare symbolic names for all the GPIOs that we care about.
+ * Note: Those with interrupt handlers must be declared first. */
+
+/* Power State interrupts */
+GPIO_INT(SLP_S4_L, PIN(I, 5), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SLP_S3_L, PIN(H, 3), GPIO_INT_BOTH, baseboard_all_sys_pgood_interrupt)
+GPIO_INT(SLP_S0_L, PIN(E, 4), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SLP_SUS_L, PIN(G, 2), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(VCCIN_AUX_VID0, PIN(D, 0), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(RSMRST_PWRGD_L, PIN(E, 1), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(CPU_C10_GATE_L, PIN(G, 1), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(PG_DRAM_OD, PIN(D, 3), GPIO_INT_BOTH, baseboard_all_sys_pgood_interrupt)
+GPIO_INT(PG_PP1050_ST_OD, PIN(L, 1), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(VCCIN_AUX_VID1, PIN(K, 1), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(PG_VCCIO_EXT_OD, PIN(D, 7), GPIO_INT_BOTH, baseboard_all_sys_pgood_interrupt)
+GPIO_INT(ESPI_RESET_L, PIN(D, 2), GPIO_INT_FALLING | GPIO_SEL_1P8V, espi_reset_pin_asserted_interrupt)
+
+GPIO_INT(H1_EC_PWR_BTN_ODL, PIN(E, 2), GPIO_INT_BOTH | GPIO_PULL_UP, power_button_interrupt)
+#ifdef CONFIG_LOW_POWER_IDLE
+/* Used to wake up the EC from Deep Doze mode when writing to console */
+GPIO_INT(UART1_RX, PIN(B, 0), GPIO_INT_BOTH, uart_deepsleep_interrupt) /* UART_DBG_TX_EC_RX */
+#endif
+
+/* USB-C interrupts */
+GPIO_INT(USB_C0_CCSBU_OVP_ODL, PIN(K, 6), GPIO_INT_FALLING | GPIO_PULL_UP, c0_ccsbu_ovp_interrupt) /* Fault protection */
+
+/* Other interrupts */
+GPIO_INT(EC_WP_OD, PIN(A, 6), GPIO_INT_BOTH, switch_interrupt)
+/* Directly connected recovery button */
+GPIO_INT(EC_RECOVERY_BTN_ODL, PIN(K, 7), GPIO_INT_BOTH, button_interrupt)
+/* Recovery button input from H1 */
+GPIO_INT(H1_EC_RECOVERY_BTN_ODL, PIN(K, 4), GPIO_INT_BOTH, button_interrupt)
+GPIO_INT(BJ_ADP_PRESENT_L, PIN(A, 7), GPIO_INT_BOTH | GPIO_PULL_UP, adp_connect_interrupt)
+GPIO_INT(USBC_ADP_PRESENT_L, PIN(K, 3), GPIO_INT_BOTH | GPIO_PULL_UP, usbc_connect_interrupt)
+
+/* Power sequence GPIOs */
+GPIO(EC_AP_RTCRST, PIN(K, 2), GPIO_OUT_LOW)
+GPIO(EC_AP_PWR_BTN_ODL, PIN(B, 6), GPIO_ODR_HIGH)
+GPIO(EC_AP_DPWROK, PIN(L, 7), GPIO_OUT_LOW)
+GPIO(EC_AP_RSMRST_L, PIN(H, 0), GPIO_OUT_LOW)
+GPIO(EC_AP_WAKE_ODL, PIN(D, 5), GPIO_ODR_HIGH)
+GPIO(SYS_RST_ODL, PIN(D, 1), GPIO_ODR_HIGH)
+GPIO(EC_AP_SYS_PWROK, PIN(F, 2), GPIO_OUT_LOW)
+GPIO(PG_PP5000_U_OD, PIN(E, 3), GPIO_INPUT)
+GPIO(EN_PP3300_A, PIN(C, 5), GPIO_OUT_LOW)
+GPIO(EC_AP_PCH_PWROK_OD, PIN(D, 6), GPIO_ODR_LOW)
+GPIO(EN_PP5000_U, PIN(K, 5), GPIO_OUT_LOW)
+/* TODO(b:149775160) - Modify if needed if we ever use this signal. */
+GPIO(EN_VCCST, PIN(D, 4), GPIO_INPUT)
+GPIO(EN_VCCIO_EXT, PIN(B, 2), GPIO_OUT_LOW)
+GPIO(EC_PROCHOT_ODL, PIN(I, 1), GPIO_ODR_HIGH | GPIO_SEL_1P8V)
+GPIO(EC_AP_VCCST_PWRGD_OD, PIN(E, 5), GPIO_ODR_LOW)
+GPIO(ALL_SYS_PWRGD, PIN(B, 7), GPIO_OUT_LOW)
+GPIO(EN_PPVAR_BJ_ADP_L, PIN(J, 0), GPIO_OUT_LOW)
+GPIO(EN_PPVAR_USBC_ADP_L, PIN(J, 1), GPIO_OUT_LOW)
+GPIO(EN_USB_C0_VBUS, PIN(I, 7), GPIO_OUT_LOW)
+GPIO(USB_C0_VBUS_ILIM, PIN(I, 6), GPIO_OUT_LOW)
+
+/* Required for icelake chipset code, but implemented through other means for dedede */
+UNIMPLEMENTED(AC_PRESENT)
+UNIMPLEMENTED(PG_EC_DSW_PWROK)
+UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD)
+
+/* Required for dedede baseboard but not used in dibbi */
+UNIMPLEMENTED(USB_C0_INT_ODL)
+UNIMPLEMENTED(EN_SLP_Z)
+
+/* I2C pins - Alternate function below configures I2C module on these pins */
+GPIO(EC_I2C_EEPROM_SCL, PIN(B, 3), GPIO_INPUT)
+GPIO(EC_I2C_EEPROM_SDA, PIN(B, 4), GPIO_INPUT)
+GPIO(EC_I2C_BATTERY_SCL, PIN(C, 1), GPIO_INPUT)
+GPIO(EC_I2C_BATTERY_SDA, PIN(C, 2), GPIO_INPUT)
+GPIO(EC_I2C_SENSOR_SCL, PIN(F, 6), GPIO_INPUT | GPIO_SEL_1P8V)
+GPIO(EC_I2C_SENSOR_SDA, PIN(F, 7), GPIO_INPUT | GPIO_SEL_1P8V)
+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(EN_USB_A0_VBUS, PIN(L, 6), GPIO_OUT_LOW)
+GPIO(EN_USB_A1_VBUS, PIN(C, 6), GPIO_OUT_LOW)
+GPIO(EN_USB_A2_VBUS, PIN(C, 4), GPIO_OUT_LOW)
+
+/* MKBP event synchronization */
+/* TODO(b/257833880) Check whether this pin is needed */
+GPIO(EC_AP_MKBP_INT_L, PIN(L, 5), GPIO_ODR_HIGH)
+
+/* Misc pins which will run to the I/O board */
+GPIO(EC_SUB_IO_1_1, PIN(L, 3), GPIO_INPUT)
+GPIO(EC_SUB_IO_1_2, PIN(F, 0), GPIO_INPUT)
+GPIO(EC_SUB_IO_2_1, PIN(F, 1), GPIO_INPUT)
+GPIO(EC_SUB_IO_2_2, PIN(L, 2), GPIO_INPUT)
+
+/* Misc */
+GPIO(EC_ENTERING_RW, PIN(G, 0), GPIO_OUT_LOW)
+GPIO(CCD_MODE_ODL, PIN(H, 5), GPIO_ODR_HIGH)
+GPIO(EC_BATTERY_PRES_ODL, PIN(I, 4), GPIO_INPUT)
+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(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(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)
+GPIO(GPIOK0_NC, PIN(K, 0), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOL0_NC, PIN(L, 0), GPIO_INPUT | GPIO_PULL_DOWN)
+GPIO(GPIOM6_NC, PIN(M, 6), GPIO_INPUT | GPIO_PULL_DOWN)
+/* TODO(b/257833880) add any new unused pins */
+
+/* Alternate functions GPIO definitions */
+/* UART */
+ALTERNATE(PIN_MASK(B, BIT(0) | BIT(1)), 0, MODULE_UART, 0) /* UART for debug */
+
+/* I2C */
+ALTERNATE(PIN_MASK(B, BIT(3) | BIT(4)), 0, MODULE_I2C, 0) /* I2C0 */
+ALTERNATE(PIN_MASK(C, BIT(1) | BIT(2)), 0, MODULE_I2C, 0) /* I2C1 */
+ALTERNATE(PIN_MASK(F, BIT(6) | BIT(7)), 0, MODULE_I2C, GPIO_SEL_1P8V) /* I2C2 - 1.8V */
+ALTERNATE(PIN_MASK(E, BIT(0) | BIT(7)), 0, MODULE_I2C, 0) /* I2C4 */
+ALTERNATE(PIN_MASK(A, BIT(4) | BIT(5)), 0, MODULE_I2C, 0) /* I2C5 */
+
+/* ADC */
+ALTERNATE(PIN_MASK(I, BIT(0) | BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC0: EC_VSNS_PP3300_A, ADC2: TEMP_SENSOR_1, ADC3: TEMP_SENSOR_2 */
+ALTERNATE(PIN_MASK(L, BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC15: PPVAR_PWR_IN_IMON, ADC16: SNS_PPVAR_PWR_IN */
+
+/* PWM */
+ALTERNATE(PIN_MASK(A, BIT(1) | BIT(2) | BIT(3)), 0, MODULE_PWM, 0) /* LED_[R,G,B]_ODL */
diff --git a/board/dibbi/led.c b/board/dibbi/led.c
new file mode 100644
index 0000000000..44cfc0b457
--- /dev/null
+++ b/board/dibbi/led.c
@@ -0,0 +1,38 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Dibbi specific PWM LED settings. */
+
+#include "common.h"
+#include "ec_commands.h"
+#include "pwm.h"
+#include "util.h"
+
+/* TODO(b/259467280) Implement LED logic */
+
+const enum ec_led_id supported_led_ids[] = {
+ EC_LED_ID_POWER_LED,
+};
+const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
+
+void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
+{
+ /* TODO(b/259467280) check this implementation */
+ memset(brightness_range, '\0',
+ sizeof(*brightness_range) * EC_LED_COLOR_COUNT);
+ brightness_range[EC_LED_COLOR_RED] = 100;
+ brightness_range[EC_LED_COLOR_GREEN] = 100;
+ brightness_range[EC_LED_COLOR_BLUE] = 100;
+ brightness_range[EC_LED_COLOR_YELLOW] = 100;
+ brightness_range[EC_LED_COLOR_WHITE] = 100;
+ brightness_range[EC_LED_COLOR_AMBER] = 100;
+}
+
+int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
+{
+ /* TODO(b/259467280) fix this implementation */
+
+ return EC_SUCCESS;
+}
diff --git a/board/dibbi/usb_pd_policy.c b/board/dibbi/usb_pd_policy.c
new file mode 100644
index 0000000000..9d573b9c61
--- /dev/null
+++ b/board/dibbi/usb_pd_policy.c
@@ -0,0 +1,69 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "charge_manager.h"
+#include "charger.h"
+#include "chipset.h"
+#include "common.h"
+#include "console.h"
+#include "driver/tcpm/tcpci.h"
+#include "gpio.h"
+#include "usb_pd.h"
+
+#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args)
+#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args)
+
+__override int pd_check_power_swap(int port)
+{
+ /* If type-c port is supplying power, we never swap PR (to source) */
+ if (port == charge_manager_get_active_charge_port())
+ return 0;
+ /*
+ * Allow power swap as long as we are acting as a dual role device,
+ * otherwise assume our role is fixed (not in S0 or console command
+ * to fix our role).
+ */
+ return (pd_get_dual_role(port) == PD_DRP_TOGGLE_ON ? 1 : 0);
+}
+
+int pd_check_vconn_swap(int port)
+{
+ /* Allow VCONN swaps if the AP is on */
+ return gpio_get_level(GPIO_EN_PP5000_U);
+}
+
+void pd_power_supply_reset(int port)
+{
+ if (port < 0 || port >= board_get_usb_pd_port_count())
+ return;
+
+ /* Disable VBUS source */
+ gpio_set_level(GPIO_EN_USB_C0_VBUS, 0);
+
+ /* Notify host of power info change. */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
+}
+
+int pd_set_power_supply_ready(int port)
+{
+ /* Disable charging */
+ gpio_set_level(GPIO_EN_PPVAR_USBC_ADP_L, 1);
+
+ /* Enable VBUS source */
+ gpio_set_level(GPIO_EN_USB_C0_VBUS, 1);
+
+ /* Notify host of power info change. */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
+
+ return EC_SUCCESS;
+}
+
+__override int pd_snk_is_vbus_provided(int port)
+{
+ if (port != CHARGE_PORT_TYPEC0)
+ return 0;
+
+ return gpio_get_level(GPIO_USBC_ADP_PRESENT_L);
+}
diff --git a/board/dibbi/vif_override.xml b/board/dibbi/vif_override.xml
new file mode 100644
index 0000000000..32736caf64
--- /dev/null
+++ b/board/dibbi/vif_override.xml
@@ -0,0 +1,3 @@
+<!-- Add VIF field overrides here. See genvif.c and the Vendor Info File
+ Definition from the USB-IF.
+-->
diff --git a/board/dingdong/board.h b/board/dingdong/board.h
index c0372c9322..52c3b740e4 100644
--- a/board/dingdong/board.h
+++ b/board/dingdong/board.h
@@ -15,7 +15,6 @@
#define CONFIG_UART_CONSOLE 1
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_ADC
#define CONFIG_BOARD_PRE_INIT
#define CONFIG_HW_CRC
diff --git a/board/discovery-stm32f072/board.h b/board/discovery-stm32f072/board.h
index d5db803b65..b112f14f9f 100644
--- a/board/discovery-stm32f072/board.h
+++ b/board/discovery-stm32f072/board.h
@@ -23,7 +23,6 @@
#define CONFIG_UART_CONSOLE 2
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
/* USB Configuration */
diff --git a/board/discovery/board.h b/board/discovery/board.h
index e348454af1..a722408e81 100644
--- a/board/discovery/board.h
+++ b/board/discovery/board.h
@@ -25,9 +25,14 @@
#ifndef __ASSEMBLER__
-/* Timer selection */
-#define TIM_CLOCK_MSB 3
-#define TIM_CLOCK_LSB 4
+/* Timer selection
+ *
+ * "discovery" is an STM32L152RC, which is a "Category 3" product that
+ * has the 32-bit timer TIM5. See Section 17 "General-purpose Timers" and
+ * "Table 3. STM32L15xxx product categories":
+ * https://www.st.com/resource/en/reference_manual/cd00240193-stm32l100xx-stm32l151xx-stm32l152xx-and-stm32l162xx-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf
+ */
+#define TIM_CLOCK32 5
#include "gpio_signal.h"
diff --git a/board/dojo/board.c b/board/dojo/board.c
index 62f2e6ac09..5c7db8b443 100644
--- a/board/dojo/board.c
+++ b/board/dojo/board.c
@@ -467,14 +467,13 @@ const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = {
},
};
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Limit input current lower than 2944 mA for safety */
charge_ma = MIN(charge_ma, 2944);
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/* NVME */
diff --git a/board/dooly/board.c b/board/dooly/board.c
index 6e1f6ebbeb..9652de72c0 100644
--- a/board/dooly/board.c
+++ b/board/dooly/board.c
@@ -323,8 +323,8 @@ uint16_t tcpc_get_alert_status(void)
}
/* Called when the charge manager has switched to a new port. */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/drawcia/board.c b/board/drawcia/board.c
index 118b3178be..58def569be 100644
--- a/board/drawcia/board.c
+++ b/board/drawcia/board.c
@@ -610,19 +610,17 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
/* Limit C1 on board version 0 to 2.0 A */
if ((board_version == 0) && (port == 1))
- icl = MIN(icl, 2000);
+ charge_ma = MIN(charge_ma, 2000);
/*
* TODO(b/151955431): Characterize the input current limit in case a
* scaling needs to be applied here
*/
- charge_set_input_current_limit(icl, charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
int board_set_active_charge_port(int port)
diff --git a/board/drawcia_riscv/board.c b/board/drawcia_riscv/board.c
index cbc977d64b..ba325aedc6 100644
--- a/board/drawcia_riscv/board.c
+++ b/board/drawcia_riscv/board.c
@@ -542,19 +542,17 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
/* Limit C1 on board version 0 to 2.0 A */
if ((board_version == 0) && (port == 1))
- icl = MIN(icl, 2000);
+ charge_ma = MIN(charge_ma, 2000);
/*
* TODO(b/151955431): Characterize the input current limit in case a
* scaling needs to be applied here
*/
- charge_set_input_current_limit(icl, charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
int board_set_active_charge_port(int port)
diff --git a/board/driblee/board.c b/board/driblee/board.c
index 30075e683e..05ec708ac5 100644
--- a/board/driblee/board.c
+++ b/board/driblee/board.c
@@ -338,19 +338,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/driblee/board.h b/board/driblee/board.h
index f6a3ac9130..514fe584ff 100644
--- a/board/driblee/board.h
+++ b/board/driblee/board.h
@@ -31,6 +31,11 @@
#undef CONFIG_CMD_CHARGER_DUMP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_MATH_UTIL
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CHARGING_CURRENT_1100MA 1100
diff --git a/board/drobit/board.c b/board/drobit/board.c
index 1a20870d1f..1d881d9a2c 100644
--- a/board/drobit/board.c
+++ b/board/drobit/board.c
@@ -475,17 +475,3 @@ static void board_chipset_suspend(void)
gpio_set_level(GPIO_EC_KB_BL_EN, 0);
}
DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, board_chipset_suspend, HOOK_PRIO_DEFAULT);
-
-/******************************************************************************/
-/* Set the charge limit based upon desired maximum. */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- /*
- * Limit the input current to 98% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 98 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/drobit/board.h b/board/drobit/board.h
index d6fda98f3d..bf3e64ae5a 100644
--- a/board/drobit/board.h
+++ b/board/drobit/board.h
@@ -89,6 +89,7 @@
/* charger defines */
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 2
/*
* Macros for GPIO signals used in common code that don't match the
diff --git a/board/eldrid/board.c b/board/eldrid/board.c
index 81fdf22ffc..1abf9c6acd 100644
--- a/board/eldrid/board.c
+++ b/board/eldrid/board.c
@@ -182,14 +182,7 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma,
else
isl9241_set_ac_prochot(0, 3328);
- /*
- * Follow OEM request to limit the input current to
- * 90% negotiated limit.
- */
- charge_ma = charge_ma * 90 / 100;
-
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/******************************************************************************/
diff --git a/board/eldrid/board.h b/board/eldrid/board.h
index 1bbe183425..8cfac4d8bc 100644
--- a/board/eldrid/board.h
+++ b/board/eldrid/board.h
@@ -93,6 +93,8 @@
/* charger defines */
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
+/* OEM requested 10% derating */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 10
/* Retimer */
#undef CONFIG_USBC_RETIMER_INTEL_BB
diff --git a/board/elm/board.c b/board/elm/board.c
index 4007d34379..f8621d086e 100644
--- a/board/elm/board.c
+++ b/board/elm/board.c
@@ -337,13 +337,10 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
- /* Limit input current 95% ratio on elm board for safety */
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
pd_send_host_event(PD_EVENT_POWER_CHANGE);
}
diff --git a/board/elm/board.h b/board/elm/board.h
index 10cb6bb75d..6e4e705604 100644
--- a/board/elm/board.h
+++ b/board/elm/board.h
@@ -37,13 +37,15 @@
#define CONFIG_BATTERY_SMART
#define CONFIG_CHARGE_MANAGER
#define CONFIG_CHARGER
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#define CONFIG_CHARGE_RAMP_HW
#define CONFIG_CHARGER_ISL9237
#define CONFIG_CHARGER_MAX_INPUT_CURRENT 3000
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_CHARGER_DISCHARGE_ON_AC
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHIPSET_MT817X
#define CONFIG_CMD_TYPEC
#define CONFIG_EXTPOWER_GPIO
@@ -73,7 +75,6 @@
#define CONFIG_USB_CHARGER
#define CONFIG_SPI
#define CONFIG_SPI_CONTROLLER
-#define CONFIG_STM_HWTIMER32
#define CONFIG_VBOOT_HASH
#undef CONFIG_WATCHDOG_HELP
#define CONFIG_SWITCH
diff --git a/board/eve/board.c b/board/eve/board.c
index 3f5da1a83a..96534f62c7 100644
--- a/board/eve/board.c
+++ b/board/eve/board.c
@@ -634,8 +634,8 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Enable charging trigger by BC1.2 detection */
int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP ||
@@ -646,9 +646,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
if (bd9995x_bc12_enable_charging(port, bc12_enable))
return;
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/**
diff --git a/board/eve/board.h b/board/eve/board.h
index 064bce4b60..e3623979c3 100644
--- a/board/eve/board.h
+++ b/board/eve/board.h
@@ -100,7 +100,9 @@
#define CONFIG_CHARGER_BD9995X
#define CONFIG_CHARGER_BD9995X_CHGEN
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_MAINTAIN_VBAT
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGER_PSYS_READ
diff --git a/board/ezkinil/board.c b/board/ezkinil/board.c
index c9e1aca267..5e15b458cc 100644
--- a/board/ezkinil/board.c
+++ b/board/ezkinil/board.c
@@ -865,16 +865,3 @@ int fan_percent_to_rpm(int fan, int pct)
return fan_table[current_level].rpm;
}
-
-__override void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- /*
- * Limit the input current to 95% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 95 / 100;
-
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/ezkinil/board.h b/board/ezkinil/board.h
index aa1fe065f4..c5e6ce1771 100644
--- a/board/ezkinil/board.h
+++ b/board/ezkinil/board.h
@@ -15,6 +15,9 @@
#define CONFIG_KEYBOARD_FACTORY_TEST
+/* charger margin */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* Motion sensing drivers */
#define CONFIG_ACCELGYRO_ICM426XX
#define CONFIG_ACCELGYRO_ICM426XX_INT_EVENT \
diff --git a/board/felwinter/board.h b/board/felwinter/board.h
index 17e1cf9246..0ca6a59b9c 100644
--- a/board/felwinter/board.h
+++ b/board/felwinter/board.h
@@ -179,6 +179,7 @@
#define CONFIG_CHARGE_RAMP_SW
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 10
#define CONFIG_KEYBOARD_REFRESH_ROW3
diff --git a/board/felwinter/charger_isl9241.c b/board/felwinter/charger_isl9241.c
index dd2535ea7c..95227f753a 100644
--- a/board/felwinter/charger_isl9241.c
+++ b/board/felwinter/charger_isl9241.c
@@ -79,11 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_ma = (charge_ma * 90) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/fennel/board.c b/board/fennel/board.c
index 563f680dee..6d864252b6 100644
--- a/board/fennel/board.c
+++ b/board/fennel/board.c
@@ -237,14 +237,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/fennel/board.h b/board/fennel/board.h
index 6bb90ef0f3..42e1fcd451 100644
--- a/board/fennel/board.h
+++ b/board/fennel/board.h
@@ -26,6 +26,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/fizz/board.c b/board/fizz/board.c
index f58083c6ed..296ddca5a7 100644
--- a/board/fizz/board.c
+++ b/board/fizz/board.c
@@ -512,8 +512,8 @@ static void set_charge_limit(int charge_ma)
}
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
int p87w = 0, p65w = 0, p60w = 0;
diff --git a/board/fluffy/board.h b/board/fluffy/board.h
index 1309c41901..604e67d9b8 100644
--- a/board/fluffy/board.h
+++ b/board/fluffy/board.h
@@ -38,7 +38,6 @@
#define USB_EP_COUNT 2
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_ADC
#define CONFIG_I2C
diff --git a/board/fusb307bgevb/board.h b/board/fusb307bgevb/board.h
index 5e45b346b7..8d2fdfcfed 100644
--- a/board/fusb307bgevb/board.h
+++ b/board/fusb307bgevb/board.h
@@ -29,7 +29,6 @@
#define CONFIG_UART_CONSOLE 2
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
#define CONFIG_I2C
#define CONFIG_I2C_CONTROLLER
diff --git a/board/gaelin/board.c b/board/gaelin/board.c
index 6fad328a76..7228c9e2f2 100644
--- a/board/gaelin/board.c
+++ b/board/gaelin/board.c
@@ -17,7 +17,6 @@
#include "gpio_signal.h"
#include "power_button.h"
#include "hooks.h"
-#include "peripheral_charger.h"
#include "power.h"
#include "switch.h"
#include "throttle_ap.h"
@@ -41,33 +40,6 @@ const int usb_port_enable[USB_PORT_COUNT] = {
};
BUILD_ASSERT(ARRAY_SIZE(usb_port_enable) == USB_PORT_COUNT);
-extern struct pchg_drv cps8100_drv;
-struct pchg pchgs[] = {
- [0] = {
- .cfg = &(const struct pchg_config) {
- .drv = &cps8100_drv,
- .i2c_port = I2C_PORT_QI,
- .irq_pin = GPIO_QI_INT_ODL,
- .full_percent = 96,
- .block_size = 128,
- },
- .policy = {
- [PCHG_CHIPSET_STATE_ON] = &pchg_policy_on,
- [PCHG_CHIPSET_STATE_SUSPEND] = &pchg_policy_suspend,
- },
- .events = QUEUE_NULL(PCHG_EVENT_QUEUE_SIZE, enum pchg_event),
- },
-};
-const int pchg_count = ARRAY_SIZE(pchgs);
-
-__override void board_pchg_power_on(int port, bool on)
-{
- if (port == 0)
- gpio_set_level(GPIO_EC_QI_PWR, on);
- else
- CPRINTS("%s: Invalid port=%d", __func__, port);
-}
-
/******************************************************************************/
int board_set_active_charge_port(int port)
@@ -118,7 +90,6 @@ int board_set_active_charge_port(int port)
switch (port) {
case CHARGE_PORT_TYPEC0:
case CHARGE_PORT_TYPEC1:
- case CHARGE_PORT_TYPEC2:
gpio_set_level(GPIO_EN_PPVAR_BJ_ADP_L, 1);
break;
case CHARGE_PORT_BARRELJACK:
@@ -293,6 +264,7 @@ void board_overcurrent_event(int port, int is_overcurrented)
usbc_overcurrent = is_overcurrented;
update_5v_usage();
}
+
/*
* Power monitoring and management.
*
@@ -336,7 +308,6 @@ void board_overcurrent_event(int port, int is_overcurrented)
#define THROT_TYPE_A_REAR BIT(1)
#define THROT_TYPE_C0 BIT(2)
#define THROT_TYPE_C1 BIT(3)
-#define THROT_TYPE_C2 BIT(4)
#define THROT_PROCHOT BIT(5)
/*
@@ -471,16 +442,6 @@ static void power_monitor(void)
gap += POWER_GAIN_TYPE_C;
}
/*
- * If the type-C port is sourcing power,
- * check whether it should be throttled.
- */
- if (ppc_is_sourcing_vbus(2) && gap <= 0) {
- new_state |= THROT_TYPE_C2;
- headroom_5v_z1 += PWR_Z1_C_HIGH - PWR_Z1_C_LOW;
- if (!(current_state & THROT_TYPE_C2))
- gap += POWER_GAIN_TYPE_C;
- }
- /*
* As a last resort, turn on PROCHOT to
* throttle the CPU.
*/
@@ -570,15 +531,6 @@ static void power_monitor(void)
tcpm_select_rp_value(1, rp);
pd_update_contract(1);
}
- if (diff & THROT_TYPE_C2) {
- enum tcpc_rp_value rp = (new_state & THROT_TYPE_C2) ?
- TYPEC_RP_1A5 :
- TYPEC_RP_3A0;
-
- ppc_set_vbus_source_current_limit(2, rp);
- tcpm_select_rp_value(2, rp);
- pd_update_contract(2);
- }
if (diff & THROT_TYPE_A_REAR) {
int typea_bc = (new_state & THROT_TYPE_A_REAR) ? 1 : 0;
diff --git a/board/gaelin/board.h b/board/gaelin/board.h
index f113c6cffd..166f0f1432 100644
--- a/board/gaelin/board.h
+++ b/board/gaelin/board.h
@@ -16,7 +16,7 @@
#define CONFIG_MP2964
/* Barrel Jack */
-#define DEDICATED_CHARGE_PORT 3
+#define DEDICATED_CHARGE_PORT 2
/* HDMI CEC */
#define CONFIG_CEC
@@ -31,19 +31,9 @@
/* USB Type C and USB PD defines */
#define CONFIG_USB_PD_REQUIRE_AP_MODE_ENTRY
-#define CONFIG_IO_EXPANDER
-#define CONFIG_IO_EXPANDER_NCT38XX
-#define CONFIG_IO_EXPANDER_PORT_COUNT 2
-
#define CONFIG_USB_PD_PPC
-#define CONFIG_USB_PD_TCPM_RT1715
-#define CONFIG_USBC_RETIMER_INTEL_BB
-
-#define CONFIG_USBC_RETIMER_KB800X
-#define CONFIG_KB800X_CUSTOM_XBAR
-#define CONFIG_USBC_PPC_SYV682X
-#undef CONFIG_SYV682X_HV_ILIM
-#define CONFIG_SYV682X_HV_ILIM SYV682X_HV_ILIM_5_50
+#define CONFIG_USB_PD_TCPM_PS8815
+#define CONFIG_USBC_PPC_NX20P3483 /* Compatible with Silicon Mitus SM5360A */
/* TODO: b/177608416 - measure and check these values on brya */
#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */
@@ -92,22 +82,17 @@
#define GPIO_RECOVERY_L_2 GPIO_GSC_EC_RECOVERY_BTN_OD
/* I2C Bus Configuration */
+#define I2C_PORT_SCALER NPCX_I2C_PORT5_0
-#define I2C_PORT_DP_REDRIVER NPCX_I2C_PORT0_0
-
-#define I2C_PORT_USB_C0_C2_TCPC NPCX_I2C_PORT1_0
+#define I2C_PORT_USB_C0_TCPC NPCX_I2C_PORT1_0
#define I2C_PORT_USB_C1_TCPC NPCX_I2C_PORT4_1
-#define I2C_PORT_USB_C0_C2_PPC NPCX_I2C_PORT2_0
-#define I2C_PORT_USB_C1_PPC NPCX_I2C_PORT6_1
+#define I2C_PORT_USB_C0_PPC NPCX_I2C_PORT2_0
+#define I2C_PORT_USB_C1_PPC NPCX_I2C_PORT3_0
-#define I2C_PORT_USB_C0_C2_BC12 NPCX_I2C_PORT2_0
-#define I2C_PORT_USB_C1_BC12 NPCX_I2C_PORT6_1
+#define I2C_PORT_USB_C0_BC12 NPCX_I2C_PORT2_0
+#define I2C_PORT_USB_C1_BC12 NPCX_I2C_PORT3_0
-#define I2C_PORT_USB_C0_C2_MUX NPCX_I2C_PORT3_0
-#define I2C_PORT_USB_C1_MUX NPCX_I2C_PORT6_1
-
-#define I2C_PORT_QI NPCX_I2C_PORT5_0
#define I2C_PORT_EEPROM NPCX_I2C_PORT7_0
#define I2C_PORT_MP2964 NPCX_I2C_PORT7_0
@@ -115,17 +100,7 @@
#define I2C_ADDR_MP2964_FLAGS 0x20
-#define USBC_PORT_C0_BB_RETIMER_I2C_ADDR 0x58
-#define USBC_PORT_C2_BB_RETIMER_I2C_ADDR 0x59
-
-/* Enabling Thunderbolt-compatible mode */
-#define CONFIG_USB_PD_TBT_COMPAT_MODE
-
-/* Enabling USB4 mode */
-#define CONFIG_USB_PD_USB4
-
-/* Retimer */
-#define CONFIG_USBC_RETIMER_FW_UPDATE
+#define I2C_ADDR_SCALER_FLAGS 0x58
/* Thermal features */
#define CONFIG_THERMISTOR
@@ -136,21 +111,14 @@
/* ADC */
#define CONFIG_ADC
-/*
- * TODO(b/197478860): Enable the fan control. We need
- * to check the sensor value and adjust the fan speed.
- */
+/* Fan */
#define CONFIG_FANS FAN_CH_COUNT
+#define RPM_DEVIATION 1
+#define CONFIG_CUSTOM_FAN_CONTROL
/* Include math_util for bitmask_uint64 used in pd_timers */
#define CONFIG_MATH_UTIL
-/* WPC/Qi charger */
-#ifdef SECTION_IS_RW
-#define CONFIG_PERIPHERAL_CHARGER
-#define CONFIG_CPS8100
-#endif
-
#ifndef __ASSEMBLER__
#include "gpio_signal.h" /* needed by registers.h */
@@ -160,7 +128,6 @@
enum charge_port {
CHARGE_PORT_TYPEC0,
CHARGE_PORT_TYPEC1,
- CHARGE_PORT_TYPEC2,
CHARGE_PORT_BARRELJACK,
CHARGE_PORT_ENUM_COUNT
};
@@ -183,8 +150,6 @@ enum temp_sensor_id {
TEMP_SENSOR_COUNT
};
-enum ioex_port { IOEX_C0_NCT38XX = 0, IOEX_C2_NCT38XX, IOEX_PORT_COUNT };
-
enum pwm_channel {
PWM_CH_LED_GREEN, /* PWM0 */
PWM_CH_FAN, /* PWM5 */
diff --git a/board/gaelin/build.mk b/board/gaelin/build.mk
index 3de758d1bd..6961fb3f60 100644
--- a/board/gaelin/build.mk
+++ b/board/gaelin/build.mk
@@ -19,4 +19,5 @@ board-y+=i2c.o
board-y+=led.o
board-y+=pwm.o
board-y+=sensors.o
+board-y+=thermal.o
board-y+=usbc_config.o
diff --git a/board/gaelin/ec.tasklist b/board/gaelin/ec.tasklist
index d16fc35f52..4a40f332e8 100644
--- a/board/gaelin/ec.tasklist
+++ b/board/gaelin/ec.tasklist
@@ -12,10 +12,8 @@
#define CONFIG_TASK_LIST \
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
- TASK_ALWAYS_RW(PCHG, pchg_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, 0, TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P1, usb_charger_task, 0, TASK_STACK_SIZE) \
- TASK_ALWAYS(USB_CHG_P2, usb_charger_task, 0, TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(USB_MUX, usb_mux_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(HOSTCMD, host_command_task, NULL, LARGER_TASK_STACK_SIZE) \
@@ -23,7 +21,6 @@
TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C1, pd_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(PD_C2, pd_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(PD_INT_C0, pd_shared_alert_task, (BIT(2) | BIT(0)), LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(CEC, cec_task, NULL, LARGER_TASK_STACK_SIZE)
diff --git a/board/gaelin/fans.c b/board/gaelin/fans.c
index 6828438a10..5f54e6e63c 100644
--- a/board/gaelin/fans.c
+++ b/board/gaelin/fans.c
@@ -30,16 +30,10 @@ static const struct fan_conf fan_conf_0 = {
.enable_gpio = GPIO_EN_PP5000_FAN,
};
-/*
- * TOOD(b/197478860): need to update for real fan
- *
- * Prototype fan spins at about 7200 RPM at 100% PWM.
- * Set minimum at around 30% PWM.
- */
static const struct fan_rpm fan_rpm_0 = {
- .rpm_min = 2200,
- .rpm_start = 2200,
- .rpm_max = 7200,
+ .rpm_min = 2350,
+ .rpm_start = 2350,
+ .rpm_max = 4100,
};
const struct fan_t fans[FAN_CH_COUNT] = {
diff --git a/board/gaelin/gpio.inc b/board/gaelin/gpio.inc
index 51cf0010c6..6de7003743 100644
--- a/board/gaelin/gpio.inc
+++ b/board/gaelin/gpio.inc
@@ -18,15 +18,11 @@ GPIO_INT(SLP_S3_L, PIN(A, 5), GPIO_INT_BOTH, power_signal_inte
GPIO_INT(SLP_SUS_L, PIN(F, 1), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(SYS_SLP_S0IX_L, PIN(D, 5), GPIO_INT_BOTH, power_signal_interrupt)
GPIO_INT(USB_C0_BC12_INT_ODL, PIN(C, 6), GPIO_INT_FALLING, bc12_interrupt)
-GPIO_INT(USB_C0_C2_TCPC_INT_ODL, PIN(E, 0), GPIO_INT_FALLING, tcpc_alert_event)
+GPIO_INT(USB_C0_TCPC_INT_ODL, PIN(E, 0), GPIO_INT_FALLING, tcpc_alert_event)
GPIO_INT(USB_C0_PPC_INT_ODL, PIN(6, 2), GPIO_INT_FALLING, ppc_interrupt)
-GPIO_INT(USB_C0_RT_INT_ODL, PIN(B, 1), GPIO_INT_FALLING, retimer_interrupt)
GPIO_INT(USB_C1_BC12_INT_ODL, PIN(5, 0), GPIO_INT_FALLING, bc12_interrupt)
GPIO_INT(USB_C1_PPC_INT_ODL, PIN(F, 5), GPIO_INT_FALLING, ppc_interrupt)
GPIO_INT(USB_C1_TCPC_INT_ODL, PIN(A, 2), GPIO_INT_FALLING, tcpc_alert_event)
-GPIO_INT(USB_C2_BC12_INT_ODL, PIN(8, 3), GPIO_INT_FALLING, bc12_interrupt)
-GPIO_INT(USB_C2_PPC_INT_ODL, PIN(7, 0), GPIO_INT_FALLING, ppc_interrupt)
-GPIO_INT(USB_C2_RT_INT_ODL, PIN(4, 1), GPIO_INT_FALLING, retimer_interrupt)
GPIO_INT(BJ_ADP_PRESENT_ODL, PIN(8, 2), GPIO_INT_BOTH | GPIO_PULL_UP, adp_connect_interrupt)
GPIO_INT(EC_RECOVERY_BTN_OD, PIN(2, 3), GPIO_INT_BOTH, button_interrupt)
GPIO_INT(HDMI_CONN_OC_ODL, PIN(2, 4), GPIO_INPUT | GPIO_INT_BOTH, port_ocp_interrupt)
@@ -34,11 +30,6 @@ GPIO_INT(USB_A0_OC_ODL, PIN(3, 1), GPIO_INPUT | GPIO_PULL_UP | GPIO
GPIO_INT(USB_A1_OC_ODL, PIN(3, 0), GPIO_INPUT | GPIO_PULL_UP | GPIO_INT_BOTH, port_ocp_interrupt)
GPIO_INT(USB_A2_OC_ODL, PIN(2, 7), GPIO_INPUT | GPIO_PULL_UP | GPIO_INT_BOTH, port_ocp_interrupt)
GPIO_INT(USB_A3_OC_ODL, PIN(2, 6), GPIO_INPUT | GPIO_PULL_UP | GPIO_INT_BOTH, port_ocp_interrupt)
-#ifdef SECTION_IS_RW
-GPIO_INT(QI_INT_ODL, PIN(9, 6), GPIO_INT_FALLING, pchg_irq)
-#else
-UNIMPLEMENTED(QI_INT_ODL)
-#endif
/* CCD */
GPIO(CCD_MODE_ODL, PIN(E, 5), GPIO_INPUT)
@@ -54,8 +45,25 @@ GPIO(EN_PP5000_FAN, PIN(6, 1), GPIO_OUT_HIGH)
GPIO(ANALOG_PPVAR_PWR_IN_IMON_EC, PIN(4, 2), GPIO_INPUT)
/* Display */
-GPIO(DP_CONN_OC_ODL, PIN(2, 5), GPIO_INPUT)
-
+GPIO(EC_OVERRIDE_SCLR_EN, PIN(D, 4), GPIO_OUT_HIGH)
+
+/* TODO(b/260063632): the gpio pin control is wip, setting to level high
+ to enable the backlight by default */
+GPIO(EC_12VSC_EN, PIN(D, 2), GPIO_OUT_HIGH)
+
+GPIO(OSD_STS, PIN(4, 1), GPIO_INPUT)
+GPIO(DISP_MODE, PIN(A, 0), GPIO_INPUT)
+GPIO(PANEL_PWR_STS, PIN(9, 5), GPIO_INPUT)
+GPIO(EN_SCLR_RAILS, PIN(0, 4), GPIO_INPUT)
+GPIO(HDMI_5V_IN, PIN(9, 3), GPIO_INPUT)
+GPIO(HDMI0_CABLE_DET, PIN(9, 6), GPIO_INPUT)
+GPIO(WP_EC, PIN(C, 3), GPIO_INPUT)
+GPIO(OSD_INT, PIN(0, 5), GPIO_INPUT)
+
+/* Audio */
+/* TODO(b/260063632): the gpio pin control is wip, setting to level high
+ to enable the speaker by default */
+GPIO(EC_AMP_SD, PIN(5, 6), GPIO_OUT_HIGH)
/* BarrelJack */
GPIO(EN_PPVAR_BJ_ADP_L, PIN(0, 7), GPIO_OUT_LOW)
@@ -79,17 +87,6 @@ GPIO(CPU_C10_GATE_L, PIN(6, 7), GPIO_INPUT)
GPIO(EC_PCH_PWR_BTN_ODL, PIN(C, 1), GPIO_ODR_HIGH)
GPIO(GSC_EC_RECOVERY_BTN_OD, PIN(2, 2), GPIO_INPUT)
-/* NFC */
-/* TODO(b/194068530): Enable NFC */
-GPIO(NFC_COIL_ACT_L, PIN(D, 4), GPIO_INPUT)
-GPIO(NFC_LOW_POWER_MODE, PIN(9, 5), GPIO_OUT_HIGH)
-GPIO(NFC_CARD_DET_L, PIN(A, 3), GPIO_INPUT)
-GPIO(EN_NFC_BUZZER, PIN(0, 5), GPIO_OUT_LOW)
-
-/* Wireless Charger */
-GPIO(EC_QI_PWR, PIN(D, 2), GPIO_OUT_LOW)
-GPIO(QI_RESET_L, PIN(9, 3), GPIO_OUT_HIGH)
-
/* HDMI CEC */
/* TODO(b/197474873): Enable HDMI CEC */
GPIO(HDMI_CEC_IN, PIN(4, 0), GPIO_INPUT)
@@ -97,20 +94,16 @@ GPIO(HDMI_CEC_OUT, PIN(D, 3), GPIO_OUT_HIGH | GPIO_OPEN_DRAIN)
GPIO(HDMI_CEC_PULL_UP, PIN(C, 2), GPIO_OUT_HIGH)
/* I2C SCL/SDA */
-GPIO(EC_I2C_QI_SCL, PIN(3, 3), GPIO_INPUT)
-GPIO(EC_I2C_QI_SDA, PIN(3, 6), GPIO_INPUT)
+GPIO(SMSCALER_CLK, PIN(3, 3), GPIO_INPUT)
+GPIO(SMSCALER_DATA, PIN(3, 6), GPIO_INPUT)
GPIO(EC_I2C_MISC_SCL_R, PIN(B, 3), GPIO_INPUT)
GPIO(EC_I2C_MISC_SDA_R, PIN(B, 2), GPIO_INPUT)
-GPIO(EC_I2C_DP_SCL, PIN(B, 5), GPIO_INPUT)
-GPIO(EC_I2C_DP_SDA, PIN(B, 4), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_C2_PPC_SCL, PIN(9, 2), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_C2_PPC_SDA, PIN(9, 1), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_C2_RT_SCL, PIN(D, 1), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_C2_RT_SDA, PIN(D, 0), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_C2_TCPC_SCL, PIN(9, 0), GPIO_INPUT)
-GPIO(EC_I2C_USB_C0_C2_TCPC_SDA, PIN(8, 7), GPIO_INPUT)
-GPIO(EC_I2C_USB_C1_MIX_SCL, PIN(E, 4), GPIO_INPUT)
-GPIO(EC_I2C_USB_C1_MIX_SDA, PIN(E, 3), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_PPC_BC_SCL, PIN(9, 2), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_PPC_BC_SDA, PIN(9, 1), GPIO_INPUT)
+GPIO(EC_I2C_USB_C1_PPC_BC_SCL, PIN(D, 1), GPIO_INPUT)
+GPIO(EC_I2C_USB_C1_PPC_BC_SDA, PIN(D, 0), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_TCPC_SCL, PIN(9, 0), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_TCPC_SDA, PIN(8, 7), GPIO_INPUT)
GPIO(EC_I2C_USB_C1_TCPC_SCL, PIN(F, 3), GPIO_INPUT)
GPIO(EC_I2C_USB_C1_TCPC_SDA, PIN(F, 2), GPIO_INPUT)
@@ -128,36 +121,26 @@ GPIO(USB_A_OC_SOC_L, PIN(8, 0), GPIO_OUT_HIGH)
/* LED */
/* TODO(b/197471359): LED implementation */
-GPIO(LED_GREEN_L, PIN(C, 3), GPIO_OUT_LOW)
GPIO(LED_RED_L, PIN(C, 4), GPIO_OUT_LOW)
/* USBC */
-GPIO(USB_C0_C2_TCPC_RST_ODL, PIN(A, 7), GPIO_ODR_LOW)
+GPIO(USB_C0_FRS_EN, PIN(9, 7), GPIO_OUT_LOW)
+GPIO(USB_C0_RT_RST_L, PIN(A, 7), GPIO_OUT_HIGH)
GPIO(USB_C1_FRS_EN, PIN(9, 4), GPIO_OUT_LOW)
-GPIO(USB_C1_RT_INT_ODL, PIN(A, 0), GPIO_INPUT)
-GPIO(USB_C1_RT_RST_R_L, PIN(0, 2), GPIO_OUT_LOW)
+GPIO(USB_C1_RT_RST_L, PIN(0, 2), GPIO_OUT_HIGH)
/* GPIO02_P2 to PU */
/* GPIO03_P2 to PU */
-IOEX(USB_C0_OC_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 4), GPIO_ODR_HIGH)
-IOEX(USB_C0_FRS_EN, EXPIN(IOEX_C0_NCT38XX, 0, 6), GPIO_LOW)
-IOEX(USB_C0_RT_RST_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 7), GPIO_ODR_LOW)
-
-IOEX(USB_C2_RT_RST_ODL, EXPIN(IOEX_C2_NCT38XX, 0, 2), GPIO_ODR_LOW)
-IOEX(USB_C1_OC_ODL, EXPIN(IOEX_C2_NCT38XX, 0, 3), GPIO_ODR_HIGH)
-IOEX(USB_C2_OC_ODL, EXPIN(IOEX_C2_NCT38XX, 0, 4), GPIO_ODR_HIGH)
-IOEX(USB_C2_FRS_EN, EXPIN(IOEX_C2_NCT38XX, 0, 6), GPIO_LOW)
/* GPIO07_P2 to PU */
/* UART alternate functions */
ALTERNATE(PIN_MASK(6, 0x30), 0, MODULE_UART, 0) /* GPIO64/CR_SIN1, GPO65/CR_SOUT1/FLPRG1_L */
/* I2C alternate functions */
-ALTERNATE(PIN_MASK(3, 0x48), 0, MODULE_I2C, 0) /* GPIO33/I2C5_SCL0/CTS_L, GPIO36/RTS_L/I2C5_SDA0 */
+ALTERNATE(PIN_MASK(3, 0x48), 0, MODULE_I2C, 0) /* GPIO36/RTS_L/I2C5_SDA0, GPIO33/I2C5_SCL0/CTS_L */
ALTERNATE(PIN_MASK(8, 0x80), 0, MODULE_I2C, 0) /* GPIO87/I2C1_SDA0 */
ALTERNATE(PIN_MASK(9, 0x07), 0, MODULE_I2C, 0) /* GPIO92/I2C2_SCL0, GPIO91/I2C2_SDA0, GPIO90/I2C1_SCL0 */
ALTERNATE(PIN_MASK(B, 0x0c), 0, MODULE_I2C, 0) /* GPIOB3/I2C7_SCL0/DCD_L, GPIOB2/I2C7_SDA0/DSR_L */
-ALTERNATE(PIN_MASK(B, 0x30), 0, MODULE_I2C, 0) /* GPIOB5/I2C0_SCL0, GPIOB4/I2C0_SDA0 */
ALTERNATE(PIN_MASK(D, 0x03), 0, MODULE_I2C, 0) /* GPIOD1/I2C3_SCL0, GPIOD0/I2C3_SDA0 */
ALTERNATE(PIN_MASK(E, 0x18), 0, MODULE_I2C, 0) /* GPIOE4/I2C6_SCL1/I3C_SCL, GPIOE3/I2C6_SDA1/I3C_SDA */
ALTERNATE(PIN_MASK(F, 0x0c), 0, MODULE_I2C, 0) /* GPIOF3/I2C4_SCL1, GPIOF2/I2C4_SDA1 */
@@ -178,10 +161,14 @@ UNUSED(PIN(3, 2)) /* GPO32/TRIS_L */
UNUSED(PIN(3, 5)) /* GPO35/CR_SOUT4/TEST_L */
UNUSED(PIN(6, 6)) /* GPIO66 */
UNUSED(PIN(8, 1)) /* GPIO81/PECI_DATA */
-UNUSED(PIN(5, 6)) /* GPIO56/CLKRUN# */
-UNUSED(PIN(9, 7)) /* GPIO97 */
UNUSED(PIN(8, 6)) /* GPIO86/TXD/CR_SOUT2 */
UNUSED(PIN(1, 3)) /* KSO06/GPO13/GP_SEL# */
UNUSED(PIN(1, 2)) /* KSO07/GPO12/JEN# */
UNUSED(PIN(0, 6)) /* KSO11/GPIO06/P80_CLK */
-UNUSED(PIN(0, 4)) /* KSO13/GPIO04 */
+UNUSED(PIN(B, 4)) /* GPIOB4/I2C0_SDA0 */
+UNUSED(PIN(2, 5)) /* KSI4/GPIO25/TRACECLK/GP_SCLK */
+UNUSED(PIN(B, 5)) /* GPIOB5/I2C0_SCL0 */
+UNUSED(PIN(8, 3)) /* KSO15/GPIO83 */
+UNUSED(PIN(B, 1)) /* KSO17/GPIOB1/CR_SIN4 */
+UNUSED(PIN(7, 0)) /* GPIO70/PS2_DAT0 */
+UNUSED(PIN(A, 3)) /* SPIP_MOSI/GPIOA3 */
diff --git a/board/gaelin/i2c.c b/board/gaelin/i2c.c
index 0a0b6b69a6..f9bfa11657 100644
--- a/board/gaelin/i2c.c
+++ b/board/gaelin/i2c.c
@@ -11,60 +11,44 @@
/* I2C port map configuration */
const struct i2c_port_t i2c_ports[] = {
{
- /* I2C0 */
- .name = "dp_redriver",
- .port = I2C_PORT_DP_REDRIVER,
- .kbps = 400,
- .scl = GPIO_EC_I2C_DP_SCL,
- .sda = GPIO_EC_I2C_DP_SDA,
- },
- {
/* I2C1 */
- .name = "tcpc0,2",
- .port = I2C_PORT_USB_C0_C2_TCPC,
+ .name = "tcpc0",
+ .port = I2C_PORT_USB_C0_TCPC,
.kbps = 1000,
- .scl = GPIO_EC_I2C_USB_C0_C2_TCPC_SCL,
- .sda = GPIO_EC_I2C_USB_C0_C2_TCPC_SDA,
+ .scl = GPIO_EC_I2C_USB_C0_TCPC_SCL,
+ .sda = GPIO_EC_I2C_USB_C0_TCPC_SDA,
},
{
/* I2C2 */
- .name = "ppc0,2",
- .port = I2C_PORT_USB_C0_C2_PPC,
+ .name = "ppc0",
+ .port = I2C_PORT_USB_C0_PPC,
.kbps = 1000,
- .scl = GPIO_EC_I2C_USB_C0_C2_PPC_SCL,
- .sda = GPIO_EC_I2C_USB_C0_C2_PPC_SDA,
+ .scl = GPIO_EC_I2C_USB_C0_PPC_BC_SCL,
+ .sda = GPIO_EC_I2C_USB_C0_PPC_BC_SDA,
},
{
/* I2C3 */
- .name = "retimer0,2",
- .port = I2C_PORT_USB_C0_C2_MUX,
+ .name = "ppc1",
+ .port = I2C_PORT_USB_C1_PPC,
.kbps = 1000,
- .scl = GPIO_EC_I2C_USB_C0_C2_RT_SCL,
- .sda = GPIO_EC_I2C_USB_C0_C2_RT_SDA,
+ .scl = GPIO_EC_I2C_USB_C1_PPC_BC_SCL,
+ .sda = GPIO_EC_I2C_USB_C1_PPC_BC_SDA,
},
{
- /* I2C4 C1 TCPC */
+ /* I2C4 */
.name = "tcpc1",
.port = I2C_PORT_USB_C1_TCPC,
- .kbps = 400,
+ .kbps = 1000,
.scl = GPIO_EC_I2C_USB_C1_TCPC_SCL,
.sda = GPIO_EC_I2C_USB_C1_TCPC_SDA,
},
{
/* I2C5 */
- .name = "wireless_charger",
- .port = I2C_PORT_QI,
+ .name = "scaler",
+ .port = I2C_PORT_SCALER,
.kbps = 400,
- .scl = GPIO_EC_I2C_QI_SCL,
- .sda = GPIO_EC_I2C_QI_SDA,
- },
- {
- /* I2C6 */
- .name = "ppc1",
- .port = I2C_PORT_USB_C1_PPC,
- .kbps = 1000,
- .scl = GPIO_EC_I2C_USB_C1_MIX_SCL,
- .sda = GPIO_EC_I2C_USB_C1_MIX_SDA,
+ .scl = GPIO_SMSCALER_CLK,
+ .sda = GPIO_SMSCALER_DATA,
},
{
/* I2C7 */
diff --git a/board/gaelin/led.c b/board/gaelin/led.c
index 842cee0530..a4b9a0d094 100644
--- a/board/gaelin/led.c
+++ b/board/gaelin/led.c
@@ -249,8 +249,8 @@ int led_set_brightness(enum ec_led_id id, const uint8_t *brightness)
else
return set_color(id, LED_OFF, 0);
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/gaelin/pwm.c b/board/gaelin/pwm.c
index 3d4335f453..fe7e82894a 100644
--- a/board/gaelin/pwm.c
+++ b/board/gaelin/pwm.c
@@ -16,8 +16,8 @@ const struct pwm_t pwm_channels[] = {
PWM_CONFIG_DSLEEP,
.freq = 2000 },
[PWM_CH_FAN] = { .channel = 5,
- .flags = PWM_CONFIG_OPEN_DRAIN | PWM_CONFIG_DSLEEP,
- .freq = 1000 },
+ .flags = PWM_CONFIG_OPEN_DRAIN,
+ .freq = 25000 },
[PWM_CH_LED_RED] = { .channel = 2,
.flags = PWM_CONFIG_ACTIVE_LOW | PWM_CONFIG_DSLEEP,
.freq = 2000 },
diff --git a/board/gaelin/thermal.c b/board/gaelin/thermal.c
new file mode 100644
index 0000000000..e15e0043e1
--- /dev/null
+++ b/board/gaelin/thermal.c
@@ -0,0 +1,140 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "chipset.h"
+#include "common.h"
+#include "console.h"
+#include "fan.h"
+#include "hooks.h"
+#include "host_command.h"
+#include "temp_sensor.h"
+#include "thermal.h"
+#include "util.h"
+
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_THERMAL, outstr)
+#define CPRINTS(format, args...) cprints(CC_THERMAL, format, ##args)
+
+struct fan_step {
+ /*
+ * Sensor 1~4 trigger point, set -1 if we're not using this
+ * sensor to determine fan speed.
+ */
+ int8_t on[TEMP_SENSOR_COUNT];
+ /*
+ * Sensor 1~4 trigger point, set -1 if we're not using this
+ * sensor to determine fan speed.
+ */
+ int8_t off[TEMP_SENSOR_COUNT];
+ /* Fan rpm */
+ int16_t rpm[FAN_CH_COUNT];
+};
+
+static const struct fan_step fan_table[] = {
+ {
+ /* level 0 */
+ .on = { 65, -1, -1, -1 },
+ .off = { 0, -1, -1, -1 },
+ .rpm = { 2350 },
+ },
+ {
+ /* level 1 */
+ .on = { 80, -1, -1, -1 },
+ .off = { 60, -1, -1, -1 },
+ .rpm = { 2350 },
+ },
+ {
+ /* level 2 */
+ .on = { 87, -1, -1, -1 },
+ .off = { 75, -1, -1, -1 },
+ .rpm = { 3250 },
+ },
+ {
+ /* level 3 */
+ .on = { 91, -1, -1, -1 },
+ .off = { 82, -1, -1, -1 },
+ .rpm = { 3750 },
+ },
+ {
+ /* level 4 */
+ .on = { 100, -1, -1, -1 },
+ .off = { 86, -1, -1, -1 },
+ .rpm = { 4100 },
+ },
+};
+const int num_fan_levels = ARRAY_SIZE(fan_table);
+
+int fan_table_to_rpm(int fan, int *temp, enum temp_sensor_id temp_sensor)
+{
+ /* current fan level */
+ static int current_level;
+ /* previous fan level */
+ static int prev_current_level;
+ /* previous sensor temperature */
+ static int prev_temp[TEMP_SENSOR_COUNT];
+ int i;
+ int new_rpm = 0;
+
+ /*
+ * Compare the current and previous temperature, we have
+ * the three paths:
+ * 1. decreasing path. (check the release point)
+ * 2. increasing path. (check the trigger point)
+ * 3. invariant path. (return the current RPM)
+ */
+ if (temp[temp_sensor] < prev_temp[temp_sensor]) {
+ for (i = current_level; i > 0; i--) {
+ if (temp[temp_sensor] < fan_table[i].off[temp_sensor])
+ current_level = i - 1;
+ else
+ break;
+ }
+ } else if (temp[temp_sensor] > prev_temp[temp_sensor]) {
+ for (i = current_level; i < num_fan_levels; i++) {
+ if (temp[temp_sensor] > fan_table[i].on[temp_sensor])
+ current_level = i + 1;
+ else
+ break;
+ }
+ }
+
+ if (current_level < 0)
+ current_level = 0;
+ if (current_level >= num_fan_levels)
+ current_level = num_fan_levels - 1;
+
+ if (current_level != prev_current_level) {
+ CPRINTS("temp: %d, prev_temp: %d", temp[temp_sensor],
+ prev_temp[temp_sensor]);
+ CPRINTS("current_level: %d", current_level);
+ }
+
+ prev_temp[temp_sensor] = temp[temp_sensor];
+ prev_current_level = current_level;
+
+ switch (fan) {
+ case FAN_CH_0:
+ new_rpm = fan_table[current_level].rpm[FAN_CH_0];
+ break;
+ default:
+ break;
+ }
+
+ return new_rpm;
+}
+
+void board_override_fan_control(int fan, int *temp)
+{
+ if (chipset_in_state(CHIPSET_STATE_ON)) {
+ fan_set_rpm_mode(FAN_CH(fan), 1);
+ fan_set_rpm_target(FAN_CH(fan),
+ fan_table_to_rpm(FAN_CH(fan), temp,
+ TEMP_SENSOR_1_CPU));
+ } else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND)) {
+ /* Stop fan when enter S0ix */
+ fan_set_rpm_mode(FAN_CH(fan), 1);
+ fan_set_rpm_target(FAN_CH(fan), 0);
+ }
+}
diff --git a/board/gaelin/usbc_config.c b/board/gaelin/usbc_config.c
index 806ff2c4ee..98595fc607 100644
--- a/board/gaelin/usbc_config.c
+++ b/board/gaelin/usbc_config.c
@@ -10,17 +10,13 @@
#include "compile_time_macros.h"
#include "console.h"
#include "driver/bc12/pi3usb9201_public.h"
-#include "driver/ppc/syv682x_public.h"
-#include "driver/retimer/bb_retimer_public.h"
-#include "driver/retimer/kb800x.h"
-#include "driver/tcpm/nct38xx.h"
-#include "driver/tcpm/rt1715.h"
+#include "driver/ppc/nx20p348x.h"
+#include "driver/tcpm/ps8xxx_public.h"
#include "driver/tcpm/tcpci.h"
#include "ec_commands.h"
#include "gpio.h"
#include "gpio_signal.h"
#include "hooks.h"
-#include "ioexpander.h"
#include "system.h"
#include "task.h"
#include "task_id.h"
@@ -40,29 +36,22 @@ const struct tcpc_config_t tcpc_config[] = {
[USBC_PORT_C0] = {
.bus_type = EC_BUS_TYPE_I2C,
.i2c_info = {
- .port = I2C_PORT_USB_C0_C2_TCPC,
- .addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS,
+ .port = I2C_PORT_USB_C0_TCPC,
+ .addr_flags = PS8XXX_I2C_ADDR1_FLAGS,
},
- .drv = &nct38xx_tcpm_drv,
+ .drv = &ps8xxx_tcpm_drv,
.flags = TCPC_FLAGS_TCPCI_REV2_0 |
- TCPC_FLAGS_NO_DEBUG_ACC_CONTROL,
+ TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V,
},
[USBC_PORT_C1] = {
.bus_type = EC_BUS_TYPE_I2C,
.i2c_info = {
.port = I2C_PORT_USB_C1_TCPC,
- .addr_flags = RT1715_I2C_ADDR_FLAGS,
+ .addr_flags = PS8XXX_I2C_ADDR2_FLAGS,
},
- .drv = &rt1715_tcpm_drv,
- },
- [USBC_PORT_C2] = {
- .bus_type = EC_BUS_TYPE_I2C,
- .i2c_info = {
- .port = I2C_PORT_USB_C0_C2_TCPC,
- .addr_flags = NCT38XX_I2C_ADDR2_1_FLAGS,
- },
- .drv = &nct38xx_tcpm_drv,
- .flags = TCPC_FLAGS_TCPCI_REV2_0,
+ .drv = &ps8xxx_tcpm_drv,
+ .flags = TCPC_FLAGS_TCPCI_REV2_0 |
+ TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V,
},
};
BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == USBC_PORT_COUNT);
@@ -71,19 +60,16 @@ BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT);
/* USBC PPC configuration */
struct ppc_config_t ppc_chips[] = {
[USBC_PORT_C0] = {
- .i2c_port = I2C_PORT_USB_C0_C2_PPC,
- .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
- .drv = &syv682x_drv,
+ /* Compatible with Silicon Mitus SM5360A */
+ .i2c_port = I2C_PORT_USB_C0_PPC,
+ .i2c_addr_flags = NX20P3483_ADDR2_FLAGS,
+ .drv = &nx20p348x_drv,
},
[USBC_PORT_C1] = {
+ /* Compatible with Silicon Mitus SM5360A */
.i2c_port = I2C_PORT_USB_C1_PPC,
- .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
- .drv = &syv682x_drv,
- },
- [USBC_PORT_C2] = {
- .i2c_port = I2C_PORT_USB_C0_C2_PPC,
- .i2c_addr_flags = SYV682X_ADDR2_FLAGS,
- .drv = &syv682x_drv,
+ .i2c_addr_flags = NX20P3483_ADDR3_FLAGS,
+ .drv = &nx20p348x_drv,
},
};
BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
@@ -95,200 +81,100 @@ static const struct usb_mux_chain usbc0_tcss_usb_mux = {
.mux =
&(const struct usb_mux){
.usb_port = USBC_PORT_C0,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
+ .driver = &tcpci_tcpm_usb_mux_driver,
+ .hpd_update = &ps8xxx_tcpc_update_hpd_status,
},
};
static const struct usb_mux_chain usbc1_tcss_usb_mux = {
.mux =
&(const struct usb_mux){
.usb_port = USBC_PORT_C1,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
+ .driver = &tcpci_tcpm_usb_mux_driver,
+ .hpd_update = &ps8xxx_tcpc_update_hpd_status,
},
};
-static const struct usb_mux_chain usbc2_tcss_usb_mux = {
- .mux =
- &(const struct usb_mux){
- .usb_port = USBC_PORT_C2,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
- },
-};
-
-struct kb800x_control_t kb800x_control[] = {
- [USBC_PORT_C0] = {
- },
- [USBC_PORT_C1] = {
- .retimer_rst_gpio = GPIO_USB_C1_RT_RST_R_L,
- .ss_lanes = {
- [KB800X_A0] = KB800X_TX0, [KB800X_A1] = KB800X_RX0,
- [KB800X_B0] = KB800X_RX1, [KB800X_B1] = KB800X_TX1,
- [KB800X_C0] = KB800X_RX0, [KB800X_C1] = KB800X_TX0,
- [KB800X_D0] = KB800X_TX1, [KB800X_D1] = KB800X_RX1,
- }
- },
- [USBC_PORT_C2] = {
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(kb800x_control) == USBC_PORT_COUNT);
const struct usb_mux_chain usb_muxes[] = {
[USBC_PORT_C0] = {
.mux = &(const struct usb_mux) {
.usb_port = USBC_PORT_C0,
- .driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
- .i2c_port = I2C_PORT_USB_C0_C2_MUX,
- .i2c_addr_flags = USBC_PORT_C0_BB_RETIMER_I2C_ADDR,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
},
.next = &usbc0_tcss_usb_mux,
},
[USBC_PORT_C1] = {
.mux = &(const struct usb_mux) {
.usb_port = USBC_PORT_C1,
- .driver = &kb800x_usb_mux_driver,
- .i2c_port = I2C_PORT_USB_C1_MUX,
- .i2c_addr_flags = KB800X_I2C_ADDR0_FLAGS,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
},
.next = &usbc1_tcss_usb_mux,
},
- [USBC_PORT_C2] = {
- .mux = &(const struct usb_mux) {
- .usb_port = USBC_PORT_C2,
- .driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
- .i2c_port = I2C_PORT_USB_C0_C2_MUX,
- .i2c_addr_flags = USBC_PORT_C2_BB_RETIMER_I2C_ADDR,
- },
- .next = &usbc2_tcss_usb_mux,
- },
};
BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == USBC_PORT_COUNT);
/* BC1.2 charger detect configuration */
const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = {
[USBC_PORT_C0] = {
- .i2c_port = I2C_PORT_USB_C0_C2_BC12,
+ .i2c_port = I2C_PORT_USB_C0_BC12,
.i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
},
[USBC_PORT_C1] = {
.i2c_port = I2C_PORT_USB_C1_BC12,
- .i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS,
- },
- [USBC_PORT_C2] = {
- .i2c_port = I2C_PORT_USB_C0_C2_BC12,
- .i2c_addr_flags = PI3USB9201_I2C_ADDR_1_FLAGS,
+ .i2c_addr_flags = PI3USB9201_I2C_ADDR_2_FLAGS,
},
};
BUILD_ASSERT(ARRAY_SIZE(pi3usb9201_bc12_chips) == USBC_PORT_COUNT);
-/*
- * USB C0 and C2 uses burnside bridge chips and have their reset
- * controlled by their respective TCPC chips acting as GPIO expanders.
- *
- * ioex_init() is normally called before we take the TCPCs out of
- * reset, so we need to start in disabled mode, then explicitly
- * call ioex_init().
- */
-
-struct ioexpander_config_t ioex_config[] = {
- [IOEX_C0_NCT38XX] = {
- .i2c_host_port = I2C_PORT_USB_C0_C2_TCPC,
- .i2c_addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS,
- .drv = &nct38xx_ioexpander_drv,
- .flags = IOEX_FLAGS_DEFAULT_INIT_DISABLED,
- },
- [IOEX_C2_NCT38XX] = {
- .i2c_host_port = I2C_PORT_USB_C0_C2_TCPC,
- .i2c_addr_flags = NCT38XX_I2C_ADDR2_1_FLAGS,
- .drv = &nct38xx_ioexpander_drv,
- .flags = IOEX_FLAGS_DEFAULT_INIT_DISABLED,
- },
-};
-BUILD_ASSERT(ARRAY_SIZE(ioex_config) == CONFIG_IO_EXPANDER_PORT_COUNT);
-
-__override int bb_retimer_power_enable(const struct usb_mux *me, bool enable)
+static void ps8815_reset(int port)
{
- enum ioex_signal rst_signal;
-
- if (me->usb_port == USBC_PORT_C0) {
- rst_signal = IOEX_USB_C0_RT_RST_ODL;
- } else if (me->usb_port == USBC_PORT_C2) {
- rst_signal = IOEX_USB_C2_RT_RST_ODL;
+ int val;
+ int i2c_port;
+ uint16_t i2c_addr_flags;
+ enum gpio_signal ps8xxx_rst_odl;
+
+ if (port == USBC_PORT_C0) {
+ ps8xxx_rst_odl = GPIO_USB_C0_RT_RST_L;
+ i2c_port = I2C_PORT_USB_C0_TCPC;
+ i2c_addr_flags = PS8XXX_I2C_ADDR1_FLAGS;
+ } else if (port == USBC_PORT_C1) {
+ ps8xxx_rst_odl = GPIO_USB_C1_RT_RST_L;
+ i2c_port = I2C_PORT_USB_C1_TCPC;
+ i2c_addr_flags = PS8XXX_I2C_ADDR2_FLAGS;
} else {
- return EC_ERROR_INVAL;
+ return;
}
- /*
- * We do not have a load switch for the burnside bridge chips,
- * so we only need to sequence reset.
- */
+ gpio_set_level(ps8xxx_rst_odl, 0);
+ msleep(GENERIC_MAX(PS8XXX_RESET_DELAY_MS, PS8815_PWR_H_RST_H_DELAY_MS));
+ gpio_set_level(ps8xxx_rst_odl, 1);
+ msleep(PS8815_FW_INIT_DELAY_MS);
- if (enable) {
- /*
- * Tpw, minimum time from VCC to RESET_N de-assertion is 100us.
- * For boards that don't provide a load switch control, the
- * retimer_init() function ensures power is up before calling
- * this function.
- */
- ioex_set_level(rst_signal, 1);
- /*
- * Allow 1ms time for the retimer to power up lc_domain
- * which powers I2C controller within retimer
- */
- msleep(1);
- } else {
- ioex_set_level(rst_signal, 0);
- msleep(1);
+ CPRINTS("[C%d] %s: patching ps8815 registers", port, __func__);
+
+ if (i2c_read8(i2c_port, i2c_addr_flags, 0x0f, &val) == EC_SUCCESS)
+ CPRINTS("ps8815: reg 0x0f was %02x", val);
+ else {
+ CPRINTS("delay 10ms to make sure ps8815 is waken from idle");
+ msleep(10);
}
- return EC_SUCCESS;
-}
-__override int bb_retimer_reset(const struct usb_mux *me)
-{
- /*
- * TODO(b/193402306, b/195375738): Remove this once transition to
- * QS Silicon is complete
- */
- bb_retimer_power_enable(me, false);
- msleep(5);
- bb_retimer_power_enable(me, true);
- msleep(25);
+ if (i2c_write8(i2c_port, i2c_addr_flags, 0x0f, 0x31) == EC_SUCCESS)
+ CPRINTS("ps8815: reg 0x0f set to 0x31");
- return EC_SUCCESS;
+ if (i2c_read8(i2c_port, i2c_addr_flags, 0x0f, &val) == EC_SUCCESS)
+ CPRINTS("ps8815: reg 0x0f now %02x", val);
}
void board_reset_pd_mcu(void)
{
- enum gpio_signal tcpc_rst;
-
- tcpc_rst = GPIO_USB_C0_C2_TCPC_RST_ODL;
-
- /*
- * TODO(b/179648104): figure out correct timing
- */
-
- gpio_set_level(tcpc_rst, 0);
- gpio_set_level(GPIO_USB_C1_RT_RST_R_L, 0);
-
- /*
- * delay for power-on to reset-off and min. assertion time
- */
-
- msleep(20);
-
- gpio_set_level(tcpc_rst, 1);
- gpio_set_level(GPIO_USB_C1_RT_RST_R_L, 1);
-
- /* wait for chips to come up */
-
- msleep(50);
-}
-
-static void enable_ioex(int ioex)
-{
- ioex_init(ioex);
+ ps8815_reset(USBC_PORT_C0);
+ usb_mux_hpd_update(USBC_PORT_C0, USB_PD_MUX_HPD_LVL_DEASSERTED |
+ USB_PD_MUX_HPD_IRQ_DEASSERTED);
+ ps8815_reset(USBC_PORT_C1);
+ usb_mux_hpd_update(USBC_PORT_C1, USB_PD_MUX_HPD_LVL_DEASSERTED |
+ USB_PD_MUX_HPD_IRQ_DEASSERTED);
}
static void board_tcpc_init(void)
@@ -296,25 +182,19 @@ static void board_tcpc_init(void)
/* Don't reset TCPCs after initial reset */
if (!system_jumped_late()) {
board_reset_pd_mcu();
-
- /*
- * These IO expander pins are implemented using the
- * C0/C2 TCPC, so they must be set up after the TCPC has
- * been taken out of reset.
- */
- enable_ioex(IOEX_C0_NCT38XX);
- enable_ioex(IOEX_C2_NCT38XX);
}
/* Enable PPC interrupts. */
gpio_enable_interrupt(GPIO_USB_C0_PPC_INT_ODL);
- gpio_enable_interrupt(GPIO_USB_C2_PPC_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL);
/* Enable TCPC interrupts. */
- gpio_enable_interrupt(GPIO_USB_C0_C2_TCPC_INT_ODL);
-
- gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C0_TCPC_INT_ODL);
gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL);
+
+ /* Enable BC1.2 interrupts. */
+ gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_ODL);
}
DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_CHIPSET);
@@ -322,8 +202,8 @@ uint16_t tcpc_get_alert_status(void)
{
uint16_t status = 0;
- if (gpio_get_level(GPIO_USB_C0_C2_TCPC_INT_ODL) == 0)
- status |= PD_STATUS_TCPC_ALERT_0 | PD_STATUS_TCPC_ALERT_2;
+ if (gpio_get_level(GPIO_USB_C0_TCPC_INT_ODL) == 0)
+ status |= PD_STATUS_TCPC_ALERT_0;
if (gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL) == 0)
status |= PD_STATUS_TCPC_ALERT_1;
@@ -337,15 +217,13 @@ int ppc_get_alert_status(int port)
return gpio_get_level(GPIO_USB_C0_PPC_INT_ODL) == 0;
else if (port == USBC_PORT_C1)
return gpio_get_level(GPIO_USB_C1_PPC_INT_ODL) == 0;
- else if (port == USBC_PORT_C2)
- return gpio_get_level(GPIO_USB_C2_PPC_INT_ODL) == 0;
return 0;
}
void tcpc_alert_event(enum gpio_signal signal)
{
switch (signal) {
- case GPIO_USB_C0_C2_TCPC_INT_ODL:
+ case GPIO_USB_C0_TCPC_INT_ODL:
schedule_deferred_pd_interrupt(USBC_PORT_C0);
break;
case GPIO_USB_C1_TCPC_INT_ODL:
@@ -365,9 +243,6 @@ void bc12_interrupt(enum gpio_signal signal)
case GPIO_USB_C1_BC12_INT_ODL:
usb_charger_task_set_event(1, USB_CHG_EVENT_BC12);
break;
- case GPIO_USB_C2_BC12_INT_ODL:
- usb_charger_task_set_event(2, USB_CHG_EVENT_BC12);
- break;
default:
break;
}
@@ -377,13 +252,10 @@ void ppc_interrupt(enum gpio_signal signal)
{
switch (signal) {
case GPIO_USB_C0_PPC_INT_ODL:
- syv682x_interrupt(USBC_PORT_C0);
+ nx20p348x_interrupt(USBC_PORT_C0);
break;
case GPIO_USB_C1_PPC_INT_ODL:
- syv682x_interrupt(USBC_PORT_C1);
- break;
- case GPIO_USB_C2_PPC_INT_ODL:
- syv682x_interrupt(USBC_PORT_C2);
+ nx20p348x_interrupt(USBC_PORT_C1);
break;
default:
break;
@@ -401,16 +273,3 @@ __override bool board_is_dts_port(int port)
{
return port == USBC_PORT_C0;
}
-
-__override bool board_is_tbt_usb4_port(int port)
-{
- return true;
-}
-
-__override enum tbt_compat_cable_speed board_get_max_tbt_speed(int port)
-{
- if (!board_is_tbt_usb4_port(port))
- return TBT_SS_RES_0;
-
- return TBT_SS_TBT_GEN3;
-}
diff --git a/board/gaelin/usbc_config.h b/board/gaelin/usbc_config.h
index 5e7beae21a..219ad9a745 100644
--- a/board/gaelin/usbc_config.h
+++ b/board/gaelin/usbc_config.h
@@ -8,13 +8,8 @@
#ifndef __CROS_EC_USBC_CONFIG_H
#define __CROS_EC_USBC_CONFIG_H
-#define CONFIG_USB_PD_PORT_MAX_COUNT 3
+#define CONFIG_USB_PD_PORT_MAX_COUNT 2
-enum usbc_port {
- USBC_PORT_C0 = 0,
- USBC_PORT_C1,
- USBC_PORT_C2,
- USBC_PORT_COUNT
-};
+enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_C1, USBC_PORT_COUNT };
#endif /* __CROS_EC_USBC_CONFIG_H */
diff --git a/board/galtic/board.c b/board/galtic/board.c
index af0638be20..9800c1150c 100644
--- a/board/galtic/board.c
+++ b/board/galtic/board.c
@@ -502,18 +502,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * TODO(b/151955431): Characterize the input current limit in case a
- * scaling needs to be applied here
- */
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_is_sourcing_vbus(int port)
{
int regval;
diff --git a/board/gelarshie/board.c b/board/gelarshie/board.c
index 11346a3c7d..174e4b0764 100644
--- a/board/gelarshie/board.c
+++ b/board/gelarshie/board.c
@@ -511,6 +511,7 @@ void board_tcpc_init(void)
/* 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);
@@ -682,8 +683,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -695,9 +696,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/gelarshie/board.h b/board/gelarshie/board.h
index 7e27c7a62f..737f005639 100644
--- a/board/gelarshie/board.h
+++ b/board/gelarshie/board.h
@@ -35,6 +35,7 @@
#undef CONFIG_CMD_ACCEL_FIFO
#undef CONFIG_CMD_ACCEL_INFO
#undef CONFIG_CMD_TASK_RESET
+#undef CONFIG_CONSOLE_CMDHELP
/* Battery */
#define CONFIG_BATTERY_DEVICE_CHEMISTRY "LION"
@@ -42,6 +43,9 @@
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
+/* charger margin */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* Enable PD3.0 */
#define CONFIG_USB_PD_REV30
/* BC 1.2 Charger */
diff --git a/board/gimble/board.c b/board/gimble/board.c
index 0ca135b9fd..5373eb2bff 100644
--- a/board/gimble/board.c
+++ b/board/gimble/board.c
@@ -185,16 +185,3 @@ __overridable void board_ps8xxx_tcpc_init(int port)
CPRINTS("ps8815: fail to write reg 0x%02x",
PS8815_REG_RX_EQ_AT_5G);
}
-
-__override void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- /*
- * Follow OEM request to limit the input current to
- * 90% negotiated limit.
- */
- charge_ma = charge_ma * 90 / 100;
-
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/gimble/board.h b/board/gimble/board.h
index 015f3f78e6..1d4099e7eb 100644
--- a/board/gimble/board.h
+++ b/board/gimble/board.h
@@ -196,6 +196,8 @@
#define CONFIG_CHARGER_BQ25710_SENSE_RESISTOR 10
#define CONFIG_CHARGER_BQ25710_SENSE_RESISTOR_AC 10
#define CONFIG_CHARGER_BQ25710_PSYS_SENSING
+/* OEM requested 10% derating */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 10
/* PROCHOT defines */
#define BATT_MAX_CONTINUE_DISCHARGE_WATT 45
diff --git a/board/gimble/charger.c b/board/gimble/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/gimble/charger.c
+++ b/board/gimble/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/gooey/board.c b/board/gooey/board.c
index 250f6afd61..544117f9c6 100644
--- a/board/gooey/board.c
+++ b/board/gooey/board.c
@@ -259,19 +259,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/gooey/board.h b/board/gooey/board.h
index b586c0f334..fde32f8866 100644
--- a/board/gooey/board.h
+++ b/board/gooey/board.h
@@ -32,6 +32,11 @@
*/
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* DAC for PSYS */
#define CONFIG_DAC
diff --git a/board/haboki/board.c b/board/haboki/board.c
index d7509115b5..8814871ed7 100644
--- a/board/haboki/board.c
+++ b/board/haboki/board.c
@@ -526,19 +526,17 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
/* Limit C1 on board version 0 to 2.0 A */
if ((board_version == 0) && (port == 1))
- icl = MIN(icl, 2000);
+ charge_ma = MIN(charge_ma, 2000);
/*
* TODO(b/151955431): Characterize the input current limit in case a
* scaling needs to be applied here
*/
- charge_set_input_current_limit(icl, charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
int board_set_active_charge_port(int port)
diff --git a/board/hammer/board.h b/board/hammer/board.h
index bce7dc39f4..dd4b337c66 100644
--- a/board/hammer/board.h
+++ b/board/hammer/board.h
@@ -83,7 +83,6 @@
#define CONFIG_LTO
#define CONFIG_FORCE_CONSOLE_RESUME
#define CONFIG_MATH_UTIL
-#define CONFIG_STM_HWTIMER32
/* USB Configuration */
#define CONFIG_USB
@@ -270,7 +269,7 @@
#ifdef BOARD_WAND
/* Battery and charger options. */
#define CONFIG_CHARGER
-#define CONFIG_CHARGER_INPUT_CURRENT 128
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 128
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
diff --git a/board/hatch_fp/board.h b/board/hatch_fp/board.h
index d36a9228c1..9e900a126a 100644
--- a/board/hatch_fp/board.h
+++ b/board/hatch_fp/board.h
@@ -235,7 +235,6 @@
#define CONFIG_SHA256
#define CONFIG_SHA256_UNROLLED
#define CONFIG_SPI
-#define CONFIG_STM_HWTIMER32
#define CONFIG_WP_ACTIVE_HIGH
#define CONFIG_PANIC_STRIP_GPR
diff --git a/board/hatch_fp/build.mk b/board/hatch_fp/build.mk
index 828e7523b3..894c907ab9 100644
--- a/board/hatch_fp/build.mk
+++ b/board/hatch_fp/build.mk
@@ -29,6 +29,7 @@ test-list-y=\
abort \
aes \
always_memset \
+ benchmark \
cec \
compile_time_macros \
cortexm_fpu \
@@ -39,6 +40,8 @@ test-list-y=\
flash_write_protect \
fpsensor \
fpsensor_hw \
+ ftrapv \
+ libc_printf \
mpu \
mutex \
panic \
@@ -46,6 +49,7 @@ test-list-y=\
pingpong \
printf \
queue \
+ rng_benchmark \
rollback \
rollback_entropy \
rsa3 \
diff --git a/board/herobrine/usbc_config.c b/board/herobrine/usbc_config.c
index 98d1b70bac..c80b00f0de 100644
--- a/board/herobrine/usbc_config.c
+++ b/board/herobrine/usbc_config.c
@@ -177,6 +177,7 @@ void board_tcpc_init(void)
/* 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);
@@ -285,8 +286,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -298,8 +299,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/hoho/board.h b/board/hoho/board.h
index 7768ab7293..f6421fdaf0 100644
--- a/board/hoho/board.h
+++ b/board/hoho/board.h
@@ -15,7 +15,6 @@
#define CONFIG_UART_CONSOLE 1
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_ADC
#define CONFIG_BOARD_PRE_INIT
#define CONFIG_CMD_SPI_FLASH
diff --git a/board/homestar/board.c b/board/homestar/board.c
index ab4b95b625..11035d2034 100644
--- a/board/homestar/board.c
+++ b/board/homestar/board.c
@@ -459,6 +459,7 @@ void board_tcpc_init(void)
/* 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);
@@ -630,8 +631,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -643,9 +644,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/homestar/board.h b/board/homestar/board.h
index 230aa6e7d3..60d943b300 100644
--- a/board/homestar/board.h
+++ b/board/homestar/board.h
@@ -27,6 +27,9 @@
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
+/* charger margin */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* Enable PD3.0 */
#define CONFIG_USB_PD_REV30
diff --git a/board/host/charger.c b/board/host/charger.c
index fddadf245d..0580ddcb41 100644
--- a/board/host/charger.c
+++ b/board/host/charger.c
@@ -136,7 +136,8 @@ static enum ec_error_list mock_set_input_current_limit(int chgnum, int current)
static enum ec_error_list mock_post_init(int chgnum)
{
- mock_current = mock_input_current = CONFIG_CHARGER_INPUT_CURRENT;
+ mock_current = mock_input_current =
+ CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT;
return EC_SUCCESS;
}
diff --git a/board/hyperdebug/board.c b/board/hyperdebug/board.c
index 37e41f66a9..66cd981dca 100644
--- a/board/hyperdebug/board.c
+++ b/board/hyperdebug/board.c
@@ -20,6 +20,8 @@
#include "usb-stream.h"
#include "gpio_list.h"
+#include <stdio.h>
+
void board_config_pre_init(void)
{
/* enable SYSCFG clock */
@@ -236,6 +238,26 @@ static void board_init(void)
}
DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
+const char *board_read_serial(void)
+{
+ const uint32_t *stm32_unique_id =
+ (const uint32_t *)STM32_UNIQUE_ID_BASE;
+ static char serial[13];
+
+ // Compute 12 hex digits from three factory programmed 32-bit "Unique
+ // ID" words in a manner that has been observed to be consistent with
+ // how the STM DFU ROM bootloader presents its serial number. This
+ // means that the serial number of any particular HyperDebug board will
+ // remain the same as it enters and leaves DFU mode for software
+ // upgrade.
+ int rc = snprintf(serial, sizeof(serial), "%08X%04X",
+ stm32_unique_id[0] + stm32_unique_id[2],
+ stm32_unique_id[1] >> 16);
+ if (12 != rc)
+ return NULL;
+ return serial;
+}
+
/**
* Find a GPIO signal by name.
*
diff --git a/board/hyperdebug/board.h b/board/hyperdebug/board.h
index 9d15311784..86c2c88ad0 100644
--- a/board/hyperdebug/board.h
+++ b/board/hyperdebug/board.h
@@ -36,7 +36,6 @@
#undef CONFIG_UART_RX_DMA
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
#undef CONFIG_PVD
/*
diff --git a/board/icarus/board.c b/board/icarus/board.c
index be464e3a77..4d145287a4 100644
--- a/board/icarus/board.c
+++ b/board/icarus/board.c
@@ -204,14 +204,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/icarus/board.h b/board/icarus/board.h
index 98b6da3fd5..ca1a236307 100644
--- a/board/icarus/board.h
+++ b/board/icarus/board.h
@@ -24,6 +24,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/jacuzzi/board.c b/board/jacuzzi/board.c
index 129b75f8e2..d9e88d3f80 100644
--- a/board/jacuzzi/board.c
+++ b/board/jacuzzi/board.c
@@ -244,14 +244,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/jacuzzi/board.h b/board/jacuzzi/board.h
index 0fd5f6496d..d5d0523790 100644
--- a/board/jacuzzi/board.h
+++ b/board/jacuzzi/board.h
@@ -34,6 +34,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/kano/charger.c b/board/kano/charger.c
index ab48a7338c..95227f753a 100644
--- a/board/kano/charger.c
+++ b/board/kano/charger.c
@@ -79,10 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/kappa/board.c b/board/kappa/board.c
index c04b24d3ed..c00e375560 100644
--- a/board/kappa/board.c
+++ b/board/kappa/board.c
@@ -217,14 +217,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/kappa/board.h b/board/kappa/board.h
index 6b6461ae83..5c49053a7b 100644
--- a/board/kappa/board.h
+++ b/board/kappa/board.h
@@ -26,6 +26,7 @@
#define CONFIG_BATTERY_COUNT 1
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_BC12_DETECT_PI3USB9201
diff --git a/board/kappa/led.c b/board/kappa/led.c
index 1dc86013d7..d9ecb33da0 100644
--- a/board/kappa/led.c
+++ b/board/kappa/led.c
@@ -129,6 +129,7 @@ static void led_set_battery(void)
case PWR_STATE_FORCED_IDLE:
led_set_color_battery((battery_ticks & 0x2) ? LED_AMBER :
LED_OFF);
+ break;
default:
/* Other states don't alter LED behavior */
break;
diff --git a/board/kingoftown/usbc_config.c b/board/kingoftown/usbc_config.c
index f0f17e93a9..eafd55bcf2 100644
--- a/board/kingoftown/usbc_config.c
+++ b/board/kingoftown/usbc_config.c
@@ -225,6 +225,7 @@ void board_tcpc_init(void)
/* 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);
@@ -333,8 +334,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -346,8 +347,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/kinox/board.c b/board/kinox/board.c
index 7c55fba876..7d9955e05f 100644
--- a/board/kinox/board.c
+++ b/board/kinox/board.c
@@ -100,8 +100,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
}
diff --git a/board/kracko/board.c b/board/kracko/board.c
index 136b05ea1e..47bf6a7687 100644
--- a/board/kracko/board.c
+++ b/board/kracko/board.c
@@ -582,19 +582,17 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
/* Limit C1 on board version 0 to 2.0 A */
if ((board_version == 0) && (port == 1))
- icl = MIN(icl, 2000);
+ charge_ma = MIN(charge_ma, 2000);
/*
* TODO(b/151955431): Characterize the input current limit in case a
* scaling needs to be applied here
*/
- charge_set_input_current_limit(icl, charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
int board_set_active_charge_port(int port)
diff --git a/board/kuldax/led.c b/board/kuldax/led.c
index 39b79e2196..2fabc26a9a 100644
--- a/board/kuldax/led.c
+++ b/board/kuldax/led.c
@@ -259,8 +259,8 @@ int led_set_brightness(enum ec_led_id id, const uint8_t *brightness)
else
return set_color(id, LED_OFF, 0);
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/kuldax/sensors.c b/board/kuldax/sensors.c
index 96f49de8a3..a41d5be713 100644
--- a/board/kuldax/sensors.c
+++ b/board/kuldax/sensors.c
@@ -46,11 +46,11 @@ const struct adc_t adc_channels[] = {
.factor_mul = ADC_MAX_VOLT * 39,
.factor_div = (ADC_READ_MAX + 1) * 5,
},
- [ADC_PPVAR_IMON] = { /* 872.3 mV/A */
+ [ADC_PPVAR_IMON] = { /* 20/(20+8.66)*50/200 */
.name = "PPVAR_IMON",
.input_ch = NPCX_ADC_CH3,
- .factor_mul = ADC_MAX_VOLT * 1433,
- .factor_div = (ADC_READ_MAX + 1) * 1250,
+ .factor_mul = ADC_MAX_VOLT * 143,
+ .factor_div = (ADC_READ_MAX + 1) * 25,
},
};
diff --git a/board/lalala/board.c b/board/lalala/board.c
index 78404d6821..f0f354fcf3 100644
--- a/board/lalala/board.c
+++ b/board/lalala/board.c
@@ -397,19 +397,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/lalala/board.h b/board/lalala/board.h
index 4967e49752..2996ad3613 100644
--- a/board/lalala/board.h
+++ b/board/lalala/board.h
@@ -33,6 +33,11 @@
#undef CONFIG_CMD_CHARGER_DUMP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* GPIO for C1 interrupts, for baseboard use */
#define GPIO_USB_C1_INT_ODL GPIO_SUB_USB_C1_INT_ODL
diff --git a/board/lantis/board.c b/board/lantis/board.c
index 08fc84e222..9917231474 100644
--- a/board/lantis/board.c
+++ b/board/lantis/board.c
@@ -719,18 +719,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * TODO(b/151955431): Characterize the input current limit in case a
- * scaling needs to be applied here
- */
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_set_active_charge_port(int port)
{
int is_valid_port = (port >= 0 && port < board_get_usb_pd_port_count());
diff --git a/board/lazor/usbc_config.c b/board/lazor/usbc_config.c
index 11cc649573..26a8a5692d 100644
--- a/board/lazor/usbc_config.c
+++ b/board/lazor/usbc_config.c
@@ -263,6 +263,7 @@ void board_tcpc_init(void)
/* 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);
@@ -370,8 +371,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -383,8 +384,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/lisbon/led.c b/board/lisbon/led.c
index 842cee0530..a4b9a0d094 100644
--- a/board/lisbon/led.c
+++ b/board/lisbon/led.c
@@ -249,8 +249,8 @@ int led_set_brightness(enum ec_led_id id, const uint8_t *brightness)
else
return set_color(id, LED_OFF, 0);
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/madoo/board.c b/board/madoo/board.c
index eedf8e6fdd..77c939143a 100644
--- a/board/madoo/board.c
+++ b/board/madoo/board.c
@@ -312,20 +312,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- reduce
- * our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/madoo/board.h b/board/madoo/board.h
index 82cfa30b0e..0d5e24c2a0 100644
--- a/board/madoo/board.h
+++ b/board/madoo/board.h
@@ -19,6 +19,11 @@
#define CONFIG_OCPC_DEF_RBATT_MOHMS \
22 /* R_DS(on) 11.6mOhm + 10mOhm sns rstr \
*/
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_OCPC
#undef CONFIG_CHARGER_SINGLE_CHIP
diff --git a/board/magolor/board.c b/board/magolor/board.c
index bfa77375e5..3ddc1af3d1 100644
--- a/board/magolor/board.c
+++ b/board/magolor/board.c
@@ -415,6 +415,8 @@ void board_hibernate(void)
if (board_get_charger_chip_count() > 1)
raa489000_hibernate(1, true);
raa489000_hibernate(0, true);
+
+ msleep(1000); /* Wait for charger to enter low power mode */
}
void board_reset_pd_mcu(void)
@@ -593,19 +595,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/magolor/board.h b/board/magolor/board.h
index 481856323f..beb2cc279c 100644
--- a/board/magolor/board.h
+++ b/board/magolor/board.h
@@ -45,6 +45,11 @@
#undef CONFIG_CMD_CHARGER_DUMP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* GPIO for C1 interrupts, for baseboard use */
#define GPIO_USB_C1_INT_ODL GPIO_SUB_C1_INT_EN_RAILS_ODL
diff --git a/board/makomo/board.c b/board/makomo/board.c
index 24b34d9a75..5a7158b58a 100644
--- a/board/makomo/board.c
+++ b/board/makomo/board.c
@@ -235,14 +235,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/makomo/board.h b/board/makomo/board.h
index bf705e9560..86e5e78862 100644
--- a/board/makomo/board.h
+++ b/board/makomo/board.h
@@ -27,6 +27,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/marasov/battery.c b/board/marasov/battery.c
new file mode 100644
index 0000000000..b974930d5b
--- /dev/null
+++ b/board/marasov/battery.c
@@ -0,0 +1,77 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Battery pack vendor provided charging profile
+ */
+
+#include "battery_fuel_gauge.h"
+#include "cbi.h"
+#include "common.h"
+#include "compile_time_macros.h"
+#include "gpio.h"
+/*
+ * Battery info for all Brya battery types. Note that the fields
+ * start_charging_min/max and charging_min/max are not used for the charger.
+ * The effective temperature limits are given by discharging_min/max_c.
+ *
+ * Fuel Gauge (FG) parameters which are used for determining if the battery
+ * is connected, the appropriate ship mode (battery cutoff) command, and the
+ * charge/discharge FETs status.
+ *
+ * Ship mode (battery cutoff) requires 2 writes to the appropriate smart battery
+ * register. For some batteries, the charge/discharge FET bits are set when
+ * charging/discharging is active, in other types, these bits set mean that
+ * charging/discharging is disabled. Therefore, in addition to the mask for
+ * these bits, a disconnect value must be specified. Note that for TI fuel
+ * gauge, the charge/discharge FET status is found in Operation Status (0x54),
+ * but a read of Manufacturer Access (0x00) will return the lower 16 bits of
+ * Operation status which contains the FET status bits.
+ *
+ * The assumption for battery types supported is that the charge/discharge FET
+ * status can be read with a sb_read() command and therefore, only the register
+ * address, mask, and disconnect value need to be provided.
+ */
+const struct board_batt_params board_battery_info[] = {
+ /* C490-42 Battery Information */
+ [BATTERY_C490] = {
+ .fuel_gauge = {
+ .manuf_name = "AS3GWQd3jB",
+ .device_name = "C490-42",
+ .ship_mode = {
+ .reg_addr = 0x00,
+ .reg_data = { 0x0010, 0x0010 },
+ },
+ .fet = {
+ .reg_addr = 0x99,
+ .reg_mask = 0x000c,
+ .disconnect_val = 0x000c,
+ }
+ },
+ .batt_info = {
+ .voltage_max = 13200, /* mV */
+ .voltage_normal = 11880, /* mV */
+ .voltage_min = 9000, /* mV */
+ .precharge_current = 256, /* mA */
+ .start_charging_min_c = 0,
+ .start_charging_max_c = 45,
+ .charging_min_c = 0,
+ .charging_max_c = 60,
+ .discharging_min_c = -20,
+ .discharging_max_c = 60,
+ },
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(board_battery_info) == BATTERY_TYPE_COUNT);
+
+const enum battery_type DEFAULT_BATTERY_TYPE = BATTERY_C490;
+
+enum battery_present battery_hw_present(void)
+{
+ enum gpio_signal batt_pres;
+
+ batt_pres = GPIO_EC_BATT_PRES_ODL;
+
+ /* The GPIO is low when the battery is physically present */
+ return gpio_get_level(batt_pres) ? BP_NO : BP_YES;
+}
diff --git a/board/marasov/board.c b/board/marasov/board.c
new file mode 100644
index 0000000000..e48dfaa163
--- /dev/null
+++ b/board/marasov/board.c
@@ -0,0 +1,52 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "button.h"
+#include "cbi.h"
+#include "charge_ramp.h"
+#include "charger.h"
+#include "common.h"
+#include "console.h"
+#include "driver/accelgyro_lsm6dso.h"
+#include "driver/accel_lis2dw12.h"
+#include "driver/als_tcs3400.h"
+#include "fw_config.h"
+#include "gpio.h"
+#include "gpio_signal.h"
+#include "hooks.h"
+#include "lid_switch.h"
+#include "power_button.h"
+#include "power.h"
+#include "registers.h"
+#include "switch.h"
+#include "tablet_mode.h"
+#include "throttle_ap.h"
+#include "usbc_config.h"
+
+#include "gpio_list.h" /* Must come after other header files. */
+
+/* Console output macros */
+#define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ##args)
+#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ##args)
+
+/* Called on AP S3 -> S0 transition */
+static void board_chipset_resume(void)
+{
+ /* Allow keyboard backlight to be enabled */
+
+ if (IS_ENABLED(CONFIG_PWM_KBLIGHT))
+ gpio_set_level(GPIO_EC_KB_BL_EN_L, 0);
+}
+DECLARE_HOOK(HOOK_CHIPSET_RESUME, board_chipset_resume, HOOK_PRIO_DEFAULT);
+
+/* Called on AP S0 -> S3 transition */
+static void board_chipset_suspend(void)
+{
+ /* Turn off the keyboard backlight if it's on. */
+
+ if (IS_ENABLED(CONFIG_PWM_KBLIGHT))
+ gpio_set_level(GPIO_EC_KB_BL_EN_L, 1);
+}
+DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, board_chipset_suspend, HOOK_PRIO_DEFAULT);
diff --git a/board/marasov/board.h b/board/marasov/board.h
new file mode 100644
index 0000000000..6cb0225edc
--- /dev/null
+++ b/board/marasov/board.h
@@ -0,0 +1,217 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Brya board configuration */
+
+#ifndef __CROS_EC_BOARD_H
+#define __CROS_EC_BOARD_H
+
+#include "compile_time_macros.h"
+
+/*
+ * Early brya boards are not set up for vivaldi
+ */
+#undef CONFIG_KEYBOARD_VIVALDI
+
+/* Baseboard features */
+#include "baseboard.h"
+
+/*
+ * This will happen automatically on NPCX9 ES2 and later. Do not remove
+ * until we can confirm all earlier chips are out of service.
+ */
+#define CONFIG_HIBERNATE_PSL_VCC1_RST_WAKEUP
+
+#define CONFIG_MP2964
+
+/* LED */
+#define CONFIG_LED_ONOFF_STATES
+#define CONFIG_LED_ONOFF_STATES_BAT_LOW 10
+
+#undef CONFIG_TABLET_MODE
+#undef CONFIG_TABLET_MODE_SWITCH
+#undef CONFIG_GMR_TABLET_MODE
+#undef CONFIG_VOLUME_BUTTONS
+
+/* USB Type A Features */
+#define USB_PORT_COUNT 2
+#define CONFIG_USB_PORT_POWER_DUMB
+
+/* USB Type C and USB PD defines */
+#define CONFIG_USB_PD_REQUIRE_AP_MODE_ENTRY
+
+#define CONFIG_IO_EXPANDER
+#define CONFIG_IO_EXPANDER_NCT38XX
+#define CONFIG_IO_EXPANDER_PORT_COUNT 1
+
+#define CONFIG_USB_PD_FRS_PPC
+
+#define CONFIG_USB_PD_TCPM_PS8815
+#define CONFIG_USB_PD_TCPM_PS8815_FORCE_DID
+#define CONFIG_USBC_RETIMER_INTEL_BB
+#undef CONFIG_BC12_DETECT_PI3USB9201
+#undef CONFIG_USB_CHARGER
+
+/* Battery Configuration */
+#define CONFIG_SMBUS_PEC
+#undef CONFIG_BATT_HOST_FULL_FACTOR
+#define CONFIG_BATT_HOST_FULL_FACTOR 99
+
+/* I2C speed console command */
+#define CONFIG_CMD_I2C_SPEED
+
+/* I2C control host command */
+#define CONFIG_HOSTCMD_I2C_CONTROL
+
+#define CONFIG_USBC_PPC_SYV682X
+
+/* TODO: b/177608416 - measure and check these values on brya */
+#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 */
+
+/*
+ * Passive USB-C cables only support up to 60W.
+ */
+#define PD_OPERATING_POWER_MW 15000
+#define PD_MAX_POWER_MW 60000
+#define PD_MAX_CURRENT_MA 3000
+#define PD_MAX_VOLTAGE_MV 20000
+
+/*
+ * Macros for GPIO signals used in common code that don't match the
+ * schematic names. Signal names in gpio.inc match the schematic and are
+ * then redefined here to so it's more clear which signal is being used for
+ * which purpose.
+ */
+#define GPIO_AC_PRESENT GPIO_ACOK_OD
+#define GPIO_CPU_PROCHOT GPIO_EC_PROCHOT_ODL
+#define GPIO_EC_INT_L GPIO_EC_PCH_INT_ODL
+#define GPIO_ENABLE_BACKLIGHT GPIO_EC_EN_EDP_BL
+#define GPIO_ENTERING_RW GPIO_EC_ENTERING_RW
+#define GPIO_KBD_KSO2 GPIO_EC_KSO_02_INV
+#define GPIO_PACKET_MODE_EN GPIO_EC_GSC_PACKET_MODE
+#define GPIO_PCH_PWRBTN_L GPIO_EC_PCH_PWR_BTN_ODL
+#define GPIO_PCH_RSMRST_L GPIO_EC_PCH_RSMRST_L
+#define GPIO_PCH_RTCRST GPIO_EC_PCH_RTCRST
+#define GPIO_PCH_SLP_S0_L GPIO_SYS_SLP_S0IX_L
+#define GPIO_PCH_SLP_S3_L GPIO_SLP_S3_L
+#define GPIO_TEMP_SENSOR_POWER GPIO_SEQ_EC_DSW_PWROK
+
+/*
+ * GPIO_EC_PCH_INT_ODL is used for MKBP events as well as a PCH wakeup
+ * signal.
+ */
+#define GPIO_PCH_WAKE_L GPIO_EC_PCH_INT_ODL
+#define GPIO_PG_EC_ALL_SYS_PWRGD GPIO_SEQ_EC_ALL_SYS_PG
+#define GPIO_PG_EC_DSW_PWROK GPIO_SEQ_EC_DSW_PWROK
+#define GPIO_PG_EC_RSMRST_ODL GPIO_SEQ_EC_RSMRST_ODL
+#define GPIO_POWER_BUTTON_L GPIO_GSC_EC_PWR_BTN_ODL
+#define GPIO_SYS_RESET_L GPIO_SYS_RST_ODL
+#define GPIO_VOLUME_DOWN_L GPIO_EC_VOLDN_BTN_ODL
+#define GPIO_VOLUME_UP_L GPIO_EC_VOLUP_BTN_ODL
+#define GPIO_WP_L GPIO_EC_WP_ODL
+
+/* System has back-lit keyboard */
+#define CONFIG_PWM_KBLIGHT
+
+/* I2C Bus Configuration */
+
+#define I2C_PORT_SENSOR NPCX_I2C_PORT0_0
+
+#define I2C_PORT_USB_C0_TCPC NPCX_I2C_PORT1_0
+#define I2C_PORT_USB_C1_TCPC NPCX_I2C_PORT4_1
+
+#define I2C_PORT_USB_C0_PPC NPCX_I2C_PORT2_0
+#define I2C_PORT_USB_C1_PPC NPCX_I2C_PORT6_1
+
+#define I2C_PORT_USB_C0_MUX NPCX_I2C_PORT3_0
+#define I2C_PORT_USB_C1_MUX NPCX_I2C_PORT6_1
+
+#define I2C_PORT_BATTERY NPCX_I2C_PORT5_0
+#define I2C_PORT_CHARGER NPCX_I2C_PORT7_0
+#define I2C_PORT_EEPROM NPCX_I2C_PORT7_0
+#define I2C_PORT_MP2964 NPCX_I2C_PORT7_0
+
+#define I2C_ADDR_EEPROM_FLAGS 0x50
+
+#define I2C_ADDR_MP2964_FLAGS 0x20
+
+/*
+ * see b/174768555#comment22
+ */
+#define USBC_PORT_C0_BB_RETIMER_I2C_ADDR 0x56
+
+/* Enabling Thunderbolt-compatible mode */
+#define CONFIG_USB_PD_TBT_COMPAT_MODE
+
+/* Enabling USB4 mode */
+#define CONFIG_USB_PD_USB4
+#define CONFIG_USB_PD_DATA_RESET_MSG
+
+/* Retimer */
+#define CONFIG_USBC_RETIMER_FW_UPDATE
+
+/* Thermal features */
+#define CONFIG_THERMISTOR
+#define CONFIG_TEMP_SENSOR
+#define CONFIG_TEMP_SENSOR_POWER
+#define CONFIG_STEINHART_HART_3V3_30K9_47K_4050B
+
+#define CONFIG_FANS FAN_CH_COUNT
+
+/* Charger defines */
+#define CONFIG_CHARGER_BQ25720
+#define CONFIG_CHARGER_BQ25720_VSYS_TH2_CUSTOM
+#define CONFIG_CHARGER_BQ25720_VSYS_TH2_DV 70
+#define CONFIG_CHARGER_BQ25710_SENSE_RESISTOR 10
+#define CONFIG_CHARGER_BQ25710_SENSE_RESISTOR_AC 10
+#define CONFIG_CHARGER_BQ25710_PSYS_SENSING
+
+/*
+ * Older boards have a different ADC assignment.
+ */
+
+#define CONFIG_ADC_CHANNELS_RUNTIME_CONFIG
+
+#ifndef __ASSEMBLER__
+
+#include "gpio_signal.h" /* needed by registers.h */
+#include "registers.h"
+#include "usbc_config.h"
+
+enum adc_channel {
+ ADC_TEMP_SENSOR_1_DDR_SOC,
+ ADC_TEMP_SENSOR_2_AMBIENT,
+ ADC_TEMP_SENSOR_3_CHARGER,
+ ADC_TEMP_SENSOR_4_WWAN,
+ ADC_CH_COUNT
+};
+
+enum temp_sensor_id {
+ TEMP_SENSOR_1_DDR_SOC,
+ TEMP_SENSOR_2_AMBIENT,
+ TEMP_SENSOR_3_CHARGER,
+ TEMP_SENSOR_4_WWAN,
+ TEMP_SENSOR_COUNT
+};
+
+enum ioex_port { IOEX_C0_NCT38XX = 0, IOEX_PORT_COUNT };
+
+enum battery_type { BATTERY_C490, BATTERY_TYPE_COUNT };
+
+enum pwm_channel {
+ PWM_CH_KBLIGHT, /* PWM3 */
+ PWM_CH_FAN, /* PWM5 */
+ PWM_CH_COUNT
+};
+
+enum fan_channel { FAN_CH_0 = 0, FAN_CH_COUNT };
+
+enum mft_channel { MFT_CH_0 = 0, MFT_CH_COUNT };
+
+#endif /* !__ASSEMBLER__ */
+
+#endif /* __CROS_EC_BOARD_H */
diff --git a/board/marasov/build.mk b/board/marasov/build.mk
new file mode 100644
index 0000000000..8b85854cf0
--- /dev/null
+++ b/board/marasov/build.mk
@@ -0,0 +1,25 @@
+# -*- makefile -*-
+# Copyright 2022 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Brya board specific files build
+#
+
+CHIP:=npcx
+CHIP_FAMILY:=npcx9
+CHIP_VARIANT:=npcx9m3f
+BASEBOARD:=brya
+
+board-y=
+board-y+=battery.o
+board-y+=board.o
+board-y+=charger.o
+board-y+=fans.o
+board-y+=fw_config.o
+board-y+=i2c.o
+board-y+=keyboard.o
+board-y+=led.o
+board-y+=pwm.o
+board-y+=sensors.o
+board-y+=usbc_config.o
diff --git a/board/marasov/charger.c b/board/marasov/charger.c
new file mode 100644
index 0000000000..68fff4f283
--- /dev/null
+++ b/board/marasov/charger.c
@@ -0,0 +1,83 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+
+#include "charge_manager.h"
+#include "charge_state_v2.h"
+#include "charger.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "driver/charger/bq25710.h"
+#include "usbc_ppc.h"
+#include "usb_pd.h"
+#include "util.h"
+
+#define CPRINTSUSB(format, args...) cprints(CC_USBCHARGE, format, ##args)
+#define CPRINTFUSB(format, args...) cprintf(CC_USBCHARGE, format, ##args)
+
+#ifndef CONFIG_ZEPHYR
+/* Charger Chip Configuration */
+const struct charger_config_t chg_chips[] = {
+ {
+ .i2c_port = I2C_PORT_CHARGER,
+ .i2c_addr_flags = BQ25710_SMBUS_ADDR1_FLAGS,
+ .drv = &bq25710_drv,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(chg_chips) == CHARGER_NUM);
+#endif
+
+int board_set_active_charge_port(int port)
+{
+ int is_valid_port = board_is_usb_pd_port_present(port);
+ int i;
+
+ if (port == CHARGE_PORT_NONE) {
+ CPRINTSUSB("Disabling all charger ports");
+
+ /* Disable all ports. */
+ for (i = 0; i < ppc_cnt; i++) {
+ /*
+ * Do not return early if one fails otherwise we can
+ * get into a boot loop assertion failure.
+ */
+ if (ppc_vbus_sink_enable(i, 0))
+ CPRINTSUSB("Disabling C%d as sink failed.", i);
+ }
+
+ return EC_SUCCESS;
+ } else if (!is_valid_port) {
+ return EC_ERROR_INVAL;
+ }
+
+ /* Check if the port is sourcing VBUS. */
+ if (ppc_is_sourcing_vbus(port)) {
+ CPRINTFUSB("Skip enable C%d", port);
+ return EC_ERROR_INVAL;
+ }
+
+ CPRINTSUSB("New charge port: C%d", port);
+
+ /*
+ * Turn off the other ports' sink path FETs, before enabling the
+ * requested charge port.
+ */
+ for (i = 0; i < ppc_cnt; i++) {
+ if (i == port)
+ continue;
+
+ if (ppc_vbus_sink_enable(i, 0))
+ CPRINTSUSB("C%d: sink path disable failed.", i);
+ }
+
+ /* Enable requested charge port. */
+ if (ppc_vbus_sink_enable(port, 1)) {
+ CPRINTSUSB("C%d: sink path enable failed.", port);
+ return EC_ERROR_UNKNOWN;
+ }
+
+ return EC_SUCCESS;
+}
diff --git a/board/marasov/ec.tasklist b/board/marasov/ec.tasklist
new file mode 100644
index 0000000000..a4039fc94f
--- /dev/null
+++ b/board/marasov/ec.tasklist
@@ -0,0 +1,26 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * See CONFIG_TASK_LIST in config.h for details.
+ *
+ * USB_CHG_Px tasks must be contiguous (see USB_CHG_PORT_TO_TASK_ID(x)).
+ * PD_Cx tasks must be contiguous (see PD_PORT_TO_TASK_ID(x))
+ */
+
+#define CONFIG_TASK_LIST \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, HOOKS_TASK_STACK_SIZE) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, BASEBOARD_CHARGER_TASK_STACK_SIZE) \
+ TASK_NOTEST(KEYPROTO, keyboard_protocol_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_NOTEST(CHIPSET, chipset_task, NULL, BASEBOARD_CHIPSET_TASK_STACK_SIZE) \
+ TASK_ALWAYS(USB_MUX, usb_mux_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, CONSOLE_TASK_STACK_SIZE) \
+ TASK_ALWAYS(POWERBTN, power_button_task, NULL, BASEBOARD_POWERBTN_TASK_STACK_SIZE) \
+ TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_C0, pd_task, NULL, BASEBOARD_PD_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_C1, pd_task, NULL, BASEBOARD_PD_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, BASEBOARD_PD_INT_TASK_STACK_SIZE) \
+ TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, BASEBOARD_PD_INT_TASK_STACK_SIZE)
diff --git a/board/marasov/fans.c b/board/marasov/fans.c
new file mode 100644
index 0000000000..158f4bf704
--- /dev/null
+++ b/board/marasov/fans.c
@@ -0,0 +1,89 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Physical fans. These are logically separate from pwm_channels. */
+
+#include "common.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "fan_chip.h"
+#include "fan.h"
+#include "hooks.h"
+#include "pwm.h"
+
+/* MFT channels. These are logically separate from pwm_channels. */
+const struct mft_t mft_channels[] = {
+ [MFT_CH_0] = {
+ .module = NPCX_MFT_MODULE_1,
+ .clk_src = TCKC_LFCLK,
+ .pwm_id = PWM_CH_FAN,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(mft_channels) == MFT_CH_COUNT);
+
+static const struct fan_conf fan_conf_0 = {
+ .flags = FAN_USE_RPM_MODE,
+ .ch = MFT_CH_0, /* Use MFT id to control fan */
+ .pgood_gpio = -1,
+ .enable_gpio = GPIO_EN_PP5000_FAN,
+};
+
+/*
+ * TOOD(b/181271666): thermistor placement and calibration
+ *
+ * Prototype fan spins at about 4200 RPM at 100% PWM, this
+ * is specific to board ID 2 and might also apears in later
+ * boards as well.
+ */
+static const struct fan_rpm fan_rpm_0 = {
+ .rpm_min = 2200,
+ .rpm_start = 2200,
+ .rpm_max = 4200,
+};
+
+const struct fan_t fans[FAN_CH_COUNT] = {
+ [FAN_CH_0] = {
+ .conf = &fan_conf_0,
+ .rpm = &fan_rpm_0,
+ },
+};
+
+#ifndef CONFIG_FANS
+
+/*
+ * TODO(b/181271666): use static fan speeds until fan and sensors are
+ * tuned. for now, use:
+ *
+ * AP off: 33%
+ * AP on: 100%
+ */
+
+static void fan_slow(void)
+{
+ const int duty_pct = 33;
+
+ ccprints("%s: speed %d%%", __func__, duty_pct);
+
+ pwm_enable(PWM_CH_FAN, 1);
+ pwm_set_duty(PWM_CH_FAN, duty_pct);
+}
+
+static void fan_max(void)
+{
+ const int duty_pct = 100;
+
+ ccprints("%s: speed %d%%", __func__, duty_pct);
+
+ pwm_enable(PWM_CH_FAN, 1);
+ pwm_set_duty(PWM_CH_FAN, duty_pct);
+}
+
+DECLARE_HOOK(HOOK_INIT, fan_slow, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, fan_slow, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, fan_slow, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_CHIPSET_RESET, fan_max, HOOK_PRIO_FIRST);
+DECLARE_HOOK(HOOK_CHIPSET_RESUME, fan_max, HOOK_PRIO_DEFAULT);
+
+#endif /* CONFIG_FANS */
diff --git a/board/marasov/fw_config.c b/board/marasov/fw_config.c
new file mode 100644
index 0000000000..375f5e965b
--- /dev/null
+++ b/board/marasov/fw_config.c
@@ -0,0 +1,46 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "cbi.h"
+#include "common.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "cros_board_info.h"
+#include "fw_config.h"
+
+#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args)
+
+static union brya_cbi_fw_config fw_config;
+BUILD_ASSERT(sizeof(fw_config) == sizeof(uint32_t));
+
+/*
+ * FW_CONFIG defaults for brya if the CBI.FW_CONFIG data is not
+ * initialized.
+ */
+static const union brya_cbi_fw_config fw_config_defaults = {
+ .usb_db = DB_USB3_PS8815,
+ .kb_bl = KEYBOARD_BACKLIGHT_ENABLED,
+};
+
+/****************************************************************************
+ * Brya FW_CONFIG access
+ */
+void board_init_fw_config(void)
+{
+ if (cbi_get_fw_config(&fw_config.raw_value)) {
+ CPRINTS("CBI: Read FW_CONFIG failed, using board defaults");
+ fw_config = fw_config_defaults;
+ }
+}
+
+union brya_cbi_fw_config get_fw_config(void)
+{
+ return fw_config;
+}
+
+enum ec_cfg_usb_db_type ec_cfg_usb_db_type(void)
+{
+ return fw_config.usb_db;
+}
diff --git a/board/marasov/fw_config.h b/board/marasov/fw_config.h
new file mode 100644
index 0000000000..906e61fe7e
--- /dev/null
+++ b/board/marasov/fw_config.h
@@ -0,0 +1,52 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __BOARD_BRYA_FW_CONFIG_H_
+#define __BOARD_BRYA_FW_CONFIG_H_
+
+#include <stdint.h>
+
+/****************************************************************************
+ * CBI FW_CONFIG layout for Brya board.
+ *
+ * Source of truth is the project/brya/brya/config.star configuration file.
+ */
+
+enum ec_cfg_usb_db_type {
+ DB_USB3_PS8815 = 0,
+};
+
+enum ec_cfg_keyboard_backlight_type {
+ KEYBOARD_BACKLIGHT_DISABLED = 0,
+ KEYBOARD_BACKLIGHT_ENABLED = 1
+};
+
+union brya_cbi_fw_config {
+ struct {
+ enum ec_cfg_usb_db_type usb_db : 4;
+ uint32_t sd_db : 2;
+ uint32_t lte_db : 1;
+ enum ec_cfg_keyboard_backlight_type kb_bl : 1;
+ uint32_t audio : 3;
+ uint32_t reserved_1 : 21;
+ };
+ uint32_t raw_value;
+};
+
+/**
+ * Read the cached FW_CONFIG. Guaranteed to have valid values.
+ *
+ * @return the FW_CONFIG for the board.
+ */
+union brya_cbi_fw_config get_fw_config(void);
+
+/**
+ * Get the USB daughter board type from FW_CONFIG.
+ *
+ * @return the USB daughter board type.
+ */
+enum ec_cfg_usb_db_type ec_cfg_usb_db_type(void);
+
+#endif /* __BOARD_BRYA_FW_CONFIG_H_ */
diff --git a/board/marasov/generated-gpio.inc b/board/marasov/generated-gpio.inc
new file mode 100644
index 0000000000..f01f5b790b
--- /dev/null
+++ b/board/marasov/generated-gpio.inc
@@ -0,0 +1,127 @@
+/*
+ * This file was auto-generated.
+ */
+
+/* INTERRUPT GPIOs: */
+GPIO_INT(ACOK_OD, PIN(0, 0), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, extpower_interrupt)
+GPIO_INT(EC_PROCHOT_IN_L, PIN(F, 0), GPIO_INT_BOTH, throttle_ap_prochot_input_interrupt)
+GPIO_INT(EC_WP_ODL, PIN(A, 1), GPIO_INT_BOTH, switch_interrupt)
+GPIO_INT(GSC_EC_PWR_BTN_ODL, PIN(0, 1), GPIO_INT_BOTH | GPIO_HIB_WAKE_LOW, power_button_interrupt)
+GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, lid_interrupt)
+GPIO_INT(SEQ_EC_ALL_SYS_PG, PIN(F, 4), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SEQ_EC_DSW_PWROK, PIN(C, 7), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SEQ_EC_RSMRST_ODL, PIN(E, 2), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SLP_S3_L, PIN(A, 5), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SLP_SUS_L, PIN(F, 1), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(SYS_SLP_S0IX_L, PIN(D, 5), GPIO_INT_BOTH, power_signal_interrupt)
+GPIO_INT(USB_C0_TCPC_INT_ODL, PIN(E, 0), GPIO_INT_FALLING, tcpc_alert_event)
+GPIO_INT(USB_C0_PPC_INT_ODL, PIN(6, 2), GPIO_INT_FALLING, ppc_interrupt)
+GPIO_INT(USB_C0_RT_INT_ODL, PIN(B, 1), GPIO_INT_FALLING, retimer_interrupt)
+GPIO_INT(USB_C1_PPC_INT_ODL, PIN(F, 5), GPIO_INT_FALLING, ppc_interrupt)
+GPIO_INT(USB_C1_TCPC_INT_ODL, PIN(A, 2), GPIO_INT_FALLING, tcpc_alert_event)
+
+/* USED GPIOs: */
+GPIO(CCD_MODE_ODL, PIN(E, 5), GPIO_INPUT)
+GPIO(CHARGER_VAP_OTG_EN, PIN(7, 3), GPIO_OUT_LOW)
+GPIO(CPU_C10_GATE_L, PIN(6, 7), GPIO_INPUT)
+GPIO(EC_BATT_PRES_ODL, PIN(A, 3), GPIO_INPUT)
+GPIO(EC_ENTERING_RW, PIN(0, 3), GPIO_OUT_LOW)
+GPIO(EC_EN_EDP_BL, PIN(D, 3), GPIO_OUT_HIGH)
+GPIO(EC_GSC_PACKET_MODE, PIN(7, 5), GPIO_OUT_LOW)
+GPIO(EC_I2C_BAT_SCL, PIN(3, 3), GPIO_INPUT)
+GPIO(EC_I2C_BAT_SDA, PIN(3, 6), GPIO_INPUT)
+GPIO(EC_I2C_MISC_SCL_R, PIN(B, 3), GPIO_INPUT)
+GPIO(EC_I2C_MISC_SDA_R, PIN(B, 2), GPIO_INPUT)
+GPIO(EC_I2C_SENSOR_SCL, PIN(B, 5), GPIO_INPUT | GPIO_SEL_1P8V)
+GPIO(EC_I2C_SENSOR_SDA, PIN(B, 4), GPIO_INPUT | GPIO_SEL_1P8V)
+GPIO(EC_I2C_USB_C0_PPC_BC_SCL, PIN(9, 2), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_PPC_BC_SDA, PIN(9, 1), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_RT_SCL, PIN(D, 1), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_RT_SDA, PIN(D, 0), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_TCPC_SCL, PIN(9, 0), GPIO_INPUT)
+GPIO(EC_I2C_USB_C0_TCPC_SDA, PIN(8, 7), GPIO_INPUT)
+GPIO(EC_I2C_USB_C1_MIX_SCL, PIN(E, 4), GPIO_INPUT)
+GPIO(EC_I2C_USB_C1_MIX_SDA, PIN(E, 3), GPIO_INPUT)
+GPIO(EC_I2C_USB_C1_TCPC_SCL, PIN(F, 3), GPIO_INPUT)
+GPIO(EC_I2C_USB_C1_TCPC_SDA, PIN(F, 2), GPIO_INPUT)
+GPIO(EC_KB_BL_EN_L, PIN(8, 6), GPIO_OUT_HIGH)
+GPIO(EC_PCHHOT_ODL, PIN(7, 4), GPIO_INPUT)
+GPIO(EC_PCH_INT_ODL, PIN(B, 0), GPIO_ODR_HIGH)
+GPIO(EC_PCH_PWR_BTN_ODL, PIN(C, 1), GPIO_ODR_HIGH)
+GPIO(EC_PCH_RSMRST_L, PIN(A, 6), GPIO_OUT_LOW)
+GPIO(EC_PCH_RTCRST, PIN(7, 6), GPIO_OUT_LOW)
+GPIO(EC_PCH_SYS_PWROK, PIN(3, 7), GPIO_OUT_LOW)
+GPIO(EC_PCH_WAKE_R_ODL, PIN(C, 0), GPIO_ODR_HIGH)
+GPIO(EC_PROCHOT_ODL, PIN(6, 3), GPIO_ODR_HIGH)
+GPIO(EN_PP5000_FAN, PIN(6, 1), GPIO_OUT_HIGH)
+GPIO(EN_PP5000_USBA_R, PIN(D, 7), GPIO_OUT_LOW)
+GPIO(EN_S5_RAILS, PIN(B, 6), GPIO_OUT_LOW)
+GPIO(IMVP9_VRRDY_OD, PIN(4, 3), GPIO_INPUT)
+GPIO(PCH_PWROK, PIN(7, 2), GPIO_OUT_LOW)
+GPIO(SYS_RST_ODL, PIN(C, 5), GPIO_ODR_HIGH)
+GPIO(USB_C0_TCPC_RST_ODL, PIN(A, 7), GPIO_ODR_LOW)
+GPIO(USB_C1_FRS_EN, PIN(9, 4), GPIO_OUT_LOW)
+GPIO(USB_C1_OC_ODL, PIN(9, 6), GPIO_ODR_HIGH)
+GPIO(USB_C1_RT_INT_ODL, PIN(A, 0), GPIO_INPUT)
+GPIO(USB_C1_RT_RST_R_ODL, PIN(0, 2), GPIO_ODR_LOW)
+GPIO(VCCST_PWRGD_OD, PIN(A, 4), GPIO_ODR_LOW)
+GPIO(PWR_LED_W_ODL, PIN(6, 0), GPIO_OUT_HIGH)
+GPIO(PWR_LED_A_ODL, PIN(C, 2), GPIO_OUT_HIGH)
+
+/* UART alternate functions */
+ALTERNATE(PIN_MASK(6, 0x30), 0, MODULE_UART, 0) /* GPIO64/CR_SIN1, GPO65/CR_SOUT1/FLPRG1_L */
+
+/* I2C alternate functions */
+ALTERNATE(PIN_MASK(3, 0x48), 0, MODULE_I2C, 0) /* GPIO33/I2C5_SCL0/CTS_L, GPIO36/RTS_L/I2C5_SDA0 */
+ALTERNATE(PIN_MASK(8, 0x80), 0, MODULE_I2C, 0) /* GPIO87/I2C1_SDA0 */
+ALTERNATE(PIN_MASK(9, 0x07), 0, MODULE_I2C, 0) /* GPIO92/I2C2_SCL0, GPIO91/I2C2_SDA0, GPIO90/I2C1_SCL0 */
+ALTERNATE(PIN_MASK(B, 0x0c), 0, MODULE_I2C, 0) /* GPIOB3/I2C7_SCL0/DCD_L, GPIOB2/I2C7_SDA0/DSR_L */
+ALTERNATE(PIN_MASK(B, 0x30), 0, MODULE_I2C, GPIO_SEL_1P8V) /* GPIOB5/I2C0_SCL0, GPIOB4/I2C0_SDA0 */
+ALTERNATE(PIN_MASK(D, 0x03), 0, MODULE_I2C, 0) /* GPIOD1/I2C3_SCL0, GPIOD0/I2C3_SDA0 */
+ALTERNATE(PIN_MASK(E, 0x18), 0, MODULE_I2C, 0) /* GPIOE4/I2C6_SCL1/I3C_SCL, GPIOE3/I2C6_SDA1/I3C_SDA */
+ALTERNATE(PIN_MASK(F, 0x0c), 0, MODULE_I2C, 0) /* GPIOF3/I2C4_SCL1, GPIOF2/I2C4_SDA1 */
+
+/* PWM alternate functions */
+ALTERNATE(PIN_MASK(4, 0x01), 0, MODULE_PWM, 0) /* GPIO40/TA1 */
+ALTERNATE(PIN_MASK(8, 0x01), 0, MODULE_PWM, 0) /* GPIO80/PWM3 */
+ALTERNATE(PIN_MASK(B, 0x80), 0, MODULE_PWM, 0) /* GPIOB7/PWM5 */
+
+/* ADC alternate functions */
+ALTERNATE(PIN_MASK(3, 0x10), 0, MODULE_ADC, 0) /* GPIO34/PS2_DAT2/ADC6 */
+ALTERNATE(PIN_MASK(4, 0x34), 0, MODULE_ADC, 0) /* GPIO42/ADC3/RI_L, GPIO45/ADC0, GPIO44/ADC1 */
+ALTERNATE(PIN_MASK(E, 0x02), 0, MODULE_ADC, 0) /* GPIOE1/ADC7 */
+
+/* KB alternate functions */
+ALTERNATE(PIN_MASK(0, 0xf0), 0, MODULE_KB, GPIO_ODR_HIGH) /* KSO10&P80_CLK/GPIO07, KSO11&P80_DAT/GPIO06, KSO12/GPIO05, KSO13/GPIO04 */
+ALTERNATE(PIN_MASK(1, 0x7f), 0, MODULE_KB, GPIO_ODR_HIGH) /* KSO06/GPO13/GP_SEL_L, KSO07/GPO12/JEN_L, KSO03/GPIO16/JTAG_TDO0_SWO, KSO04/GPIO15/XNOR, KSO05/GPIO14, KSO08/GPIO11/CR_SOUT1, KSO09/GPIO10/CR_SIN1 */
+ALTERNATE(PIN_MASK(2, 0xfc), 0, MODULE_KB, GPIO_INPUT | GPIO_PULL_UP) /* KSI2/GPIO27/TRACEDATA1, KSI3/GPIO26/TRACEDATA0, KSI4/GPIO25/TRACECLK/GP_SCLK, KSI5/GPIO24/GP_MISO, KSI6/GPIO23/S_SBUB, KSI7/GPIO22/S_SBUA */
+ALTERNATE(PIN_MASK(2, 0x03), 0, MODULE_KB, GPIO_ODR_HIGH) /* KSO00/GPIO21/JTAG_TCK_SWCLK, KSO01/GPIO20/JTAG_TMS_SWIO */
+ALTERNATE(PIN_MASK(3, 0x03), 0, MODULE_KB, GPIO_INPUT | GPIO_PULL_UP) /* KSI0/GPIO31/TRACEDATA3/GP_MOSI, KSI1/GPIO30/TRACEDATA2/GP_CS_L */
+ALTERNATE(PIN_MASK(8, 0x04), 0, MODULE_KB, GPIO_ODR_HIGH) /* KSO14/GPIO82 */
+
+/* PMU alternate functions */
+ALTERNATE(PIN_MASK(0, 0x01), 0, MODULE_PMU, GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH) /* PSL_IN2_L&GPI00/GPIO00 */
+ALTERNATE(PIN_MASK(0, 0x02), 0, MODULE_PMU, GPIO_INT_BOTH | GPIO_HIB_WAKE_LOW) /* GPIO01/PSL_IN3_L&GPI01 */
+ALTERNATE(PIN_MASK(D, 0x04), 0, MODULE_PMU, GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH) /* PSL_IN1_L&GPID2/GPIOD2 */
+
+/* Unused Pins */
+UNUSED(PIN(D, 6)) /* GPOD6/CR_SOUT3/SHDF_ESPI_L */
+UNUSED(PIN(3, 2)) /* GPO32/TRIS_L */
+UNUSED(PIN(3, 5)) /* GPO35/CR_SOUT4/TEST_L */
+UNUSED(PIN(6, 6)) /* GPIO66 */
+UNUSED(PIN(5, 7)) /* GPIO57/SER_IRQ/ESPI_ALERT_L */
+UNUSED(PIN(9, 5)) /* GPIO95 */
+UNUSED(PIN(8, 1)) /* GPIO81 */
+UNUSED(PIN(5, 6)) /* GPIO56 */
+UNUSED(PIN(D, 4)) /* GPIOD4 */
+UNUSED(PIN(9, 3)) /* GPIO93 */
+UNUSED(PIN(9, 7)) /* GPIO97 */
+UNUSED(PIN(C, 3)) /* GPIOC3 */
+UNUSED(PIN(C, 4)) /* GPIOC4 */
+UNUSED(PIN(C, 6)) /* GPIOC6 */
+UNUSED(PIN(5, 0)) /* GPIO50 */
+UNUSED(PIN(8, 3)) /* GPIO83 */
+UNUSED(PIN(7, 0)) /* GPIO70 */
+UNUSED(PIN(4, 1)) /* GPIO41 */
+
+/* Pre-configured PSL balls: J8 K6 */
diff --git a/board/marasov/gpio.inc b/board/marasov/gpio.inc
new file mode 100644
index 0000000000..d4a2ff2d67
--- /dev/null
+++ b/board/marasov/gpio.inc
@@ -0,0 +1,38 @@
+/* -*- mode:c -*-
+ *
+ * Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#define MODULE_KB MODULE_KEYBOARD_SCAN
+
+/*
+ * Generated-gpio.inc is produced using a Brya specific tool that
+ * parses the GPIO definitions derived from the board schematics and
+ * EC pinout descriptions derived form the chip datasheets to generate
+ * the Chrome EC GPIO pinout definitions. Due to the confidential
+ * nature of schematics and datasheets, they are not provided here.
+ *
+ * Variants that do not auto-generate their GPIO definitions should
+ * combine the Brya gpio.inc and generated-gpio.inc into their
+ * gpio.inc and customize as appropriate.
+ */
+
+#include "generated-gpio.inc"
+
+/*
+ * The NPCX keyboard driver does not use named GPIOs to access
+ * keyboard scan pins, so we do not list them in *gpio.inc. However, when
+ * KEYBOARD_COL2_INVERTED is defined, this name is required.
+ */
+GPIO(EC_KSO_02_INV, PIN(1, 7), GPIO_OUT_LOW)
+
+/* IO expander configuration */
+
+/* GPIO02_P2 to PU */
+/* GPIO03_P2 to PU */
+IOEX(USB_C0_OC_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 4), GPIO_ODR_HIGH)
+IOEX(USB_C0_FRS_EN, EXPIN(IOEX_C0_NCT38XX, 0, 6), GPIO_OUT_LOW)
+IOEX(USB_C0_RT_RST_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 7), GPIO_ODR_LOW)
+/* GPIO07_P2 to PU */
diff --git a/board/marasov/i2c.c b/board/marasov/i2c.c
new file mode 100644
index 0000000000..15c9b13e83
--- /dev/null
+++ b/board/marasov/i2c.c
@@ -0,0 +1,81 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "hooks.h"
+#include "i2c.h"
+
+/* I2C port map configuration */
+const struct i2c_port_t i2c_ports[] = {
+ {
+ /* I2C0 */
+ .name = "sensor",
+ .port = I2C_PORT_SENSOR,
+ .kbps = 400,
+ .scl = GPIO_EC_I2C_SENSOR_SCL,
+ .sda = GPIO_EC_I2C_SENSOR_SDA,
+ },
+ {
+ /* I2C1 */
+ .name = "tcpc0,2",
+ .port = I2C_PORT_USB_C0_TCPC,
+ .kbps = 1000,
+ .scl = GPIO_EC_I2C_USB_C0_TCPC_SCL,
+ .sda = GPIO_EC_I2C_USB_C0_TCPC_SDA,
+ },
+ {
+ /* I2C2 */
+ .name = "ppc0,2",
+ .port = I2C_PORT_USB_C0_PPC,
+ .kbps = 1000,
+ .scl = GPIO_EC_I2C_USB_C0_PPC_BC_SCL,
+ .sda = GPIO_EC_I2C_USB_C0_PPC_BC_SDA,
+ },
+ {
+ /* I2C3 */
+ .name = "retimer0,2",
+ .port = I2C_PORT_USB_C0_MUX,
+ .kbps = 1000,
+ .scl = GPIO_EC_I2C_USB_C0_RT_SCL,
+ .sda = GPIO_EC_I2C_USB_C0_RT_SDA,
+ },
+ {
+ /* I2C4 C1 TCPC */
+ .name = "tcpc1",
+ .port = I2C_PORT_USB_C1_TCPC,
+ .kbps = 1000,
+ .scl = GPIO_EC_I2C_USB_C1_TCPC_SCL,
+ .sda = GPIO_EC_I2C_USB_C1_TCPC_SDA,
+ .flags = I2C_PORT_FLAG_DYNAMIC_SPEED,
+ },
+ {
+ /* I2C5 */
+ .name = "battery",
+ .port = I2C_PORT_BATTERY,
+ .kbps = 100,
+ .scl = GPIO_EC_I2C_BAT_SCL,
+ .sda = GPIO_EC_I2C_BAT_SDA,
+ },
+ {
+ /* I2C6 */
+ .name = "ppc1",
+ .port = I2C_PORT_USB_C1_PPC,
+ .kbps = 1000,
+ .scl = GPIO_EC_I2C_USB_C1_MIX_SCL,
+ .sda = GPIO_EC_I2C_USB_C1_MIX_SDA,
+ .flags = I2C_PORT_FLAG_DYNAMIC_SPEED,
+ },
+ {
+ /* I2C7 */
+ .name = "eeprom",
+ .port = I2C_PORT_EEPROM,
+ .kbps = 400,
+ .scl = GPIO_EC_I2C_MISC_SCL_R,
+ .sda = GPIO_EC_I2C_MISC_SDA_R,
+ },
+};
+const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
diff --git a/board/marasov/keyboard.c b/board/marasov/keyboard.c
new file mode 100644
index 0000000000..936aeb290b
--- /dev/null
+++ b/board/marasov/keyboard.c
@@ -0,0 +1,25 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+
+#include "keyboard_scan.h"
+#include "timer.h"
+
+/* Keyboard scan setting */
+__override struct keyboard_scan_config keyscan_config = {
+ /* Increase from 50 us, because KSO_02 passes through the H1. */
+ .output_settle_us = 80,
+ /* Other values should be the same as the default configuration. */
+ .debounce_down_us = 9 * MSEC,
+ .debounce_up_us = 30 * MSEC,
+ .scan_period_us = 3 * MSEC,
+ .min_post_scan_delay_us = 1000,
+ .poll_timeout_us = 100 * MSEC,
+ .actual_key_mask = {
+ 0x14, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff,
+ 0xa4, 0xff, 0xfe, 0x55, 0xfa, 0xca /* full set */
+ },
+};
diff --git a/board/marasov/led.c b/board/marasov/led.c
new file mode 100644
index 0000000000..74005005cb
--- /dev/null
+++ b/board/marasov/led.c
@@ -0,0 +1,101 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "chipset.h"
+#include "ec_commands.h"
+#include "gpio.h"
+#include "led_common.h"
+#include "led_onoff_states.h"
+
+#define LED_OFF_LVL 1
+#define LED_ON_LVL 0
+
+__override const int led_charge_lvl_1;
+__override const int led_charge_lvl_2 = 95;
+
+__override struct led_descriptor
+ led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = {
+ [STATE_CHARGING_LVL_1] = { { EC_LED_COLOR_AMBER,
+ LED_INDEFINITE } },
+ [STATE_CHARGING_LVL_2] = { { EC_LED_COLOR_AMBER,
+ LED_INDEFINITE } },
+ [STATE_CHARGING_FULL_CHARGE] = { { EC_LED_COLOR_WHITE,
+ LED_INDEFINITE } },
+ [STATE_DISCHARGE_S0] = { { EC_LED_COLOR_WHITE,
+ LED_INDEFINITE } },
+ [STATE_DISCHARGE_S0_BAT_LOW] = { { EC_LED_COLOR_AMBER,
+ 1 * LED_ONE_SEC },
+ { LED_OFF, 3 * LED_ONE_SEC } },
+ [STATE_DISCHARGE_S3] = { { EC_LED_COLOR_WHITE,
+ 1 * LED_ONE_SEC },
+ { LED_OFF, 3 * LED_ONE_SEC } },
+ [STATE_DISCHARGE_S5] = { { LED_OFF, LED_INDEFINITE } },
+ [STATE_BATTERY_ERROR] = { { EC_LED_COLOR_AMBER,
+ 1 * LED_ONE_SEC },
+ { LED_OFF, 1 * LED_ONE_SEC } },
+ [STATE_FACTORY_TEST] = { { EC_LED_COLOR_WHITE,
+ 2 * LED_ONE_SEC },
+ { EC_LED_COLOR_AMBER,
+ 2 * LED_ONE_SEC } },
+ };
+
+const enum ec_led_id supported_led_ids[] = {
+ EC_LED_ID_BATTERY_LED,
+};
+
+const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
+
+__override void led_set_color_battery(enum ec_led_colors color)
+{
+ switch (color) {
+ case EC_LED_COLOR_WHITE:
+ gpio_set_level(GPIO_PWR_LED_A_ODL, LED_OFF_LVL);
+ gpio_set_level(GPIO_PWR_LED_W_ODL, LED_ON_LVL);
+ break;
+ case EC_LED_COLOR_AMBER:
+ gpio_set_level(GPIO_PWR_LED_A_ODL, LED_ON_LVL);
+ gpio_set_level(GPIO_PWR_LED_W_ODL, LED_OFF_LVL);
+ break;
+ default: /* LED_OFF and other unsupported colors */
+ gpio_set_level(GPIO_PWR_LED_W_ODL, LED_OFF_LVL);
+ gpio_set_level(GPIO_PWR_LED_A_ODL, LED_OFF_LVL);
+ break;
+ }
+}
+
+void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
+{
+ if (led_id == EC_LED_ID_BATTERY_LED) {
+ brightness_range[EC_LED_COLOR_WHITE] = 1;
+ brightness_range[EC_LED_COLOR_AMBER] = 1;
+ }
+}
+
+int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
+{
+ if (led_id == EC_LED_ID_BATTERY_LED) {
+ if (brightness[EC_LED_COLOR_WHITE] != 0)
+ led_set_color_battery(EC_LED_COLOR_WHITE);
+ else if (brightness[EC_LED_COLOR_AMBER] != 0)
+ led_set_color_battery(EC_LED_COLOR_AMBER);
+ else
+ led_set_color_battery(LED_OFF);
+ }
+
+ return EC_SUCCESS;
+}
+
+__override enum led_states board_led_get_state(enum led_states desired_state)
+{
+ if (desired_state == STATE_BATTERY_ERROR) {
+ if (chipset_in_state(CHIPSET_STATE_ON))
+ return desired_state;
+ else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
+ return STATE_DISCHARGE_S3;
+ else
+ return STATE_DISCHARGE_S5;
+ }
+ return desired_state;
+}
diff --git a/board/marasov/pwm.c b/board/marasov/pwm.c
new file mode 100644
index 0000000000..f693a6e27f
--- /dev/null
+++ b/board/marasov/pwm.c
@@ -0,0 +1,38 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+
+#include "compile_time_macros.h"
+#include "hooks.h"
+#include "pwm.h"
+#include "pwm_chip.h"
+
+const struct pwm_t pwm_channels[] = {
+ [PWM_CH_KBLIGHT] = {
+ .channel = 3,
+ .flags = 0,
+ /*
+ * Set PWM frequency to multiple of 50 Hz and 60 Hz to prevent
+ * flicker. Higher frequencies consume similar average power to
+ * lower PWM frequencies, but higher frequencies record a much
+ * lower maximum power.
+ */
+ .freq = 12000,
+ },
+ [PWM_CH_FAN] = {
+ .channel = 5,
+ .flags = PWM_CONFIG_OPEN_DRAIN,
+ .freq = 25000,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT);
+
+static void board_pwm_init(void)
+{
+ pwm_enable(PWM_CH_KBLIGHT, 1);
+ pwm_set_duty(PWM_CH_KBLIGHT, 50);
+}
+DECLARE_HOOK(HOOK_INIT, board_pwm_init, HOOK_PRIO_DEFAULT);
diff --git a/board/marasov/sensors.c b/board/marasov/sensors.c
new file mode 100644
index 0000000000..2a25141639
--- /dev/null
+++ b/board/marasov/sensors.c
@@ -0,0 +1,187 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+#include "adc.h"
+#include "gpio.h"
+#include "hooks.h"
+#include "temp_sensor.h"
+#include "thermal.h"
+#include "temp_sensor/thermistor.h"
+
+/* ADC configuration */
+struct adc_t adc_channels[] = {
+ [ADC_TEMP_SENSOR_1_DDR_SOC] = {
+ .name = "TEMP_DDR_SOC",
+ .input_ch = NPCX_ADC_CH0,
+ .factor_mul = ADC_MAX_VOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ },
+ [ADC_TEMP_SENSOR_2_AMBIENT] = {
+ .name = "TEMP_AMBIENT",
+ .input_ch = NPCX_ADC_CH1,
+ .factor_mul = ADC_MAX_VOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ },
+ [ADC_TEMP_SENSOR_3_CHARGER] = {
+ .name = "TEMP_CHARGER",
+ .input_ch = NPCX_ADC_CH6,
+ .factor_mul = ADC_MAX_VOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ },
+ [ADC_TEMP_SENSOR_4_WWAN] = {
+ .name = "TEMP_WWAN",
+ .input_ch = NPCX_ADC_CH7,
+ .factor_mul = ADC_MAX_VOLT,
+ .factor_div = ADC_READ_MAX + 1,
+ .shift = 0,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
+
+/* Temperature sensor configuration */
+const struct temp_sensor_t temp_sensors[] = {
+ [TEMP_SENSOR_1_DDR_SOC] = {
+ .name = "DDR and SOC",
+ .type = TEMP_SENSOR_TYPE_BOARD,
+ .read = get_temp_3v3_30k9_47k_4050b,
+ .idx = ADC_TEMP_SENSOR_1_DDR_SOC,
+ },
+ [TEMP_SENSOR_2_AMBIENT] = {
+ .name = "Ambient",
+ .type = TEMP_SENSOR_TYPE_BOARD,
+ .read = get_temp_3v3_30k9_47k_4050b,
+ .idx = ADC_TEMP_SENSOR_2_AMBIENT,
+ },
+ [TEMP_SENSOR_3_CHARGER] = {
+ .name = "Charger",
+ .type = TEMP_SENSOR_TYPE_BOARD,
+ .read = get_temp_3v3_30k9_47k_4050b,
+ .idx = ADC_TEMP_SENSOR_3_CHARGER,
+ },
+ [TEMP_SENSOR_4_WWAN] = {
+ .name = "WWAN",
+ .type = TEMP_SENSOR_TYPE_BOARD,
+ .read = get_temp_3v3_30k9_47k_4050b,
+ .idx = ADC_TEMP_SENSOR_4_WWAN,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT);
+
+/*
+ * TODO(b/180681346): update for Alder Lake/brya
+ *
+ * Alder Lake specifies 100 C as maximum TDP temperature. THRMTRIP# occurs at
+ * 130 C. However, sensor is located next to DDR, so we need to use the lower
+ * DDR temperature limit (85 C)
+ */
+/*
+ * TODO(b/202062363): Remove when clang is fixed.
+ */
+#define THERMAL_CPU \
+ { \
+ .temp_host = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(85), \
+ [EC_TEMP_THRESH_HALT] = C_TO_K(90), \
+ }, \
+ .temp_host_release = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(80), \
+ }, \
+ .temp_fan_off = C_TO_K(35), \
+ .temp_fan_max = C_TO_K(60), \
+ }
+__maybe_unused static const struct ec_thermal_config thermal_cpu = THERMAL_CPU;
+
+/*
+ * TODO(b/180681346): update for Alder Lake/brya
+ *
+ * Inductor limits - used for both charger and PP3300 regulator
+ *
+ * Need to use the lower of the charger IC, PP3300 regulator, and the inductors
+ *
+ * Charger max recommended temperature 100C, max absolute temperature 125C
+ * PP3300 regulator: operating range -40 C to 145 C
+ *
+ * Inductors: limit of 125c
+ * PCB: limit is 80c
+ */
+/*
+ * TODO(b/202062363): Remove when clang is fixed.
+ */
+#define THERMAL_AMBIENT \
+ { \
+ .temp_host = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(85), \
+ [EC_TEMP_THRESH_HALT] = C_TO_K(90), \
+ }, \
+ .temp_host_release = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(80), \
+ }, \
+ .temp_fan_off = C_TO_K(35), \
+ .temp_fan_max = C_TO_K(60), \
+ }
+__maybe_unused static const struct ec_thermal_config thermal_ambient =
+ THERMAL_AMBIENT;
+
+/*
+ * Inductor limits - used for both charger and PP3300 regulator
+ *
+ * Need to use the lower of the charger IC, PP3300 regulator, and the inductors
+ *
+ * Charger max recommended temperature 125C, max absolute temperature 150C
+ * PP3300 regulator: operating range -40 C to 125 C
+ *
+ * Inductors: limit of 125c
+ * PCB: limit is 80c
+ */
+/*
+ * TODO(b/202062363): Remove when clang is fixed.
+ */
+#define THERMAL_CHARGER \
+ { \
+ .temp_host = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(105), \
+ [EC_TEMP_THRESH_HALT] = C_TO_K(120), \
+ }, \
+ .temp_host_release = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(90), \
+ }, \
+ .temp_fan_off = C_TO_K(35), \
+ .temp_fan_max = C_TO_K(65), \
+ }
+__maybe_unused static const struct ec_thermal_config thermal_charger =
+ THERMAL_CHARGER;
+
+/*
+ * TODO(b/180681346): update for brya WWAN module
+ */
+/*
+ * TODO(b/202062363): Remove when clang is fixed.
+ */
+#define THERMAL_WWAN \
+ { \
+ .temp_host = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(130), \
+ [EC_TEMP_THRESH_HALT] = C_TO_K(130), \
+ }, \
+ .temp_host_release = { \
+ [EC_TEMP_THRESH_HIGH] = C_TO_K(100), \
+ }, \
+ .temp_fan_off = C_TO_K(35), \
+ .temp_fan_max = C_TO_K(60), \
+ }
+__maybe_unused static const struct ec_thermal_config thermal_wwan =
+ THERMAL_WWAN;
+
+struct ec_thermal_config thermal_params[] = {
+ [TEMP_SENSOR_1_DDR_SOC] = THERMAL_CPU,
+ [TEMP_SENSOR_2_AMBIENT] = THERMAL_AMBIENT,
+ [TEMP_SENSOR_3_CHARGER] = THERMAL_CHARGER,
+ [TEMP_SENSOR_4_WWAN] = THERMAL_WWAN,
+};
+BUILD_ASSERT(ARRAY_SIZE(thermal_params) == TEMP_SENSOR_COUNT);
diff --git a/board/marasov/usbc_config.c b/board/marasov/usbc_config.c
new file mode 100644
index 0000000000..b974ba7509
--- /dev/null
+++ b/board/marasov/usbc_config.c
@@ -0,0 +1,348 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include "cbi.h"
+#include "charger.h"
+#include "common.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "driver/ppc/syv682x_public.h"
+#include "driver/retimer/bb_retimer_public.h"
+#include "driver/tcpm/nct38xx.h"
+#include "driver/tcpm/ps8xxx_public.h"
+#include "driver/tcpm/tcpci.h"
+#include "ec_commands.h"
+#include "fw_config.h"
+#include "gpio.h"
+#include "gpio_signal.h"
+#include "hooks.h"
+#include "ioexpander.h"
+#include "system.h"
+#include "task.h"
+#include "task_id.h"
+#include "timer.h"
+#include "usbc_config.h"
+#include "usbc_ppc.h"
+#include "usb_mux.h"
+#include "usb_pd.h"
+#include "usb_pd_tcpm.h"
+
+#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args)
+#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args)
+
+#ifdef CONFIG_ZEPHYR
+enum ioex_port { IOEX_C0_NCT38XX = 0, IOEX_PORT_COUNT };
+#endif /* CONFIG_ZEPHYR */
+
+#ifndef CONFIG_ZEPHYR
+/* USBC TCPC configuration */
+const struct tcpc_config_t tcpc_config[] = {
+ [USBC_PORT_C0] = {
+ .bus_type = EC_BUS_TYPE_I2C,
+ .i2c_info = {
+ .port = I2C_PORT_USB_C0_TCPC,
+ .addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS,
+ },
+ .drv = &nct38xx_tcpm_drv,
+ .flags = TCPC_FLAGS_TCPCI_REV2_0 |
+ TCPC_FLAGS_NO_DEBUG_ACC_CONTROL,
+ },
+ [USBC_PORT_C1] = {
+ .bus_type = EC_BUS_TYPE_I2C,
+ .i2c_info = {
+ .port = I2C_PORT_USB_C1_TCPC,
+ .addr_flags = PS8XXX_I2C_ADDR1_FLAGS,
+ },
+ .drv = &ps8xxx_tcpm_drv,
+ .flags = TCPC_FLAGS_TCPCI_REV2_0 |
+ TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V |
+ TCPC_FLAGS_CONTROL_VCONN |
+ TCPC_FLAGS_CONTROL_FRS,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == USBC_PORT_COUNT);
+BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT);
+#endif /* !CONFIG_ZEPHYR */
+
+/******************************************************************************/
+/* USB-A charging control */
+
+#ifndef CONFIG_ZEPHYR
+const int usb_port_enable[USB_PORT_COUNT] = {
+ GPIO_EN_PP5000_USBA_R,
+};
+#endif
+BUILD_ASSERT(ARRAY_SIZE(usb_port_enable) == USB_PORT_COUNT);
+
+/******************************************************************************/
+
+#ifndef CONFIG_ZEPHYR
+/* USBC PPC configuration */
+struct ppc_config_t ppc_chips[] = {
+ [USBC_PORT_C0] = {
+ .i2c_port = I2C_PORT_USB_C0_PPC,
+ .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
+ .frs_en = IOEX_USB_C0_FRS_EN,
+ .drv = &syv682x_drv,
+ },
+ [USBC_PORT_C1] = {
+ /* Compatible with Silicon Mitus SM5360A */
+ .i2c_port = I2C_PORT_USB_C1_PPC,
+ .i2c_addr_flags = SYV682X_ADDR0_FLAGS,
+ .drv = &syv682x_drv,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
+
+unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
+
+/* USBC mux configuration - Alder Lake includes internal mux */
+static const struct usb_mux_chain usbc0_tcss_usb_mux = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C0,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+ },
+};
+
+/*
+ * USB3 DB mux configuration - the top level mux still needs to be set
+ * to the virtual_usb_mux_driver so the AP gets notified of mux changes
+ * and updates the TCSS configuration on state changes.
+ */
+static const struct usb_mux_chain usbc1_usb3_db_retimer = {
+ .mux =
+ &(const struct usb_mux){
+ .usb_port = USBC_PORT_C1,
+ .driver = &tcpci_tcpm_usb_mux_driver,
+ .hpd_update = &ps8xxx_tcpc_update_hpd_status,
+ },
+};
+
+const struct usb_mux_chain usb_muxes[] = {
+ [USBC_PORT_C0] = {
+ .mux = &(const struct usb_mux) {
+ .usb_port = USBC_PORT_C0,
+ .flags = USB_MUX_FLAG_CAN_IDLE,
+ .driver = &bb_usb_retimer,
+ .hpd_update = bb_retimer_hpd_update,
+ .i2c_port = I2C_PORT_USB_C0_MUX,
+ .i2c_addr_flags = USBC_PORT_C0_BB_RETIMER_I2C_ADDR,
+ },
+ .next = &usbc0_tcss_usb_mux,
+ },
+ [USBC_PORT_C1] = {
+ .mux = &(const struct usb_mux) {
+ /* PS8815 DB */
+ .usb_port = USBC_PORT_C1,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+ },
+ .next = &usbc1_usb3_db_retimer,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == USBC_PORT_COUNT);
+
+/*
+ * USB C0 uses burnside bridge chips and have their reset
+ * controlled by their respective TCPC chips acting as GPIO expanders.
+ *
+ * ioex_init() is normally called before we take the TCPCs out of
+ * reset, so we need to start in disabled mode, then explicitly
+ * call ioex_init().
+ */
+
+struct ioexpander_config_t ioex_config[] = {
+ [IOEX_C0_NCT38XX] = {
+ .i2c_host_port = I2C_PORT_USB_C0_TCPC,
+ .i2c_addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS,
+ .drv = &nct38xx_ioexpander_drv,
+ .flags = IOEX_FLAGS_DEFAULT_INIT_DISABLED,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(ioex_config) == CONFIG_IO_EXPANDER_PORT_COUNT);
+#endif /* !CONFIG_ZEPHYR */
+
+__override int bb_retimer_power_enable(const struct usb_mux *me, bool enable)
+{
+ enum ioex_signal rst_signal;
+
+ if (me->usb_port == USBC_PORT_C0) {
+/* TODO: explore how to handle board id in zephyr*/
+#ifndef CONFIG_ZEPHYR
+ rst_signal = IOEX_USB_C0_RT_RST_ODL;
+#else
+ /* On Zephyr use bb_controls generated from DTS */
+ rst_signal = bb_controls[me->usb_port].retimer_rst_gpio;
+#endif /* !CONFIG_ZEPHYR */
+ } else {
+ return EC_ERROR_INVAL;
+ }
+
+ /*
+ * We do not have a load switch for the burnside bridge chips,
+ * so we only need to sequence reset.
+ */
+
+ if (enable) {
+ /*
+ * Tpw, minimum time from VCC to RESET_N de-assertion is 100us.
+ * For boards that don't provide a load switch control, the
+ * retimer_init() function ensures power is up before calling
+ * this function.
+ */
+ ioex_set_level(rst_signal, 1);
+ /*
+ * Allow 1ms time for the retimer to power up lc_domain
+ * which powers I2C controller within retimer
+ */
+ msleep(1);
+ } else {
+ ioex_set_level(rst_signal, 0);
+ msleep(1);
+ }
+ return EC_SUCCESS;
+}
+
+void board_reset_pd_mcu(void)
+{
+ enum gpio_signal tcpc_rst;
+
+#ifndef CONFIG_ZEPHYR
+ tcpc_rst = GPIO_USB_C0_TCPC_RST_ODL;
+#else
+ tcpc_rst = GPIO_UNIMPLEMENTED;
+#endif /* !CONFIG_ZEPHYR */
+
+ /*
+ * TODO(b/179648104): figure out correct timing
+ */
+
+ gpio_set_level(tcpc_rst, 0);
+ gpio_set_level(GPIO_USB_C1_RT_RST_R_ODL, 0);
+
+ /*
+ * delay for power-on to reset-off and min. assertion time
+ */
+
+ msleep(20);
+
+ gpio_set_level(tcpc_rst, 1);
+ gpio_set_level(GPIO_USB_C1_RT_RST_R_ODL, 1);
+
+ /* wait for chips to come up */
+
+ msleep(50);
+}
+
+static void board_tcpc_init(void)
+{
+ /* Don't reset TCPCs after initial reset */
+ if (!system_jumped_late())
+ board_reset_pd_mcu();
+
+ /*
+ * These IO expander pins are implemented using the
+ * C0 TCPC, so they must be set up after the TCPC has
+ * been taken out of reset.
+ */
+#ifndef CONFIG_ZEPHYR
+ ioex_init(IOEX_C0_NCT38XX);
+#else
+ gpio_reset_port(DEVICE_DT_GET(DT_NODELABEL(ioex_port1)));
+#endif
+
+ /* Enable PPC interrupts. */
+ gpio_enable_interrupt(GPIO_USB_C0_PPC_INT_ODL);
+
+ /* Enable TCPC interrupts. */
+ gpio_enable_interrupt(GPIO_USB_C0_TCPC_INT_ODL);
+
+ gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL);
+ gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL);
+}
+DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_CHIPSET);
+
+uint16_t tcpc_get_alert_status(void)
+{
+ uint16_t status = 0;
+
+ if (gpio_get_level(GPIO_USB_C0_TCPC_INT_ODL) == 0)
+ status |= PD_STATUS_TCPC_ALERT_0;
+
+ if (gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL) == 0)
+ status |= PD_STATUS_TCPC_ALERT_1;
+
+ return status;
+}
+
+int ppc_get_alert_status(int port)
+{
+ if (port == USBC_PORT_C0)
+ return gpio_get_level(GPIO_USB_C0_PPC_INT_ODL) == 0;
+ else if (port == USBC_PORT_C1)
+ return gpio_get_level(GPIO_USB_C1_PPC_INT_ODL) == 0;
+ return 0;
+}
+
+void tcpc_alert_event(enum gpio_signal signal)
+{
+ switch (signal) {
+ case GPIO_USB_C0_TCPC_INT_ODL:
+ schedule_deferred_pd_interrupt(USBC_PORT_C0);
+ break;
+ case GPIO_USB_C1_TCPC_INT_ODL:
+ schedule_deferred_pd_interrupt(USBC_PORT_C1);
+ break;
+ default:
+ break;
+ }
+}
+
+void ppc_interrupt(enum gpio_signal signal)
+{
+ switch (signal) {
+ case GPIO_USB_C0_PPC_INT_ODL:
+ syv682x_interrupt(USBC_PORT_C0);
+ break;
+ case GPIO_USB_C1_PPC_INT_ODL:
+ syv682x_interrupt(USBC_PORT_C1);
+ break;
+ default:
+ break;
+ }
+}
+
+void retimer_interrupt(enum gpio_signal signal)
+{
+ /*
+ * TODO(b/179513527): add USB-C support
+ */
+}
+
+__override bool board_is_dts_port(int port)
+{
+ return port == USBC_PORT_C0;
+}
+
+__override bool board_is_tbt_usb4_port(int port)
+{
+ if (port == USBC_PORT_C0)
+ return true;
+
+ return false;
+}
+
+__override enum tbt_compat_cable_speed board_get_max_tbt_speed(int port)
+{
+ if (!board_is_tbt_usb4_port(port))
+ return TBT_SS_RES_0;
+
+ return TBT_SS_TBT_GEN3;
+}
diff --git a/board/marasov/usbc_config.h b/board/marasov/usbc_config.h
new file mode 100644
index 0000000000..1fa7ad4c7a
--- /dev/null
+++ b/board/marasov/usbc_config.h
@@ -0,0 +1,17 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Brya board-specific USB-C configuration */
+
+#ifndef __CROS_EC_USBC_CONFIG_H
+#define __CROS_EC_USBC_CONFIG_H
+
+#ifndef CONFIG_ZEPHYR
+#define CONFIG_USB_PD_PORT_MAX_COUNT 2
+#endif
+
+enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_C1, USBC_PORT_COUNT };
+
+#endif /* __CROS_EC_USBC_CONFIG_H */
diff --git a/board/marasov/vif_override.xml b/board/marasov/vif_override.xml
new file mode 100644
index 0000000000..6ade5d2f92
--- /dev/null
+++ b/board/marasov/vif_override.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vif:VIF xmlns="http://usb.org/VendorInfoFile.xsd">
+ <vif:Product_Revision>2</vif:Product_Revision>
+ <vif:TID>0</vif:TID>
+ <vif:Product>
+ <vif:USB4_Num_Internal_Host_Controllers value="1" />
+ <vif:USB4_Num_PCIe_DN_Bridges value="0" />
+ <vif:USB4RouterList>
+ <vif:Usb4Router>
+ <!--USB4 Router 0-->
+ <vif:USB4_Router_ID value="0" />
+ <vif:USB4_Silicon_VID value="32903">8087</vif:USB4_Silicon_VID>
+ <vif:USB4_Num_Lane_Adapters value="4" />
+ <vif:USB4_Num_USB3_DN_Adapters value="1" />
+ <vif:USB4_Num_DP_IN_Adapters value="1" />
+ <vif:USB4_Num_DP_OUT_Adapters value="0" />
+ <vif:USB4_Num_PCIe_DN_Adapters value="4" />
+ <vif:USB4_TBT3_Not_Supported value="0">TBT3 Compatible</vif:USB4_TBT3_Not_Supported>
+ <vif:USB4_PCIe_Wake_Supported value="true" />
+ <vif:USB4_USB3_Wake_Supported value="false" />
+ <vif:USB4_Num_Unused_Adapters value="0" />
+ <vif:USB4_TBT3_VID value="32903">8087</vif:USB4_TBT3_VID>
+ <vif:USB4_PCIe_Switch_Vendor_ID value="32902">8086</vif:USB4_PCIe_Switch_Vendor_ID>
+ <vif:USB4_PCIe_Switch_Device_ID value="39451">9A1B</vif:USB4_PCIe_Switch_Device_ID>
+ </vif:Usb4Router>
+ </vif:USB4RouterList>
+ </vif:Product>
+
+ <vif:Component>
+ <vif:USB4_Max_Speed value="1">Gen 3 (40Gb)</vif:USB4_Max_Speed>
+
+ <!--;USB Host-->
+
+ <vif:Host_Speed value="4">USB 3.2 Gen 2x2</vif:Host_Speed>
+ <vif:Host_Contains_Captive_Retimer value="true" />
+ <vif:Host_Truncates_DP_For_tDHPResponse value="false" />
+ <vif:Host_Suspend_Supported value="true" />
+
+ <!--;PD Source-->
+ <!-- will we ever clear USB_Suspend_Supported? -->
+ <vif:USB_Suspend_May_Be_Cleared value="true" />
+
+ <!-- remove FR_Swap_* when we enable CONFIG_USB_PD_FRS -->
+ <!--;Dual Role-->
+ <vif:FR_Swap_Supported_As_Initial_Sink value="true" />
+ <!--;PD Source-->
+ <vif:FR_Swap_Type_C_Current_Capability_As_Initial_Sink value="3">3A @ 5V</vif:FR_Swap_Type_C_Current_Capability_As_Initial_Sink>
+ <vif:SrcPdoList>
+ <vif:SrcPDO>
+ <!--Source PDO 1-->
+ <vif:Src_PD_OCP_OC_Debounce value="50">50 msec</vif:Src_PD_OCP_OC_Debounce>
+ <vif:Src_PD_OCP_OC_Threshold value="360">3600 mA</vif:Src_PD_OCP_OC_Threshold>
+ </vif:SrcPDO>
+ </vif:SrcPdoList>
+
+ <!-- SOP Discover ID -->
+ <vif:Product_Type_UFP_SOP value="2">PDUSB Peripheral</vif:Product_Type_UFP_SOP>
+ <vif:Product_Type_DFP_SOP value="2">PDUSB Host</vif:Product_Type_DFP_SOP>
+
+ <!-- USB4 Port -->
+ <vif:USB4_Lane_0_Adapter value="1" />
+ <vif:USB4_UFP_Supported value="false" />
+ <vif:USB4_DFP_Supported value="true" />
+ <vif:USB4_USB3_Tunneling_Supported value="true" />
+ <vif:USB4_DP_Tunneling_Supported value="true" />
+ <vif:USB4_CL1_State_Supported value="true" />
+ <vif:USB4_CL2_State_Supported value="true" />
+ <vif:USB4_Num_Retimers value="1" />
+ <vif:USB4_DP_Bit_Rate value="3">HBR3</vif:USB4_DP_Bit_Rate>
+ <vif:USB4_Num_DP_Lanes value="4">4 Lanes</vif:USB4_Num_DP_Lanes>
+
+ </vif:Component>
+
+ <vif:Component>
+ <vif:USB4_Supported value="false" />
+
+ <!--;USB Host-->
+ <vif:Host_Speed value="2">USB 3.2 Gen 2x1</vif:Host_Speed>
+ <vif:Host_Contains_Captive_Retimer value="true" />
+ <vif:Host_Truncates_DP_For_tDHPResponse value="false" />
+ <vif:Host_Suspend_Supported value="true" />
+
+ <!--;PD Source-->
+ <!-- will we ever clear USB_Suspend_Supported? -->
+ <vif:USB_Suspend_May_Be_Cleared value="true" />
+
+ <!-- remove FR_Swap_* when we enable CONFIG_USB_PD_FRS -->
+ <!--;Dual Role-->
+ <vif:FR_Swap_Supported_As_Initial_Sink value="true" />
+ <!--;PD Source-->
+ <vif:FR_Swap_Type_C_Current_Capability_As_Initial_Sink value="3">3A @ 5V</vif:FR_Swap_Type_C_Current_Capability_As_Initial_Sink>
+ <vif:SrcPdoList>
+ <vif:SrcPDO>
+ <!--Source PDO 1-->
+ <vif:Src_PD_OCP_OC_Debounce value="50">50 msec</vif:Src_PD_OCP_OC_Debounce>
+ <vif:Src_PD_OCP_OC_Threshold value="360">3600 mA</vif:Src_PD_OCP_OC_Threshold>
+ </vif:SrcPDO>
+ </vif:SrcPdoList>
+
+ <!-- SOP Discover ID -->
+ <vif:Product_Type_UFP_SOP value="3">PSD</vif:Product_Type_UFP_SOP>
+ <vif:Product_Type_DFP_SOP value="2">PDUSB Host</vif:Product_Type_DFP_SOP>
+
+ </vif:Component>
+
+ <vif:Component>
+ <vif:USB4_Max_Speed value="1">Gen 3 (40Gb)</vif:USB4_Max_Speed>
+ <!--;USB Host-->
+ <vif:Host_Speed value="4">USB 3.2 Gen 2x2</vif:Host_Speed>
+ <vif:Host_Contains_Captive_Retimer value="true" />
+ <vif:Host_Truncates_DP_For_tDHPResponse value="false" />
+ <vif:Host_Suspend_Supported value="true" />
+
+ <!--;PD Source-->
+ <!-- will we ever clear USB_Suspend_Supported? -->
+ <vif:USB_Suspend_May_Be_Cleared value="true" />
+
+ <!-- remove FR_Swap_* when we enable CONFIG_USB_PD_FRS -->
+ <!--;Dual Role-->
+ <vif:FR_Swap_Supported_As_Initial_Sink value="true" />
+ <!--;PD Source-->
+ <vif:FR_Swap_Type_C_Current_Capability_As_Initial_Sink value="3">3A @ 5V</vif:FR_Swap_Type_C_Current_Capability_As_Initial_Sink>
+ <vif:SrcPdoList>
+ <vif:SrcPDO>
+ <!--Source PDO 1-->
+ <vif:Src_PD_OCP_OC_Debounce value="50">50 msec</vif:Src_PD_OCP_OC_Debounce>
+ <vif:Src_PD_OCP_OC_Threshold value="360">3600 mA</vif:Src_PD_OCP_OC_Threshold>
+ </vif:SrcPDO>
+ </vif:SrcPdoList>
+
+ <!-- SOP Discover ID -->
+ <vif:Product_Type_UFP_SOP value="2">PDUSB Peripheral</vif:Product_Type_UFP_SOP>
+ <vif:Product_Type_DFP_SOP value="2">PDUSB Host</vif:Product_Type_DFP_SOP>
+
+ <!-- USB4 Port -->
+ <vif:USB4_Lane_0_Adapter value="1" />
+ <vif:USB4_UFP_Supported value="false" />
+ <vif:USB4_DFP_Supported value="true" />
+ <vif:USB4_USB3_Tunneling_Supported value="true" />
+ <vif:USB4_DP_Tunneling_Supported value="true" />
+ <vif:USB4_CL1_State_Supported value="true" />
+ <vif:USB4_CL2_State_Supported value="true" />
+ <vif:USB4_Num_Retimers value="1" />
+ <vif:USB4_DP_Bit_Rate value="3">HBR3</vif:USB4_DP_Bit_Rate>
+ <vif:USB4_Num_DP_Lanes value="4">4 Lanes</vif:USB4_Num_DP_Lanes>
+
+ </vif:Component>
+</vif:VIF>
diff --git a/board/marzipan/board.c b/board/marzipan/board.c
index 125c39a826..cf59f133e7 100644
--- a/board/marzipan/board.c
+++ b/board/marzipan/board.c
@@ -496,6 +496,7 @@ void board_tcpc_init(void)
/* 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);
@@ -625,8 +626,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -638,8 +639,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/mchpevb1/board.c b/board/mchpevb1/board.c
index 23135108f6..3b7b34843b 100644
--- a/board/mchpevb1/board.c
+++ b/board/mchpevb1/board.c
@@ -590,21 +590,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-
-/**
- * Set the charge limit based upon desired maximum.
- *
- * @param port Port number.
- * @param supplier Charge supplier type.
- * @param charge_ma Desired charge limit (mA).
- * @param charge_mv Negotiated charge voltage (mV).
- */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
#endif
/*
diff --git a/board/mchpevb1/board.h b/board/mchpevb1/board.h
index 10208ca736..dd7c87fd6f 100644
--- a/board/mchpevb1/board.h
+++ b/board/mchpevb1/board.h
@@ -150,7 +150,8 @@
/* #define CONFIG_CHARGER_DISCHARGE_ON_AC */
/* #define CONFIG_CHARGER_ISL9237 */
/* #define CONFIG_CHARGER_ILIM_PIN_DISABLED */
-/* #define CONFIG_CHARGER_INPUT_CURRENT 512 */
+/* #define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 */
+/* #define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 */
/* #define CONFIG_CHARGER_NARROW_VDC */
/* #define CONFIG_CHARGER_PROFILE_OVERRIDE */
diff --git a/board/metaknight/board.c b/board/metaknight/board.c
index 5aa3a21cc0..e5d86aba63 100644
--- a/board/metaknight/board.c
+++ b/board/metaknight/board.c
@@ -396,19 +396,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/metaknight/board.h b/board/metaknight/board.h
index 5bd3c56a83..79027a3e9c 100644
--- a/board/metaknight/board.h
+++ b/board/metaknight/board.h
@@ -22,6 +22,11 @@
#undef CONFIG_CHARGER_SINGLE_CHIP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/*
* GPIO for C1 interrupts, for baseboard use
diff --git a/board/mithrax/board.h b/board/mithrax/board.h
index d12375d678..0b6ea04bd4 100644
--- a/board/mithrax/board.h
+++ b/board/mithrax/board.h
@@ -176,6 +176,7 @@
#define CONFIG_CHARGE_RAMP_SW
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 10
/* RGB Keyboard */
#ifdef SECTION_IS_RW
diff --git a/board/mithrax/charger_isl9241.c b/board/mithrax/charger_isl9241.c
index a9eafe353e..7a16fcd5cb 100644
--- a/board/mithrax/charger_isl9241.c
+++ b/board/mithrax/charger_isl9241.c
@@ -79,11 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_ma = (charge_ma * 90) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/moli/board.c b/board/moli/board.c
index acc12f9831..a63c93ae50 100644
--- a/board/moli/board.c
+++ b/board/moli/board.c
@@ -8,11 +8,13 @@
#include "button.h"
#include "charge_manager.h"
#include "charge_state_v2.h"
+#include "chipset.h"
#include "common.h"
#include "compile_time_macros.h"
#include "console.h"
#include "cros_board_info.h"
#include "driver/tcpm/tcpci.h"
+#include "fw_config.h"
#include "gpio.h"
#include "gpio_signal.h"
#include "hooks.h"
@@ -31,6 +33,32 @@ static void power_monitor(void);
DECLARE_DEFERRED(power_monitor);
/******************************************************************************/
+/* Power on by HDMI/ DP monitor */
+struct monitor_config {
+ enum gpio_signal gpio;
+ uint8_t state;
+};
+
+static struct monitor_config monitors[MONITOR_COUNT] = {
+ [HDMI1_MONITOR] = {
+ .gpio = GPIO_HDMI1_MONITOR_ON,
+ .state = MONITOR_OFF,
+ },
+
+ [HDMI2_MONITOR] = {
+ .gpio = GPIO_HDMI2_MONITOR_ON,
+ .state = MONITOR_OFF,
+ },
+
+ [OPTION_MONITOR] = {
+ .gpio = GPIO_OPTION_MONITOR_ON,
+ .state = MONITOR_OFF,
+ },
+};
+
+/******************************************************************************/
+
+/******************************************************************************/
/* USB-A charging control */
const int usb_port_enable[USB_PORT_COUNT] = {
@@ -116,34 +144,6 @@ static uint8_t usbc_overcurrent;
* only do that if the system is off since it might still brown out.
*/
-/*
- * Barrel-jack power adapter ratings.
- */
-static const struct {
- int voltage;
- int current;
-} bj_power[] = {
- { /* 0 - 90W (also default) */
- .voltage = 19000,
- .current = 4740 },
- { /* 1 - 135W */
- .voltage = 19500,
- .current = 6920 },
-};
-
-static unsigned int ec_config_get_bj_power(void)
-{
- uint32_t fw_config;
- unsigned int bj;
-
- cbi_get_fw_config(&fw_config);
- bj = (fw_config & EC_CFG_BJ_POWER_MASK) >> EC_CFG_BJ_POWER_L;
- /* Out of range value defaults to 0 */
- if (bj >= ARRAY_SIZE(bj_power))
- bj = 0;
- return bj;
-}
-
#define ADP_DEBOUNCE_MS 1000 /* Debounce time for BJ plug/unplug */
/* Debounced connection state of the barrel jack */
static int8_t adp_connected = -1;
@@ -155,12 +155,9 @@ static void adp_connect_deferred(void)
/* Debounce */
if (connected == adp_connected)
return;
- if (connected) {
- unsigned int bj = ec_config_get_bj_power();
+ if (connected)
+ ec_bj_power(&pi.voltage, &pi.current);
- pi.voltage = bj_power[bj].voltage;
- pi.current = bj_power[bj].current;
- }
charge_manager_update_charge(CHARGE_SUPPLIER_DEDICATED,
DEDICATED_CHARGE_PORT, &pi);
adp_connected = connected;
@@ -192,12 +189,29 @@ DECLARE_HOOK(HOOK_INIT, adp_state_init, HOOK_PRIO_INIT_CHARGE_MANAGER + 1);
static void board_init(void)
{
+ int i;
+
gpio_enable_interrupt(GPIO_BJ_ADP_PRESENT_ODL);
gpio_enable_interrupt(GPIO_HDMI_CONN_OC_ODL);
gpio_enable_interrupt(GPIO_USB_A1_OC_ODL);
gpio_enable_interrupt(GPIO_USB_A2_OC_ODL);
gpio_enable_interrupt(GPIO_USB_A3_OC_ODL);
gpio_enable_interrupt(GPIO_USB_A4_OC_ODL);
+
+ if (ec_cfg_power_on_monitor() == POWER_ON_MONITOR_ENABLE) {
+ /*
+ * Only enable interrupt when fw_config set it as enable.
+ */
+ gpio_enable_interrupt(GPIO_HDMI1_MONITOR_ON);
+ gpio_enable_interrupt(GPIO_HDMI2_MONITOR_ON);
+ gpio_enable_interrupt(GPIO_OPTION_MONITOR_ON);
+
+ /*
+ * Initialize the monitor state to corresponding gpio state.
+ */
+ for (i = 0; i < MONITOR_COUNT; i++)
+ monitors[i].state = gpio_get_level(monitors[i].gpio);
+ }
}
DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
@@ -432,3 +446,72 @@ static void power_monitor(void)
* Start power monitoring after ADCs have been initialised.
*/
DECLARE_HOOK(HOOK_INIT, power_monitor, HOOK_PRIO_INIT_ADC + 1);
+
+/******************************************************************************/
+/*
+ * System power on and wake up by monitor power button.
+ *
+ * After pressing power button of monitor for power on, monitor will send power
+ * on signal with 3.3V / 200ms to DT. If DT detect that pulse, there are three
+ * DT behavior:
+ *
+ * - Do nothing in state S0.
+ * - Wake up from state S0ix.
+ * - Power on from state S5 and G3.
+ */
+
+/* Debounce time for HDMI power button press */
+#define MONITOR_DEBOUNCE_MS 100
+
+static void monitor_irq_deferred(void);
+DECLARE_DEFERRED(monitor_irq_deferred);
+
+static void monitor_irq_deferred(void)
+{
+ int i;
+
+ for (i = 0; i < MONITOR_COUNT; i++) {
+ if (monitors[i].state && gpio_get_level(monitors[i].gpio)) {
+ /*
+ * System power on from state S5 and G3.
+ */
+ if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
+ chipset_power_on();
+ /*
+ * System wake up from state S0ix.
+ */
+ else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
+ power_button_simulate_press(200);
+ }
+ monitors[i].state = MONITOR_OFF;
+ }
+}
+
+/* Power on by HDMI/ DP monitor. */
+void monitor_interrupt(enum gpio_signal signal)
+{
+ /*
+ * Power on by HDMI/ DP monitor only works
+ * when system is not in S0.
+ */
+ if (chipset_in_state(CHIPSET_STATE_ON))
+ return;
+
+ if (ec_cfg_power_on_monitor() == POWER_ON_MONITOR_ENABLE) {
+ switch (signal) {
+ case GPIO_HDMI1_MONITOR_ON:
+ monitors[HDMI1_MONITOR].state = MONITOR_ON;
+ break;
+ case GPIO_HDMI2_MONITOR_ON:
+ monitors[HDMI2_MONITOR].state = MONITOR_ON;
+ break;
+ case GPIO_OPTION_MONITOR_ON:
+ monitors[OPTION_MONITOR].state = MONITOR_ON;
+ break;
+ default:
+ break;
+ }
+ hook_call_deferred(&monitor_irq_deferred_data,
+ MONITOR_DEBOUNCE_MS * MSEC);
+ }
+}
diff --git a/board/moli/board.h b/board/moli/board.h
index e7aa7855e7..8d0ba97fb2 100644
--- a/board/moli/board.h
+++ b/board/moli/board.h
@@ -181,17 +181,17 @@ enum fan_channel { FAN_CH_0 = 0, FAN_CH_COUNT };
enum mft_channel { MFT_CH_0 = 0, MFT_CH_COUNT };
-/*
- * firmware config fields
- */
-/*
- * Barrel-jack power (2 bits).
- */
-#define EC_CFG_BJ_POWER_L 0
-#define EC_CFG_BJ_POWER_H 1
-#define EC_CFG_BJ_POWER_MASK GENMASK(EC_CFG_BJ_POWER_H, EC_CFG_BJ_POWER_L)
+enum monitor_port {
+ HDMI1_MONITOR,
+ HDMI2_MONITOR,
+ OPTION_MONITOR,
+ MONITOR_COUNT
+};
+
+enum monitor_state { MONITOR_OFF, MONITOR_ON };
extern void adp_connect_interrupt(enum gpio_signal signal);
+extern void monitor_interrupt(enum gpio_signal signal);
#endif /* !__ASSEMBLER__ */
diff --git a/board/moli/build.mk b/board/moli/build.mk
index 4897d446b2..4ddfaaf181 100644
--- a/board/moli/build.mk
+++ b/board/moli/build.mk
@@ -20,3 +20,4 @@ board-y+=pwm.o
board-y+=sensors.o
board-y+=thermal.o
board-y+=usbc_config.o
+board-y+=fw_config.o
diff --git a/board/moli/fw_config.c b/board/moli/fw_config.c
new file mode 100644
index 0000000000..5807ee9111
--- /dev/null
+++ b/board/moli/fw_config.c
@@ -0,0 +1,73 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "cbi.h"
+#include "common.h"
+#include "compile_time_macros.h"
+#include "console.h"
+#include "cros_board_info.h"
+#include "fw_config.h"
+
+#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args)
+
+static union moli_cbi_fw_config fw_config;
+BUILD_ASSERT(sizeof(fw_config) == sizeof(uint32_t));
+
+/*
+ * FW_CONFIG defaults for moli if the CBI.FW_CONFIG data is not
+ * initialized.
+ */
+static const union moli_cbi_fw_config fw_config_defaults = {
+ .bj_power = BJ_90W,
+ .po_mon = POWER_ON_MONITOR_ENABLE,
+};
+
+/*
+ * Barrel-jack power adapter ratings.
+ */
+static const struct {
+ int voltage;
+ int current;
+} bj_power[] = {
+ [BJ_90W] = { /* 0 - 90W (also default) */
+ .voltage = 19000,
+ .current = 4740 },
+ [BJ_135W] = { /* 1 - 135W */
+ .voltage = 19500,
+ .current = 6920 },
+};
+
+/****************************************************************************
+ * Moli FW_CONFIG access
+ */
+void board_init_fw_config(void)
+{
+ if (cbi_get_fw_config(&fw_config.raw_value)) {
+ CPRINTS("CBI: Read FW_CONFIG failed, using board defaults");
+ fw_config = fw_config_defaults;
+ }
+}
+
+union moli_cbi_fw_config get_fw_config(void)
+{
+ return fw_config;
+}
+
+void ec_bj_power(uint32_t *voltage, uint32_t *current)
+{
+ unsigned int bj;
+
+ bj = fw_config.bj_power;
+ /* Out of range value defaults to 0 */
+ if (bj >= ARRAY_SIZE(bj_power))
+ bj = 0;
+ *voltage = bj_power[bj].voltage;
+ *current = bj_power[bj].current;
+}
+
+enum ec_cfg_power_on_monitor ec_cfg_power_on_monitor(void)
+{
+ return fw_config.po_mon;
+}
diff --git a/board/moli/fw_config.h b/board/moli/fw_config.h
new file mode 100644
index 0000000000..ee3dcd274d
--- /dev/null
+++ b/board/moli/fw_config.h
@@ -0,0 +1,53 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __BOARD_MOLI_FW_CONFIG_H_
+#define __BOARD_MOLI_FW_CONFIG_H_
+
+#include <stdint.h>
+
+/****************************************************************************
+ * CBI FW_CONFIG layout for Moli board.
+ *
+ * Source of truth is the project/brask/moli/config.star configuration file.
+ */
+
+enum ec_cfg_bj_power { BJ_90W = 0, BJ_135W = 1 };
+
+enum ec_cfg_power_on_monitor {
+ POWER_ON_MONITOR_ENABLE = 0,
+ POWER_ON_MONITOR_DISABLE = 1
+};
+
+union moli_cbi_fw_config {
+ struct {
+ uint32_t bj_power : 2;
+ uint32_t mlb_usb_tbt : 2;
+ uint32_t storage : 2;
+ uint32_t audio : 1;
+ enum ec_cfg_power_on_monitor po_mon : 1;
+ uint32_t reserved_1 : 24;
+ };
+ uint32_t raw_value;
+};
+
+/**
+ * Read the cached FW_CONFIG. Guaranteed to have valid values.
+ *
+ * @return the FW_CONFIG for the board.
+ */
+union moli_cbi_fw_config get_fw_config(void);
+
+/**
+ * Get the barrel-jack power from FW_CONFIG.
+ */
+void ec_bj_power(uint32_t *voltage, uint32_t *current);
+
+/**
+ * Get enable/disable power on by monitor from FW_CONFIG.
+ */
+enum ec_cfg_power_on_monitor ec_cfg_power_on_monitor(void);
+
+#endif /* __BOARD_MOLI_FW_CONFIG_H_ */
diff --git a/board/moli/gpio.inc b/board/moli/gpio.inc
index fb3b508573..e8473f8c95 100644
--- a/board/moli/gpio.inc
+++ b/board/moli/gpio.inc
@@ -25,6 +25,9 @@ GPIO_INT(EC_RECOVERY_BTN_ODL, PIN(2, 3), GPIO_INT_BOTH, button_interrupt)
GPIO_INT(USB_C1_RT_INT_ODL, PIN(4, 1), GPIO_INT_FALLING, retimer_interrupt)
GPIO_INT(USB_C1_BC12_INT_ODL, PIN(8, 3), GPIO_INT_FALLING, bc12_interrupt)
GPIO_INT(USB_C1_PPC_INT_ODL, PIN(7, 0), GPIO_INT_FALLING, ppc_interrupt)
+GPIO_INT(HDMI1_MONITOR_ON, PIN(B, 4), GPIO_INT_RISING, monitor_interrupt)
+GPIO_INT(HDMI2_MONITOR_ON, PIN(B, 5), GPIO_INT_RISING, monitor_interrupt)
+GPIO_INT(OPTION_MONITOR_ON, PIN(1, 0), GPIO_INT_RISING, monitor_interrupt)
/* CCD */
GPIO(CCD_MODE_ODL, PIN(E, 5), GPIO_INPUT)
@@ -120,12 +123,9 @@ GPIO(LED_ORANGE_CONTROL, PIN(3, 1), GPIO_ODR_LOW)
GPIO(LED_BLUE_CONTROL, PIN(2, 5), GPIO_ODR_LOW)
/* Option Board */
-GPIO(HDMI1_MONITOR_ON, PIN(B, 4), GPIO_INPUT)
-GPIO(HDMI1_MONON_SIO, PIN(1, 6), GPIO_ODR_LOW)
-GPIO(OPTION_MONITOR_ON, PIN(1, 0), GPIO_INPUT)
-GPIO(OPTION_MONON_SIO, PIN(2, 1), GPIO_ODR_LOW)
-GPIO(HDMI2_MONITOR_ON, PIN(B, 5), GPIO_INPUT)
-GPIO(HDMI2_MONON_SIO, PIN(1, 5), GPIO_ODR_LOW)
+GPIO(HDMI1_MONON_SIO, PIN(1, 6), GPIO_INPUT)
+GPIO(HDMI2_MONON_SIO, PIN(1, 5), GPIO_INPUT)
+GPIO(OPTION_MONON_SIO, PIN(2, 1), GPIO_INPUT)
IOEX(USB_C0_OC_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 4), GPIO_ODR_HIGH)
IOEX(USB_C0_FRS_EN, EXPIN(IOEX_C0_NCT38XX, 0, 6), GPIO_LOW)
diff --git a/board/moli/led.c b/board/moli/led.c
index f2ab214418..edb429e530 100644
--- a/board/moli/led.c
+++ b/board/moli/led.c
@@ -270,8 +270,8 @@ int led_set_brightness(enum ec_led_id id, const uint8_t *brightness)
return set_color(id, LED_OFF, 0);
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/mrbland/board.c b/board/mrbland/board.c
index 50ba008512..52b1c50a1b 100644
--- a/board/mrbland/board.c
+++ b/board/mrbland/board.c
@@ -585,8 +585,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -598,9 +598,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/mrbland/board.h b/board/mrbland/board.h
index 0f78db50d9..cc6207ca83 100644
--- a/board/mrbland/board.h
+++ b/board/mrbland/board.h
@@ -24,6 +24,8 @@
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* Enable PD3.0 */
#define CONFIG_USB_PD_REV30
diff --git a/board/munna/board.c b/board/munna/board.c
index f6996b8460..6d7b35da1c 100644
--- a/board/munna/board.c
+++ b/board/munna/board.c
@@ -236,14 +236,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/munna/board.h b/board/munna/board.h
index 5dc35c68df..20194bed88 100644
--- a/board/munna/board.h
+++ b/board/munna/board.h
@@ -40,6 +40,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/nami/board.c b/board/nami/board.c
index 02fb27a283..2ab66ab951 100644
--- a/board/nami/board.c
+++ b/board/nami/board.c
@@ -747,8 +747,8 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Limit the input current to 96% negotiated limit,
@@ -760,8 +760,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
(model == MODEL_EKKO || model == MODEL_BARD))
factor = 95;
charge_ma = charge_ma * factor / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
void board_hibernate(void)
diff --git a/board/nami/board.h b/board/nami/board.h
index 51cde41acb..652db4826d 100644
--- a/board/nami/board.h
+++ b/board/nami/board.h
@@ -96,7 +96,8 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#define CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON 27000
#define CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON_WITH_BATT 15000
/* AP's thresholds. */
diff --git a/board/nautilus/board.c b/board/nautilus/board.c
index 3cdd7abaf1..af7d7f48d4 100644
--- a/board/nautilus/board.c
+++ b/board/nautilus/board.c
@@ -528,26 +528,6 @@ int board_set_active_charge_port(int charge_port)
}
/**
- * Set the charge limit based upon desired maximum.
- *
- * @param port Port number.
- * @param supplier Charge supplier type.
- * @param charge_ma Desired charge limit (mA).
- * @param charge_mv Negotiated charge voltage (mV).
- */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- /*
- * Limit the input current to 96% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 96 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
-/**
* Return the maximum allowed input current
*/
int board_get_ramp_current_limit(int supplier, int sup_curr)
diff --git a/board/nautilus/board.h b/board/nautilus/board.h
index cbca28a71f..2b4f25538d 100644
--- a/board/nautilus/board.h
+++ b/board/nautilus/board.h
@@ -79,11 +79,13 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGER_PSYS
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4 /* margining */
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_HOSTCMD_PD_CONTROL
#define CONFIG_EXTPOWER_GPIO
diff --git a/board/nocturne/board.c b/board/nocturne/board.c
index d32f036844..1c0b2b3397 100644
--- a/board/nocturne/board.c
+++ b/board/nocturne/board.c
@@ -760,19 +760,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * Nocturne seems to overdraw its set input current limit by about 5%.
- * Request at most 95% of what's desired.
- */
- icl = icl * 95 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
static void board_chipset_reset(void)
{
board_report_pmic_fault("CHIPSET RESET");
diff --git a/board/nocturne/board.h b/board/nocturne/board.h
index 279016ec98..73700b8480 100644
--- a/board/nocturne/board.h
+++ b/board/nocturne/board.h
@@ -8,6 +8,8 @@
#ifndef __CROS_EC_BOARD_H
#define __CROS_EC_BOARD_H
+#define CONFIG_LTO
+
/*
* By default, enable all console messages excepted HC, ACPI and event:
* The sensor stack is generating a lot of activity.
@@ -31,6 +33,7 @@
#define CONFIG_ADC
#define CONFIG_BACKLIGHT_LID
#define CONFIG_HOST_INTERFACE_ESPI
+#define CONFIG_FPU
#define CONFIG_I2C
#define CONFIG_I2C_BUS_MAY_BE_UNPOWERED
#define CONFIG_I2C_CONTROLLER
@@ -67,8 +70,14 @@
#define CONFIG_CHARGE_MANAGER
#define CONFIG_CHARGER
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 128
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 128
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 128
#define CONFIG_CHARGER_ISL9238
+/*
+ * Nocturne seems to overdraw its set input current limit by about 5%.
+ * Request at most 95% of what's desired.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#undef CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON
#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1
#define CONFIG_CHARGER_PROFILE_OVERRIDE
diff --git a/board/nocturne_fp/board.h b/board/nocturne_fp/board.h
index e7d34445b0..d95df6101a 100644
--- a/board/nocturne_fp/board.h
+++ b/board/nocturne_fp/board.h
@@ -110,7 +110,6 @@
#define CONFIG_SHA256
#define CONFIG_SHA256_UNROLLED
#define CONFIG_SPI
-#define CONFIG_STM_HWTIMER32
#undef CONFIG_TASK_PROFILING
#define CONFIG_WATCHDOG_HELP
#define CONFIG_WP_ACTIVE_HIGH
diff --git a/board/nocturne_fp/build.mk b/board/nocturne_fp/build.mk
index 65ffd6c096..2bc59c1f13 100644
--- a/board/nocturne_fp/build.mk
+++ b/board/nocturne_fp/build.mk
@@ -29,6 +29,7 @@ test-list-y=\
abort \
aes \
always_memset \
+ benchmark \
cec \
compile_time_macros \
cortexm_fpu \
@@ -39,6 +40,8 @@ test-list-y=\
flash_write_protect \
fpsensor \
fpsensor_hw \
+ ftrapv \
+ libc_printf \
mpu \
mutex \
panic \
@@ -46,6 +49,7 @@ test-list-y=\
pingpong \
printf \
queue \
+ rng_benchmark \
rollback \
rollback_entropy \
rsa3 \
diff --git a/board/nucleo-dartmonkey/build.mk b/board/nucleo-dartmonkey/build.mk
index 2e3e1f31d2..b544490fc9 100644
--- a/board/nucleo-dartmonkey/build.mk
+++ b/board/nucleo-dartmonkey/build.mk
@@ -22,11 +22,13 @@ test-list-y=\
flash_write_protect \
fpsensor \
fpsensor_hw \
+ libc_printf \
mpu \
mutex \
pingpong \
printf \
queue \
+ rng_benchmark \
rollback \
rollback_entropy \
rsa3 \
diff --git a/board/nucleo-f072rb/board.h b/board/nucleo-f072rb/board.h
index d807209564..bd957d35db 100644
--- a/board/nucleo-f072rb/board.h
+++ b/board/nucleo-f072rb/board.h
@@ -16,7 +16,6 @@
#define CONFIG_UART_CONSOLE 2
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#ifdef CTS_MODULE
#undef STM32_IRQ_EXT2_3_PRIORITY
diff --git a/board/nucleo-f411re/board.h b/board/nucleo-f411re/board.h
index d4e299dcff..3b7d5f1bf1 100644
--- a/board/nucleo-f411re/board.h
+++ b/board/nucleo-f411re/board.h
@@ -19,7 +19,6 @@
/* Optional features */
#undef CONFIG_LID_SWITCH
#undef CONFIG_HIBERNATE
-#define CONFIG_STM_HWTIMER32
#define CONFIG_WATCHDOG_HELP
#define CONFIG_TASK_PROFILING
diff --git a/board/nucleo-f412zg/build.mk b/board/nucleo-f412zg/build.mk
index 21a2955bc4..d923a7a40f 100644
--- a/board/nucleo-f412zg/build.mk
+++ b/board/nucleo-f412zg/build.mk
@@ -19,11 +19,13 @@ test-list-y=\
exception \
flash_physical \
flash_write_protect \
+ libc_printf \
mpu \
mutex \
pingpong \
printf \
queue \
+ rng_benchmark \
rollback \
rollback_entropy \
rsa3 \
diff --git a/board/nucleo-g431rb/board.h b/board/nucleo-g431rb/board.h
index 905b4ea110..e2df8d2547 100644
--- a/board/nucleo-g431rb/board.h
+++ b/board/nucleo-g431rb/board.h
@@ -12,7 +12,6 @@
#define CONFIG_SYSTEM_UNLOCKED /* Allow dangerous commands while in dev. */
#define CPU_CLOCK 48000000
-#define CONFIG_STM_HWTIMER32
#define TIM_CLOCK32 2
#define TIM_CLOCK_MSB 3
#define TIM_CLOCK_LSB 15
diff --git a/board/nucleo-h743zi/build.mk b/board/nucleo-h743zi/build.mk
index 6153d85d8a..ad04a68918 100644
--- a/board/nucleo-h743zi/build.mk
+++ b/board/nucleo-h743zi/build.mk
@@ -19,11 +19,13 @@ test-list-y=\
exception \
flash_physical \
flash_write_protect \
+ libc_printf \
mpu \
mutex \
pingpong \
printf \
queue \
+ rng_benchmark \
rollback \
rollback_entropy \
rsa3 \
diff --git a/board/oak/board.c b/board/oak/board.c
index 468b6e6677..17908caa7a 100644
--- a/board/oak/board.c
+++ b/board/oak/board.c
@@ -357,11 +357,10 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
pd_send_host_event(PD_EVENT_POWER_CHANGE);
}
diff --git a/board/oak/board.h b/board/oak/board.h
index 6f5ed3fc87..c429a655c5 100644
--- a/board/oak/board.h
+++ b/board/oak/board.h
@@ -14,6 +14,7 @@
/* Free up some flash space */
#define CONFIG_DEBUG_ASSERT_BRIEF
#define CONFIG_USB_PD_DEBUG_LEVEL 0
+#undef CONFIG_CONSOLE_CMDHELP
#define CONFIG_LTO
@@ -39,7 +40,8 @@
#define CONFIG_CHARGE_MANAGER
#define CONFIG_CHARGER
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#if BOARD_REV == OAK_REV1
#define CONFIG_CHARGER_BQ24773
@@ -105,7 +107,6 @@
#define CONFIG_USB_PD_VBUS_DETECT_TCPC
#define CONFIG_SPI
#define CONFIG_SPI_CONTROLLER
-#define CONFIG_STM_HWTIMER32
#define CONFIG_VBOOT_HASH
#undef CONFIG_WATCHDOG_HELP
#define CONFIG_SWITCH
diff --git a/board/osiris/charger.c b/board/osiris/charger.c
index 88f5b85a41..7a16fcd5cb 100644
--- a/board/osiris/charger.c
+++ b/board/osiris/charger.c
@@ -79,10 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/pazquel/board.c b/board/pazquel/board.c
index 6ed03e90ad..1efad2255f 100644
--- a/board/pazquel/board.c
+++ b/board/pazquel/board.c
@@ -305,6 +305,7 @@ void board_tcpc_init(void)
/* 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);
@@ -533,8 +534,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -546,8 +547,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/pdeval-stm32f072/board.h b/board/pdeval-stm32f072/board.h
index 4cb55573f4..6ba7923b8e 100644
--- a/board/pdeval-stm32f072/board.h
+++ b/board/pdeval-stm32f072/board.h
@@ -21,7 +21,6 @@
#define CONFIG_HW_CRC
#define CONFIG_I2C
#define CONFIG_I2C_CONTROLLER
-#define CONFIG_STM_HWTIMER32
/* USB Power Delivery configuration */
#define CONFIG_USB_POWER_DELIVERY
#define CONFIG_USB_PD_TCPMV1
diff --git a/board/pico/board.c b/board/pico/board.c
index f884545b6d..801c344a69 100644
--- a/board/pico/board.c
+++ b/board/pico/board.c
@@ -320,14 +320,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/pico/board.h b/board/pico/board.h
index 665cf59691..97128b54f1 100644
--- a/board/pico/board.h
+++ b/board/pico/board.h
@@ -28,6 +28,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/pirika/board.c b/board/pirika/board.c
index 8913ec0f07..ae1c74bdfc 100644
--- a/board/pirika/board.c
+++ b/board/pirika/board.c
@@ -491,18 +491,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * TODO(b/151955431): Characterize the input current limit in case a
- * scaling needs to be applied here
- */
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_is_sourcing_vbus(int port)
{
int regval;
@@ -590,7 +578,7 @@ __override void ocpc_get_pid_constants(int *kp, int *kp_div, int *ki,
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
- if (port < 0 || port > board_get_usb_pd_port_count())
+ if (!board_is_usb_pd_port_present(port))
return;
raa489000_set_output_current(port, rp);
diff --git a/board/plankton/board.h b/board/plankton/board.h
index 224364269b..a17bd30c3c 100644
--- a/board/plankton/board.h
+++ b/board/plankton/board.h
@@ -16,7 +16,6 @@
#define CONFIG_UART_CONSOLE 2
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_USB_POWER_DELIVERY
#define CONFIG_USB_PD_TCPMV1
#define CONFIG_USB_PD_ALT_MODE
diff --git a/board/polyberry/board.h b/board/polyberry/board.h
index 41069f2722..1390bb996c 100644
--- a/board/polyberry/board.h
+++ b/board/polyberry/board.h
@@ -60,7 +60,6 @@
#undef CONFIG_WATCHDOG
/* Optional features */
-#define CONFIG_STM_HWTIMER32
/*
* Allow dangerous commands all the time, since we don't have a write protect
diff --git a/board/pompom/board.c b/board/pompom/board.c
index 394f06be8e..ccaff4f55f 100644
--- a/board/pompom/board.c
+++ b/board/pompom/board.c
@@ -269,8 +269,6 @@ DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
void board_hibernate(void)
{
- int i;
-
/*
* Sensors are unpowered in hibernate. Apply PD to the
* interrupt lines such that they don't float.
@@ -290,8 +288,7 @@ void board_hibernate(void)
* otherwise, ACOK won't go High and can't wake EC up. Check the
* bug b/170324206 for details.
*/
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++)
- ppc_vbus_sink_enable(i, 1);
+ ppc_vbus_sink_enable(USB_PD_PORT_C0, 1);
}
__override uint16_t board_get_ps8xxx_product_id(int port)
@@ -323,9 +320,9 @@ void board_tcpc_init(void)
* Initialize HPD to low; after sysjump SOC needs to see
* HPD pulse to enable video path
*/
- for (int port = 0; port < CONFIG_USB_PD_PORT_MAX_COUNT; ++port)
- usb_mux_hpd_update(port, USB_PD_MUX_HPD_LVL_DEASSERTED |
- USB_PD_MUX_HPD_IRQ_DEASSERTED);
+ usb_mux_hpd_update(USB_PD_PORT_C0,
+ USB_PD_MUX_HPD_LVL_DEASSERTED |
+ USB_PD_MUX_HPD_IRQ_DEASSERTED);
}
DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C + 1);
@@ -405,24 +402,20 @@ void board_overcurrent_event(int port, int is_overcurrented)
int board_set_active_charge_port(int port)
{
- int is_real_port = (port >= 0 && port < CONFIG_USB_PD_PORT_MAX_COUNT);
- int i;
+ int is_real_port = (port == USB_PD_PORT_C0);
if (!is_real_port && port != CHARGE_PORT_NONE)
return EC_ERROR_INVAL;
if (port == CHARGE_PORT_NONE) {
CPRINTS("Disabling all charging port");
-
- /* Disable all ports. */
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
- /*
- * Do not return early if one fails otherwise we can
- * get into a boot loop assertion failure.
- */
- if (board_vbus_sink_enable(i, 0))
- CPRINTS("Disabling p%d sink path failed.", i);
- }
+ /*
+ * Do not return early if one fails otherwise we can
+ * get into a boot loop assertion failure.
+ */
+ if (board_vbus_sink_enable(USB_PD_PORT_C0, 0))
+ CPRINTS("Disabling p%d sink path failed.",
+ USB_PD_PORT_C0);
return EC_SUCCESS;
}
@@ -435,18 +428,6 @@ int board_set_active_charge_port(int port)
CPRINTS("New charge port: p%d", port);
- /*
- * Turn off the other ports' sink path FETs, before enabling the
- * requested charge port.
- */
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
- if (i == port)
- continue;
-
- if (board_vbus_sink_enable(i, 0))
- CPRINTS("p%d: sink path disable failed.", i);
- }
-
/* Enable requested charge port. */
if (board_vbus_sink_enable(port, 1)) {
CPRINTS("p%d: sink path enable failed.", port);
@@ -456,8 +437,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -469,9 +450,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/pompom/board.h b/board/pompom/board.h
index 40e7185c16..774b339273 100644
--- a/board/pompom/board.h
+++ b/board/pompom/board.h
@@ -23,6 +23,8 @@
/* BC 1.2 Charger */
#define CONFIG_BC12_DETECT_PI3USB9201
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* USB */
#define CONFIG_USB_PD_TCPM_MULTI_PS8XXX
#define CONFIG_USB_PD_TCPM_PS8751
@@ -30,6 +32,7 @@
#define CONFIG_USB_PD_TCPM_PS8805
#define CONFIG_USBC_PPC_SN5S330
#define CONFIG_USB_PD_PORT_MAX_COUNT 1
+#define USB_PD_PORT_C0 0
/* USB-A */
#define USB_PORT_COUNT 1
diff --git a/board/poppy/board.c b/board/poppy/board.c
index 38183c0da0..ab3f3b40b0 100644
--- a/board/poppy/board.c
+++ b/board/poppy/board.c
@@ -58,9 +58,6 @@
#define USB_PD_PORT_ANX74XX 0
-/* Minimum input current limit. */
-#define ILIM_MIN_MA 472
-
static void tcpc_alert_event(enum gpio_signal signal)
{
if ((signal == GPIO_USB_C0_PD_INT_ODL) &&
@@ -679,8 +676,8 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Adjust ILIM according to measurements to eliminate overshoot. */
charge_ma = (charge_ma - 500) * 31 / 32 + 472;
@@ -688,7 +685,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
if (charge_mv > 5000)
charge_ma -= 52;
- charge_set_input_current_limit(MAX(charge_ma, ILIM_MIN_MA), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
void board_hibernate(void)
diff --git a/board/poppy/board.h b/board/poppy/board.h
index b55dc1d818..5242c1d3a8 100644
--- a/board/poppy/board.h
+++ b/board/poppy/board.h
@@ -89,7 +89,8 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 472
#define CONFIG_CHARGER_PSYS
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
diff --git a/board/primus/board.c b/board/primus/board.c
index 8b5f1a86fc..3f438cee00 100644
--- a/board/primus/board.c
+++ b/board/primus/board.c
@@ -137,8 +137,7 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma,
else
charge_ma = charge_ma * 93 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
static void configure_input_current_limit(void)
@@ -159,9 +158,7 @@ static void configure_input_current_limit(void)
else
adapter_current_ma = adapter_current_ma * 97 / 100;
- charge_set_input_current_limit(MAX(adapter_current_ma,
- CONFIG_CHARGER_INPUT_CURRENT),
- adapter_current_mv);
+ charge_set_input_current_limit(adapter_current_ma, adapter_current_mv);
}
DECLARE_HOOK(HOOK_CHIPSET_STARTUP, configure_input_current_limit,
HOOK_PRIO_DEFAULT);
diff --git a/board/primus/charger.c b/board/primus/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/primus/charger.c
+++ b/board/primus/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/prism/board.h b/board/prism/board.h
index 5c3cabce53..42768de2e7 100644
--- a/board/prism/board.h
+++ b/board/prism/board.h
@@ -111,7 +111,6 @@
#define CONFIG_LTO
#define CONFIG_FORCE_CONSOLE_RESUME
#define CONFIG_MATH_UTIL
-#define CONFIG_STM_HWTIMER32
/* USB Configuration */
#define CONFIG_USB
diff --git a/board/puff/board.c b/board/puff/board.c
index d863b5fc0b..5475773aa0 100644
--- a/board/puff/board.c
+++ b/board/puff/board.c
@@ -88,8 +88,8 @@ uint16_t tcpc_get_alert_status(void)
}
/* Called when the charge manager has switched to a new port. */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Blink alert if insufficient power per system_can_boot_ap(). */
int insufficient_power =
diff --git a/board/quackingstick/board.c b/board/quackingstick/board.c
index 6cdf814c74..7002a62e03 100644
--- a/board/quackingstick/board.c
+++ b/board/quackingstick/board.c
@@ -612,8 +612,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -625,9 +625,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/**
diff --git a/board/quackingstick/board.h b/board/quackingstick/board.h
index 9b50237b4d..a8ec5a4231 100644
--- a/board/quackingstick/board.h
+++ b/board/quackingstick/board.h
@@ -32,6 +32,8 @@
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* BC 1.2 Charger */
#define CONFIG_BC12_DETECT_PI3USB9201
diff --git a/board/rainier/board.c b/board/rainier/board.c
index 07a006b671..05142a3936 100644
--- a/board/rainier/board.c
+++ b/board/rainier/board.c
@@ -173,8 +173,8 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* NOP because there is no internal power therefore no charging.
diff --git a/board/rainier/board.h b/board/rainier/board.h
index 463a1e4a05..745ebeaca8 100644
--- a/board/rainier/board.h
+++ b/board/rainier/board.h
@@ -22,7 +22,6 @@
#define CONFIG_POWER_COMMON
#define CONFIG_SPI
#define CONFIG_SPI_CONTROLLER
-#define CONFIG_STM_HWTIMER32
/* Source RTCCLK from external 32.768kHz source on PC15/OSC32_IN. */
#define CONFIG_STM32_CLOCK_LSE
#define CONFIG_SWITCH
diff --git a/board/rammus/board.c b/board/rammus/board.c
index 8cbc6c6856..e4abed4afb 100644
--- a/board/rammus/board.c
+++ b/board/rammus/board.c
@@ -558,26 +558,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-/**
- * Set the charge limit based upon desired maximum.
- *
- * @param port Port number.
- * @param supplier Charge supplier type.
- * @param charge_ma Desired charge limit (mA).
- * @param charge_mv Negotiated charge voltage (mV).
- */
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- /*
- * Limit the input current to 96% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 96 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
void board_hibernate(void)
{
CPRINTS("Triggering PMIC shutdown.");
diff --git a/board/rammus/board.h b/board/rammus/board.h
index c0c8238c3e..975417df9a 100644
--- a/board/rammus/board.h
+++ b/board/rammus/board.h
@@ -84,10 +84,12 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#define CONFIG_CHARGER_PSYS
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4 /* charger margin */
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_HOSTCMD_PD_CONTROL
#define CONFIG_EXTPOWER_GPIO
diff --git a/board/redrix/charger.c b/board/redrix/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/redrix/charger.c
+++ b/board/redrix/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/reef/board.c b/board/reef/board.c
index e41921a436..ad92334c2b 100644
--- a/board/reef/board.c
+++ b/board/reef/board.c
@@ -543,8 +543,8 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Enable charging trigger by BC1.2 detection */
int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP ||
@@ -555,9 +555,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
if (bd9995x_bc12_enable_charging(port, bc12_enable))
return;
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/**
diff --git a/board/reef/board.h b/board/reef/board.h
index fc25024dff..cc1783e43a 100644
--- a/board/reef/board.h
+++ b/board/reef/board.h
@@ -50,7 +50,9 @@
#define CONFIG_CHARGER_BD9995X
#define CONFIG_CHARGER_BD9995X_CHGEN
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 18000
#define CONFIG_CHARGER_MAINTAIN_VBAT
diff --git a/board/reef_it8320/board.c b/board/reef_it8320/board.c
index b00e451842..1e222a4ed4 100644
--- a/board/reef_it8320/board.c
+++ b/board/reef_it8320/board.c
@@ -299,8 +299,8 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Enable charging trigger by BC1.2 detection */
int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP ||
@@ -311,9 +311,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
if (bd9995x_bc12_enable_charging(port, bc12_enable))
return;
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/**
diff --git a/board/reef_it8320/board.h b/board/reef_it8320/board.h
index 45abf34151..dbccc6eeee 100644
--- a/board/reef_it8320/board.h
+++ b/board/reef_it8320/board.h
@@ -48,7 +48,9 @@
#define CONFIG_CHARGER_BD9995X
#define CONFIG_CHARGER_BD9995X_CHGEN
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 18000
#define CONFIG_CHARGER_MAINTAIN_VBAT
diff --git a/board/reef_mchp/board.c b/board/reef_mchp/board.c
index 0a40f5dd04..c50a4feb8a 100644
--- a/board/reef_mchp/board.c
+++ b/board/reef_mchp/board.c
@@ -736,8 +736,8 @@ int board_set_active_charge_port(int charge_port)
* @param charge_ma Desired charge limit (mA).
* @param charge_mv Negotiated charge voltage (mV).
*/
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/* Enable charging trigger by BC1.2 detection */
int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP ||
@@ -748,9 +748,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
if (bd9995x_bc12_enable_charging(port, bc12_enable))
return;
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
/**
diff --git a/board/reef_mchp/board.h b/board/reef_mchp/board.h
index bde2d831d3..925f271ffd 100644
--- a/board/reef_mchp/board.h
+++ b/board/reef_mchp/board.h
@@ -53,7 +53,9 @@
#define CONFIG_CHARGER_BD9995X
#define CONFIG_CHARGER_BD9995X_CHGEN
#define CONFIG_CHARGER_DISCHARGE_ON_AC
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 18000
#define CONFIG_CHARGER_MAINTAIN_VBAT
diff --git a/board/sasuke/board.c b/board/sasuke/board.c
index ddd5279d62..e6767d8126 100644
--- a/board/sasuke/board.c
+++ b/board/sasuke/board.c
@@ -395,19 +395,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/sasuke/board.h b/board/sasuke/board.h
index 64c830df0f..df390d2d99 100644
--- a/board/sasuke/board.h
+++ b/board/sasuke/board.h
@@ -29,6 +29,11 @@
#define CONFIG_OCPC_DEF_RBATT_MOHMS \
22 /* R_DS(on) 11.6mOhm + 10mOhm sns rstr \
*/
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_OCPC
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGE_RAMP_HW
diff --git a/board/sasukette/board.c b/board/sasukette/board.c
index e45213a63a..f6786c1441 100644
--- a/board/sasukette/board.c
+++ b/board/sasukette/board.c
@@ -251,19 +251,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_is_sourcing_vbus(int port)
{
int regval;
diff --git a/board/sasukette/board.h b/board/sasukette/board.h
index 44cb65239a..f06a89a5f0 100644
--- a/board/sasukette/board.h
+++ b/board/sasukette/board.h
@@ -36,6 +36,11 @@
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
#define CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE (100 * MSEC)
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
/* LED */
#define CONFIG_LED_COMMON
diff --git a/board/scarlet/board.c b/board/scarlet/board.c
index 34e5cc456c..66017e172d 100644
--- a/board/scarlet/board.c
+++ b/board/scarlet/board.c
@@ -212,13 +212,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int extpower_is_present(void)
{
/*
diff --git a/board/scarlet/board.h b/board/scarlet/board.h
index 4691d74391..cdc09f9114 100644
--- a/board/scarlet/board.h
+++ b/board/scarlet/board.h
@@ -32,7 +32,6 @@
#define CONFIG_POWER_COMMON
#define CONFIG_SPI
#define CONFIG_SPI_CONTROLLER
-#define CONFIG_STM_HWTIMER32
/* Source RTCCLK from external 32.768kHz source on PC15/OSC32_IN. */
#define CONFIG_STM32_CLOCK_LSE
#define CONFIG_SWITCH
@@ -70,7 +69,8 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_RT9467
-#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 2
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000
#define CONFIG_CHARGER_PROFILE_OVERRIDE
diff --git a/board/servo_micro/board.h b/board/servo_micro/board.h
index 801b67e07e..109a40409d 100644
--- a/board/servo_micro/board.h
+++ b/board/servo_micro/board.h
@@ -30,7 +30,6 @@
#undef CONFIG_UART_RX_DMA
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
#define CONFIG_PVD
/* See 'Programmable voltage detector characteristics' in the STM32F072x8
diff --git a/board/servo_v4/board.h b/board/servo_v4/board.h
index 289c117989..1c7d90eab4 100644
--- a/board/servo_v4/board.h
+++ b/board/servo_v4/board.h
@@ -35,7 +35,6 @@
#define CONFIG_CMD_USART_INFO
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
#define CONFIG_PVD
/* See 'Programmable voltage detector characteristics' in the STM32F072x8
@@ -97,6 +96,8 @@
#undef CONFIG_CMD_FLASHINFO
#undef CONFIG_CMD_FLASH_WP
#undef CONFIG_CMD_GETTIME
+#undef CONFIG_CMD_I2C_SCAN
+#undef CONFIG_CMD_I2C_XFER
#undef CONFIG_CMD_MEM
#undef CONFIG_CMD_SHMEM
#undef CONFIG_CMD_SYSLOCK
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c
index 4fcded6842..e3eba6104a 100644
--- a/board/servo_v4/usb_pd_policy.c
+++ b/board/servo_v4/usb_pd_policy.c
@@ -364,8 +364,8 @@ int board_set_active_charge_port(int charge_port)
return 0;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
if (port != CHG)
return;
diff --git a/board/servo_v4p1/board.h b/board/servo_v4p1/board.h
index b6c7915c6c..4debd67b49 100644
--- a/board/servo_v4p1/board.h
+++ b/board/servo_v4p1/board.h
@@ -97,7 +97,6 @@
#undef CONFIG_UART_RX_DMA
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
#define CONFIG_PVD
/*
diff --git a/board/servo_v4p1/usb_pd_policy.c b/board/servo_v4p1/usb_pd_policy.c
index 7f5b6f35bf..fc79bf84da 100644
--- a/board/servo_v4p1/usb_pd_policy.c
+++ b/board/servo_v4p1/usb_pd_policy.c
@@ -391,8 +391,8 @@ int board_set_active_charge_port(int charge_port)
return 0;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
if (port != CHG)
return;
diff --git a/board/shotzo/board.c b/board/shotzo/board.c
index dea75ee7d2..5d96e164cf 100644
--- a/board/shotzo/board.c
+++ b/board/shotzo/board.c
@@ -351,8 +351,8 @@ uint16_t tcpc_get_alert_status(void)
return 0;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
if (port == CHARGER_SOLO) {
charger_set_input_current_limit(CHARGER_SOLO, max_ma);
diff --git a/board/stern/board.c b/board/stern/board.c
index 26576ede86..a6d488aaf6 100644
--- a/board/stern/board.c
+++ b/board/stern/board.c
@@ -236,14 +236,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/stern/board.h b/board/stern/board.h
index eedbc2a44c..d7d96ea67c 100644
--- a/board/stern/board.h
+++ b/board/stern/board.h
@@ -28,6 +28,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/stm32f446e-eval/board.h b/board/stm32f446e-eval/board.h
index 4ae9117829..667483d81f 100644
--- a/board/stm32f446e-eval/board.h
+++ b/board/stm32f446e-eval/board.h
@@ -56,7 +56,6 @@
#undef CONFIG_WATCHDOG
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_DMA_HELP
#define CONFIG_FLASH_CROS
diff --git a/board/stm32l476g-eval/board.h b/board/stm32l476g-eval/board.h
index 26ea530e4e..40c7fb0eca 100644
--- a/board/stm32l476g-eval/board.h
+++ b/board/stm32l476g-eval/board.h
@@ -33,7 +33,6 @@
#endif
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#ifdef CTS_MODULE_I2C
#define CONFIG_I2C
diff --git a/board/storo/board.c b/board/storo/board.c
index f6f3ed5750..83d9ef4c72 100644
--- a/board/storo/board.c
+++ b/board/storo/board.c
@@ -431,19 +431,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_is_sourcing_vbus(int port)
{
int regval;
diff --git a/board/storo/board.h b/board/storo/board.h
index 93dd573ba1..1f33ce53b0 100644
--- a/board/storo/board.h
+++ b/board/storo/board.h
@@ -31,6 +31,11 @@
#define CONFIG_OCPC_DEF_RBATT_MOHMS \
22 /* R_DS(on) 11.6mOhm + 10mOhm sns rstr \
*/
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_OCPC
#undef CONFIG_CHARGER_SINGLE_CHIP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
diff --git a/board/sweetberry/board.h b/board/sweetberry/board.h
index 4387cd4094..4d945f5dc4 100644
--- a/board/sweetberry/board.h
+++ b/board/sweetberry/board.h
@@ -77,7 +77,6 @@
#undef CONFIG_WATCHDOG
/* Optional features */
-#define CONFIG_STM_HWTIMER32
/*
* Allow dangerous commands all the time, since we don't have a write protect
diff --git a/board/taeko/board.c b/board/taeko/board.c
index 79ef4029d6..9f0d21b8b8 100644
--- a/board/taeko/board.c
+++ b/board/taeko/board.c
@@ -136,16 +136,3 @@ enum battery_present battery_hw_present(void)
/* The GPIO is low when the battery is physically present */
return gpio_get_level(GPIO_EC_BATT_PRES_ODL) ? BP_NO : BP_YES;
}
-
-__override void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- /*
- * Follow OEM request to limit the input current to
- * 95% negotiated limit.
- */
- charge_ma = charge_ma * 95 / 100;
-
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/taeko/board.h b/board/taeko/board.h
index c3193c8847..a3ae9abb00 100644
--- a/board/taeko/board.h
+++ b/board/taeko/board.h
@@ -26,6 +26,9 @@
#define CONFIG_MP2964
+/* OEM requested 5% charger current margin */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* LED */
#define CONFIG_LED_ONOFF_STATES
diff --git a/board/taeko/charger.c b/board/taeko/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/taeko/charger.c
+++ b/board/taeko/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/taniks/board.c b/board/taniks/board.c
index 5da998524b..f8501d761b 100644
--- a/board/taniks/board.c
+++ b/board/taniks/board.c
@@ -115,16 +115,3 @@ enum battery_present battery_hw_present(void)
/* The GPIO is low when the battery is physically present */
return gpio_get_level(GPIO_EC_BATT_PRES_ODL) ? BP_NO : BP_YES;
}
-
-__override void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- /*
- * Follow OEM request to limit the input current to
- * 95% negotiated limit.
- */
- charge_ma = charge_ma * 95 / 100;
-
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/taniks/board.h b/board/taniks/board.h
index 6cd42ad7bb..a301f3b458 100644
--- a/board/taniks/board.h
+++ b/board/taniks/board.h
@@ -36,6 +36,9 @@
*/
#define CONFIG_HIBERNATE_PSL_VCC1_RST_WAKEUP
+/* OEM requested 5% charger margin */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* LED */
#define CONFIG_LED_ONOFF_STATES
diff --git a/board/taniks/charger.c b/board/taniks/charger.c
index a4fa209246..7fabd2082e 100644
--- a/board/taniks/charger.c
+++ b/board/taniks/charger.c
@@ -81,10 +81,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/terrador/board.c b/board/terrador/board.c
index 8426216e79..3724c9d2d0 100644
--- a/board/terrador/board.c
+++ b/board/terrador/board.c
@@ -301,6 +301,7 @@ void ppc_interrupt(enum gpio_signal signal)
break;
case GPIO_USB_C1_PPC_INT_ODL:
syv682x_interrupt(USBC_PORT_C1);
+ break;
default:
break;
}
diff --git a/board/tglrvp_ish/board.h b/board/tglrvp_ish/board.h
index 3912e8803a..e285014e5e 100644
--- a/board/tglrvp_ish/board.h
+++ b/board/tglrvp_ish/board.h
@@ -79,8 +79,11 @@
#define CONFIG_ISH_IPAPG
#define CONFIG_ISH_D0I2_MIN_USEC (15 * MSEC)
+#ifdef BOARD_ADL_ISH_LITE
+#define CONFIG_ISH_D0I3_MIN_USEC (3000 * MSEC)
+#else
#define CONFIG_ISH_D0I3_MIN_USEC (50 * MSEC)
-
+#endif
#define CONFIG_ISH_NEW_PM
#ifndef __ASSEMBLER__
diff --git a/board/tigertail/board.h b/board/tigertail/board.h
index ea4d11db06..26e6af5985 100644
--- a/board/tigertail/board.h
+++ b/board/tigertail/board.h
@@ -24,7 +24,6 @@
#undef CONFIG_UART_RX_DMA
/* Optional features */
-#define CONFIG_STM_HWTIMER32
#define CONFIG_HW_CRC
/* USB Configuration */
diff --git a/board/trogdor/usbc_config.c b/board/trogdor/usbc_config.c
index 39a54f659e..b9c37a04fd 100644
--- a/board/trogdor/usbc_config.c
+++ b/board/trogdor/usbc_config.c
@@ -225,6 +225,7 @@ void board_tcpc_init(void)
/* 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);
@@ -333,8 +334,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -346,8 +347,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/twinkie/board.h b/board/twinkie/board.h
index b1379fb15b..808053d146 100644
--- a/board/twinkie/board.h
+++ b/board/twinkie/board.h
@@ -79,8 +79,7 @@ void trace_packets(void);
void set_trace_mode(int mode);
/* Timer selection */
-#define TIM_CLOCK_MSB 3
-#define TIM_CLOCK_LSB 15
+#define TIM_CLOCK32 2
#define TIM_ADC 16
#include "gpio_signal.h"
diff --git a/board/vell/board.h b/board/vell/board.h
index 4b3d527901..3a7d97858c 100644
--- a/board/vell/board.h
+++ b/board/vell/board.h
@@ -61,6 +61,8 @@
#undef CONFIG_SYV682X_HV_ILIM
#define CONFIG_SYV682X_HV_ILIM SYV682X_HV_ILIM_5_50
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
+
/* TODO: b/177608416 - measure and check these values on brya */
#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */
#define PD_POWER_SUPPLY_TURN_OFF_DELAY 30000 /* us */
diff --git a/board/vell/charger.c b/board/vell/charger.c
index e33a0ed44a..53b14381cd 100644
--- a/board/vell/charger.c
+++ b/board/vell/charger.c
@@ -81,18 +81,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- /*
- * Limit the input current to 96% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 96 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
static void set_ac_prochot(void)
{
isl9241_set_ac_prochot(CHARGER_SOLO, PD_MAX_CURRENT_MA);
diff --git a/board/vilboz/board.c b/board/vilboz/board.c
index 7c74794d9d..1ba266f145 100644
--- a/board/vilboz/board.c
+++ b/board/vilboz/board.c
@@ -504,16 +504,3 @@ const int usb_port_enable[USBA_PORT_COUNT] = {
IOEX_EN_USB_A0_5V,
GPIO_EN_USB_A1_5V,
};
-
-__override void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- /*
- * Limit the input current to 95% negotiated limit,
- * to account for the charger chip margin.
- */
- charge_ma = charge_ma * 95 / 100;
-
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/vilboz/board.h b/board/vilboz/board.h
index 5160abbc26..8a7c86824d 100644
--- a/board/vilboz/board.h
+++ b/board/vilboz/board.h
@@ -20,6 +20,7 @@
#define GPIO_USB2_ILIM_SEL GPIO_USB_A1_CHARGE_EN_DB_L
#define CONFIG_CHARGER_PROFILE_OVERRIDE
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
/* Motion sensing drivers */
#define CONFIG_ACCELGYRO_LSM6DSM
diff --git a/board/volmar/charger.c b/board/volmar/charger.c
index 88f5b85a41..7a16fcd5cb 100644
--- a/board/volmar/charger.c
+++ b/board/volmar/charger.c
@@ -79,10 +79,3 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-
-__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
- int max_ma, int charge_mv)
-{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
diff --git a/board/waddledee/board.c b/board/waddledee/board.c
index d7abda740c..4dfb3048ca 100644
--- a/board/waddledee/board.c
+++ b/board/waddledee/board.c
@@ -342,18 +342,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * TODO(b/151955431): Characterize the input current limit in case a
- * scaling needs to be applied here
- */
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_set_active_charge_port(int port)
{
int is_valid_port = (port >= 0 && port < board_get_usb_pd_port_count());
diff --git a/board/waddledoo/board.c b/board/waddledoo/board.c
index e207e59456..3cdb71cc5e 100644
--- a/board/waddledoo/board.c
+++ b/board/waddledoo/board.c
@@ -390,19 +390,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/waddledoo/board.h b/board/waddledoo/board.h
index 727f1bdb33..23a89c84d6 100644
--- a/board/waddledoo/board.h
+++ b/board/waddledoo/board.h
@@ -18,10 +18,12 @@
#define CONFIG_SYSTEM_UNLOCKED
/* Save some flash space */
+#undef CONFIG_ACCEL_SPOOF_MODE
#define CONFIG_CHIP_INIT_ROM_REGION
#undef CONFIG_CONSOLE_CMDHELP
+#undef CONFIG_CONSOLE_HISTORY
#define CONFIG_DEBUG_ASSERT_BRIEF
-#define CONFIG_USB_PD_DEBUG_LEVEL 2
+#define CONFIG_USB_PD_DEBUG_LEVEL 0
/* EC console commands */
#define CONFIG_CMD_CHARGER_DUMP
@@ -41,6 +43,11 @@
#define CONFIG_OCPC_DEF_RBATT_MOHMS \
22 /* R_DS(on) 11.6mOhm + 10mOhm sns rstr \
*/
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_OCPC
#undef CONFIG_CHARGER_SINGLE_CHIP
#undef CONFIG_USB_PD_TCPC_LPM_EXIT_DEBOUNCE
diff --git a/board/waddledoo2/board.c b/board/waddledoo2/board.c
index fd12aec449..98c061d9af 100644
--- a/board/waddledoo2/board.c
+++ b/board/waddledoo2/board.c
@@ -397,19 +397,6 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * b/147463641: The charger IC seems to overdraw ~4%, therefore we
- * reduce our target accordingly.
- */
- icl = icl * 96 / 100;
- charge_set_input_current_limit(icl, charge_mv);
-}
-
__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp)
{
if (port < 0 || port > board_get_usb_pd_port_count())
diff --git a/board/waddledoo2/board.h b/board/waddledoo2/board.h
index 93f0a0f108..3b4587037d 100644
--- a/board/waddledoo2/board.h
+++ b/board/waddledoo2/board.h
@@ -28,6 +28,11 @@
#define CONFIG_OCPC_DEF_RBATT_MOHMS \
22 /* R_DS(on) 11.6mOhm + 10mOhm sns rstr \
*/
+/*
+ * b/147463641: The charger IC seems to overdraw ~4%, therefore we
+ * reduce our target accordingly.
+ */
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 4
#define CONFIG_OCPC
#undef CONFIG_CHARGER_SINGLE_CHIP
#undef CONFIG_CMD_CHARGER_DUMP
diff --git a/board/wheelie/board.c b/board/wheelie/board.c
index 9708dcca82..e8852a0b5a 100644
--- a/board/wheelie/board.c
+++ b/board/wheelie/board.c
@@ -229,18 +229,6 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
-
- /*
- * TODO(b/151955431): Characterize the input current limit in case a
- * scaling needs to be applied here
- */
- charge_set_input_current_limit(icl, charge_mv);
-}
-
int board_set_active_charge_port(int port)
{
int is_valid_port = (port >= 0 && port < CONFIG_USB_PD_PORT_MAX_COUNT);
diff --git a/board/willow/board.c b/board/willow/board.c
index 826df6940c..1fdcc37492 100644
--- a/board/willow/board.c
+++ b/board/willow/board.c
@@ -234,14 +234,6 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
-{
- charge_ma = (charge_ma * 95) / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
-}
-
int board_discharge_on_ac(int enable)
{
int ret, port;
diff --git a/board/willow/board.h b/board/willow/board.h
index 18745a07a4..315c206a07 100644
--- a/board/willow/board.h
+++ b/board/willow/board.h
@@ -27,6 +27,7 @@
#define CONFIG_BATTERY_HW_PRESENT_CUSTOM
#define CONFIG_CHARGER_PSYS
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
#define CONFIG_CHARGER_RUNTIME_CONFIG
diff --git a/board/woomax/board.c b/board/woomax/board.c
index 747c576fc2..7e9fbd224f 100644
--- a/board/woomax/board.c
+++ b/board/woomax/board.c
@@ -451,7 +451,7 @@ static int woomax_ps8802_mux_set(const struct usb_mux *me,
const struct usb_mux usbc1_woomax_ps8818 = {
.usb_port = USBC_PORT_C1,
.i2c_port = I2C_PORT_TCPC1,
- .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS,
+ .i2c_addr_flags = PS8818_I2C_ADDR0_FLAGS,
.driver = &ps8818_usb_retimer_driver,
.board_set = &woomax_ps8818_mux_set,
};
diff --git a/board/wormdingler/board.c b/board/wormdingler/board.c
index 3c4dfe4b3c..e9e929de53 100644
--- a/board/wormdingler/board.c
+++ b/board/wormdingler/board.c
@@ -458,6 +458,7 @@ void board_tcpc_init(void)
/* 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);
@@ -629,8 +630,8 @@ int board_set_active_charge_port(int port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
- int charge_mv)
+__override void board_set_charge_limit(int port, int supplier, int charge_ma,
+ int max_ma, int charge_mv)
{
/*
* Ignore lower charge ceiling on PD transition if our battery is
@@ -642,9 +643,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_ma = charge_ma * 95 / 100;
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/board/wormdingler/board.h b/board/wormdingler/board.h
index 3c3ba6ead5..447846c509 100644
--- a/board/wormdingler/board.h
+++ b/board/wormdingler/board.h
@@ -24,6 +24,8 @@
#define CONFIG_BATTERY_FUEL_GAUGE
#define CONFIG_BATTERY_VENDOR_PARAM
+#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5
+
/* Enable PD3.0 */
#define CONFIG_USB_PD_REV30