diff options
Diffstat (limited to 'board')
267 files changed, 1479 insertions, 3578 deletions
diff --git a/board/adlrvpp_mchp1521/board.h b/board/adlrvpp_mchp1521/board.h index 645bfc0598..bcd46acf25 100644 --- a/board/adlrvpp_mchp1521/board.h +++ b/board/adlrvpp_mchp1521/board.h @@ -140,9 +140,6 @@ /* 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 d5f3d1a0b4..47e8261f78 100644 --- a/board/agah/charger_isl9241.c +++ b/board/agah/charger_isl9241.c @@ -196,6 +196,13 @@ 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 d078ef59ac..a8bad0f121 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_ADDR0_FLAGS, + .i2c_addr_flags = PS8818_I2C_ADDR_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 3eff9215bc..f2bc7557ec 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. */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 cd9eb30870..e087d629a7 100644 --- a/board/anahera/board.c +++ b/board/anahera/board.c @@ -64,3 +64,15 @@ 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 82ba5a4e1c..18360171e3 100644 --- a/board/anahera/board.h +++ b/board/anahera/board.h @@ -33,8 +33,6 @@ #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 7fabd2082e..a4fa209246 100644 --- a/board/anahera/charger.c +++ b/board/anahera/charger.c @@ -81,3 +81,10 @@ 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 d2562d43d3..6fbbb64b16 100644 --- a/board/atlas/board.c +++ b/board/atlas/board.c @@ -531,15 +531,39 @@ 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, - PD_MAX_CURRENT_MA * - (100 - CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT) / 100); + charger_set_input_current_limit(CHARGER_SOLO, + charger_derate(PD_MAX_CURRENT_MA)); } 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 3dbce640bb..9718ab7cdd 100644 --- a/board/atlas/board.h +++ b/board/atlas/board.h @@ -77,9 +77,7 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_ISL9238 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#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_INPUT_CURRENT 512 #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 7a16fcd5cb..88f5b85a41 100644 --- a/board/banshee/charger.c +++ b/board/banshee/charger.c @@ -79,3 +79,10 @@ 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 24c6cb960e..5cea32f90c 100644 --- a/board/beadrix/board.c +++ b/board/beadrix/board.c @@ -474,6 +474,19 @@ 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 89a1d6b13f..f6b1f1008c 100644 --- a/board/beetley/board.c +++ b/board/beetley/board.c @@ -384,6 +384,19 @@ 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 b05b8e2eb5..a70ee73ebb 100644 --- a/board/beetley/board.h +++ b/board/beetley/board.h @@ -27,11 +27,6 @@ /* 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 3acdb66e4f..e03ae1c36c 100644 --- a/board/bellis/board.c +++ b/board/bellis/board.c @@ -236,6 +236,14 @@ 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 0741de5dc7..d502c4c5ef 100644 --- a/board/bellis/board.h +++ b/board/bellis/board.h @@ -40,7 +40,6 @@ #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 ce1bc27700..766f55579c 100644 --- a/board/blipper/board.c +++ b/board/blipper/board.c @@ -536,6 +536,19 @@ 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 896ebec76a..379a92a007 100644 --- a/board/blipper/board.h +++ b/board/blipper/board.h @@ -29,11 +29,6 @@ #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 fc70b11ada..c47b9e46f0 100644 --- a/board/boten/board.c +++ b/board/boten/board.c @@ -244,6 +244,19 @@ 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 2e607f73c1..ec5d25ff9f 100644 --- a/board/boten/board.h +++ b/board/boten/board.h @@ -32,11 +32,6 @@ */ #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 b86a291625..0a57994ca0 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); } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 7fabd2082e..a4fa209246 100644 --- a/board/brya/charger.c +++ b/board/brya/charger.c @@ -81,3 +81,10 @@ 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 443f5f6d2f..5a28fb2c25 100644 --- a/board/bugzzy/board.c +++ b/board/bugzzy/board.c @@ -393,6 +393,19 @@ 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 45bdfdc9f3..707314d02a 100644 --- a/board/bugzzy/board.h +++ b/board/bugzzy/board.h @@ -43,11 +43,6 @@ #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 @@ -188,14 +183,6 @@ #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 a89250ae34..aa378ca289 100644 --- a/board/burnet/board.c +++ b/board/burnet/board.c @@ -222,6 +222,14 @@ 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 5199ae4aaf..6870ccc2d2 100644 --- a/board/burnet/board.h +++ b/board/burnet/board.h @@ -8,9 +8,6 @@ #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 @@ -31,7 +28,6 @@ #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 c1b450f482..6b1ac69efd 100644 --- a/board/c2d2/board.h +++ b/board/c2d2/board.h @@ -34,6 +34,7 @@ #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 7956ae77f5..de651ac874 100644 --- a/board/cappy2/board.c +++ b/board/cappy2/board.c @@ -229,6 +229,19 @@ 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 8f503b1bcc..b21a20d6e5 100644 --- a/board/cappy2/board.h +++ b/board/cappy2/board.h @@ -39,11 +39,6 @@ #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 2ae65c7d86..512a7c224b 100644 --- a/board/casta/board.c +++ b/board/casta/board.c @@ -172,8 +172,7 @@ 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_DEFAULT_CURRENT_LIMIT); + charger_set_input_current_limit(0, CONFIG_CHARGER_INPUT_CURRENT); } 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 9b214f2dae..e3fa60c76a 100644 --- a/board/cerise/board.c +++ b/board/cerise/board.c @@ -236,6 +236,14 @@ 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 d2c58e9f6e..41d86b956d 100644 --- a/board/cerise/board.h +++ b/board/cerise/board.h @@ -28,7 +28,6 @@ #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 f8700404ed..c2ad54acb2 100644 --- a/board/cherry/board.c +++ b/board/cherry/board.c @@ -262,6 +262,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) +{ + 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 0e0ff70ab8..ede07dd9a0 100644 --- a/board/chocodile_vpdmcu/board.h +++ b/board/chocodile_vpdmcu/board.h @@ -55,6 +55,7 @@ #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 @@ -71,7 +72,6 @@ #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 4863cd94c9..1e1ed2ab71 100644 --- a/board/coachz/board.c +++ b/board/coachz/board.c @@ -513,7 +513,6 @@ 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); @@ -684,8 +683,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -697,7 +696,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/coachz/board.h b/board/coachz/board.h index 70594d3efa..c332b98c34 100644 --- a/board/coachz/board.h +++ b/board/coachz/board.h @@ -40,8 +40,6 @@ #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 9c7a2643d0..966a5b2516 100644 --- a/board/coffeecake/board.h +++ b/board/coffeecake/board.h @@ -18,6 +18,7 @@ #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 a2a99ed42b..c63a2f6ddc 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). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +566,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, if (bd9995x_bc12_enable_charging(port, bc12_enable)) return; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = (charge_ma * 95) / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /** diff --git a/board/coral/board.h b/board/coral/board.h index cea83ef4a5..bc6226152c 100644 --- a/board/coral/board.h +++ b/board/coral/board.h @@ -25,7 +25,6 @@ #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 @@ -60,8 +59,7 @@ #define CONFIG_CHARGER_BD9995X #define CONFIG_CHARGER_BD9995X_CHGEN #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 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 52ef76a19c..4fe1e01fec 100644 --- a/board/corori/board.c +++ b/board/corori/board.c @@ -311,6 +311,19 @@ 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 646b14227d..75e0e4eec6 100644 --- a/board/corori/board.h +++ b/board/corori/board.h @@ -28,11 +28,6 @@ #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 e3103f65ff..efebc3af2e 100644 --- a/board/corori2/board.c +++ b/board/corori2/board.c @@ -454,6 +454,19 @@ 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 c62cade1c3..3483d96f88 100644 --- a/board/corori2/board.h +++ b/board/corori2/board.h @@ -20,7 +20,6 @@ /* 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 @@ -31,8 +30,6 @@ #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 */ @@ -50,11 +47,6 @@ #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 3c56757ef7..c9c34d6d32 100644 --- a/board/cret/board.c +++ b/board/cret/board.c @@ -304,6 +304,19 @@ 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 eb6b261cdf..2080185c7c 100644 --- a/board/cret/board.h +++ b/board/cret/board.h @@ -34,11 +34,6 @@ #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 a12ef75d30..cb3e79ee56 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); -bool board_is_convertible(void) +static bool board_is_convertible(void) { /* * convertible = 0 diff --git a/board/crota/board.h b/board/crota/board.h index d652a93ad0..3d79e190bd 100644 --- a/board/crota/board.h +++ b/board/crota/board.h @@ -288,8 +288,6 @@ 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 9f044790e0..c7dcf7b0c1 100644 --- a/board/crota/charger.c +++ b/board/crota/charger.c @@ -79,3 +79,10 @@ 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 7d60234dc3..79d2492060 100644 --- a/board/crota/sensors.c +++ b/board/crota/sensors.c @@ -10,11 +10,9 @@ #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" @@ -211,29 +209,10 @@ 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 717276e768..ddc8885e22 100644 --- a/board/damu/board.c +++ b/board/damu/board.c @@ -236,6 +236,14 @@ 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 16e03cf45c..49875e6883 100644 --- a/board/damu/board.h +++ b/board/damu/board.h @@ -28,7 +28,6 @@ #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 deleted file mode 100644 index 9b3207859a..0000000000 --- a/board/dibbi/board.c +++ /dev/null @@ -1,374 +0,0 @@ -/* 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 deleted file mode 100644 index c59a540b5d..0000000000 --- a/board/dibbi/board.h +++ /dev/null @@ -1,145 +0,0 @@ -/* 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 deleted file mode 100644 index 07ea50c392..0000000000 --- a/board/dibbi/build.mk +++ /dev/null @@ -1,14 +0,0 @@ -# -*- 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 deleted file mode 100644 index 768c31112a..0000000000 --- a/board/dibbi/ec.tasklist +++ /dev/null @@ -1,16 +0,0 @@ -/* 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 deleted file mode 100644 index a5c0c02a72..0000000000 --- a/board/dibbi/gpio.inc +++ /dev/null @@ -1,142 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 44cfc0b457..0000000000 --- a/board/dibbi/led.c +++ /dev/null @@ -1,38 +0,0 @@ -/* 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 deleted file mode 100644 index 9d573b9c61..0000000000 --- a/board/dibbi/usb_pd_policy.c +++ /dev/null @@ -1,69 +0,0 @@ -/* 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 deleted file mode 100644 index 32736caf64..0000000000 --- a/board/dibbi/vif_override.xml +++ /dev/null @@ -1,3 +0,0 @@ -<!-- 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 52c3b740e4..c0372c9322 100644 --- a/board/dingdong/board.h +++ b/board/dingdong/board.h @@ -15,6 +15,7 @@ #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 b112f14f9f..d5db803b65 100644 --- a/board/discovery-stm32f072/board.h +++ b/board/discovery-stm32f072/board.h @@ -23,6 +23,7 @@ #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 a722408e81..e348454af1 100644 --- a/board/discovery/board.h +++ b/board/discovery/board.h @@ -25,14 +25,9 @@ #ifndef __ASSEMBLER__ -/* 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 +/* Timer selection */ +#define TIM_CLOCK_MSB 3 +#define TIM_CLOCK_LSB 4 #include "gpio_signal.h" diff --git a/board/dojo/board.c b/board/dojo/board.c index 5c7db8b443..62f2e6ac09 100644 --- a/board/dojo/board.c +++ b/board/dojo/board.c @@ -467,13 +467,14 @@ const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, }; -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /* NVME */ diff --git a/board/dooly/board.c b/board/dooly/board.c index 9652de72c0..6e1f6ebbeb 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. */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 58def569be..118b3178be 100644 --- a/board/drawcia/board.c +++ b/board/drawcia/board.c @@ -610,17 +610,19 @@ uint16_t tcpc_get_alert_status(void) return status; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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)) - charge_ma = MIN(charge_ma, 2000); + icl = MIN(icl, 2000); /* * TODO(b/151955431): Characterize the input current limit in case a * scaling needs to be applied here */ - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit(icl, 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 ba325aedc6..cbc977d64b 100644 --- a/board/drawcia_riscv/board.c +++ b/board/drawcia_riscv/board.c @@ -542,17 +542,19 @@ uint16_t tcpc_get_alert_status(void) return status; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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)) - charge_ma = MIN(charge_ma, 2000); + icl = MIN(icl, 2000); /* * TODO(b/151955431): Characterize the input current limit in case a * scaling needs to be applied here */ - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit(icl, charge_mv); } int board_set_active_charge_port(int port) diff --git a/board/driblee/board.c b/board/driblee/board.c index 05ec708ac5..30075e683e 100644 --- a/board/driblee/board.c +++ b/board/driblee/board.c @@ -338,6 +338,19 @@ 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 514fe584ff..f6a3ac9130 100644 --- a/board/driblee/board.h +++ b/board/driblee/board.h @@ -31,11 +31,6 @@ #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 1d881d9a2c..1a20870d1f 100644 --- a/board/drobit/board.c +++ b/board/drobit/board.c @@ -475,3 +475,17 @@ 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 bf3e64ae5a..d6fda98f3d 100644 --- a/board/drobit/board.h +++ b/board/drobit/board.h @@ -89,7 +89,6 @@ /* 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 1abf9c6acd..81fdf22ffc 100644 --- a/board/eldrid/board.c +++ b/board/eldrid/board.c @@ -182,7 +182,14 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, else isl9241_set_ac_prochot(0, 3328); - charge_set_input_current_limit(charge_ma, 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/eldrid/board.h b/board/eldrid/board.h index 8cfac4d8bc..1bbe183425 100644 --- a/board/eldrid/board.h +++ b/board/eldrid/board.h @@ -93,8 +93,6 @@ /* 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 f8621d086e..4007d34379 100644 --- a/board/elm/board.c +++ b/board/elm/board.c @@ -337,10 +337,13 @@ int board_set_active_charge_port(int charge_port) * @param charge_ma Desired charge limit (mA). * @param charge_mv Negotiated charge voltage (mV). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, + int charge_mv) { - charge_set_input_current_limit(charge_ma, 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); pd_send_host_event(PD_EVENT_POWER_CHANGE); } diff --git a/board/elm/board.h b/board/elm/board.h index 6e4e705604..10cb6bb75d 100644 --- a/board/elm/board.h +++ b/board/elm/board.h @@ -37,15 +37,13 @@ #define CONFIG_BATTERY_SMART #define CONFIG_CHARGE_MANAGER #define CONFIG_CHARGER -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 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 @@ -75,6 +73,7 @@ #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 96534f62c7..3f5da1a83a 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). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +646,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, if (bd9995x_bc12_enable_charging(port, bc12_enable)) return; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = (charge_ma * 95) / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /** diff --git a/board/eve/board.h b/board/eve/board.h index e3623979c3..064bce4b60 100644 --- a/board/eve/board.h +++ b/board/eve/board.h @@ -100,9 +100,7 @@ #define CONFIG_CHARGER_BD9995X #define CONFIG_CHARGER_BD9995X_CHGEN #define CONFIG_CHARGER_DISCHARGE_ON_AC -#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_INPUT_CURRENT 512 #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 5e15b458cc..c9e1aca267 100644 --- a/board/ezkinil/board.c +++ b/board/ezkinil/board.c @@ -865,3 +865,16 @@ 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 c5e6ce1771..aa1fe065f4 100644 --- a/board/ezkinil/board.h +++ b/board/ezkinil/board.h @@ -15,9 +15,6 @@ #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 0ca6a59b9c..17e1cf9246 100644 --- a/board/felwinter/board.h +++ b/board/felwinter/board.h @@ -179,7 +179,6 @@ #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 95227f753a..dd2535ea7c 100644 --- a/board/felwinter/charger_isl9241.c +++ b/board/felwinter/charger_isl9241.c @@ -79,3 +79,11 @@ 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 6d864252b6..563f680dee 100644 --- a/board/fennel/board.c +++ b/board/fennel/board.c @@ -237,6 +237,14 @@ 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 42e1fcd451..6bb90ef0f3 100644 --- a/board/fennel/board.h +++ b/board/fennel/board.h @@ -26,7 +26,6 @@ #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 296ddca5a7..f58083c6ed 100644 --- a/board/fizz/board.c +++ b/board/fizz/board.c @@ -512,8 +512,8 @@ static void set_charge_limit(int charge_ma) } } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 604e67d9b8..1309c41901 100644 --- a/board/fluffy/board.h +++ b/board/fluffy/board.h @@ -38,6 +38,7 @@ #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 8d2fdfcfed..5e45b346b7 100644 --- a/board/fusb307bgevb/board.h +++ b/board/fusb307bgevb/board.h @@ -29,6 +29,7 @@ #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 7228c9e2f2..6fad328a76 100644 --- a/board/gaelin/board.c +++ b/board/gaelin/board.c @@ -17,6 +17,7 @@ #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" @@ -40,6 +41,33 @@ 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) @@ -90,6 +118,7 @@ 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: @@ -264,7 +293,6 @@ void board_overcurrent_event(int port, int is_overcurrented) usbc_overcurrent = is_overcurrented; update_5v_usage(); } - /* * Power monitoring and management. * @@ -308,6 +336,7 @@ 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) /* @@ -442,6 +471,16 @@ 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. */ @@ -531,6 +570,15 @@ 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 166f0f1432..f113c6cffd 100644 --- a/board/gaelin/board.h +++ b/board/gaelin/board.h @@ -16,7 +16,7 @@ #define CONFIG_MP2964 /* Barrel Jack */ -#define DEDICATED_CHARGE_PORT 2 +#define DEDICATED_CHARGE_PORT 3 /* HDMI CEC */ #define CONFIG_CEC @@ -31,9 +31,19 @@ /* 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_PS8815 -#define CONFIG_USBC_PPC_NX20P3483 /* Compatible with Silicon Mitus SM5360A */ +#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 /* TODO: b/177608416 - measure and check these values on brya */ #define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ @@ -82,17 +92,22 @@ #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_USB_C0_TCPC NPCX_I2C_PORT1_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_C1_TCPC NPCX_I2C_PORT4_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_PPC NPCX_I2C_PORT2_0 +#define I2C_PORT_USB_C1_PPC 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_BC12 NPCX_I2C_PORT2_0 +#define I2C_PORT_USB_C1_BC12 NPCX_I2C_PORT6_1 +#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 @@ -100,7 +115,17 @@ #define I2C_ADDR_MP2964_FLAGS 0x20 -#define I2C_ADDR_SCALER_FLAGS 0x58 +#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 /* Thermal features */ #define CONFIG_THERMISTOR @@ -111,14 +136,21 @@ /* ADC */ #define CONFIG_ADC -/* Fan */ +/* + * TODO(b/197478860): Enable the fan control. We need + * to check the sensor value and adjust the fan speed. + */ #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 */ @@ -128,6 +160,7 @@ enum charge_port { CHARGE_PORT_TYPEC0, CHARGE_PORT_TYPEC1, + CHARGE_PORT_TYPEC2, CHARGE_PORT_BARRELJACK, CHARGE_PORT_ENUM_COUNT }; @@ -150,6 +183,8 @@ 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 6961fb3f60..3de758d1bd 100644 --- a/board/gaelin/build.mk +++ b/board/gaelin/build.mk @@ -19,5 +19,4 @@ 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 4a40f332e8..d16fc35f52 100644 --- a/board/gaelin/ec.tasklist +++ b/board/gaelin/ec.tasklist @@ -12,8 +12,10 @@ #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) \ @@ -21,6 +23,7 @@ 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_INT_C0, pd_interrupt_handler_task, 0, LARGER_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_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 5f54e6e63c..6828438a10 100644 --- a/board/gaelin/fans.c +++ b/board/gaelin/fans.c @@ -30,10 +30,16 @@ 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 = 2350, - .rpm_start = 2350, - .rpm_max = 4100, + .rpm_min = 2200, + .rpm_start = 2200, + .rpm_max = 7200, }; const struct fan_t fans[FAN_CH_COUNT] = { diff --git a/board/gaelin/gpio.inc b/board/gaelin/gpio.inc index 6de7003743..51cf0010c6 100644 --- a/board/gaelin/gpio.inc +++ b/board/gaelin/gpio.inc @@ -18,11 +18,15 @@ 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_TCPC_INT_ODL, PIN(E, 0), GPIO_INT_FALLING, tcpc_alert_event) +GPIO_INT(USB_C0_C2_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) @@ -30,6 +34,11 @@ 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) @@ -45,25 +54,8 @@ GPIO(EN_PP5000_FAN, PIN(6, 1), GPIO_OUT_HIGH) GPIO(ANALOG_PPVAR_PWR_IN_IMON_EC, PIN(4, 2), GPIO_INPUT) /* Display */ -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) +GPIO(DP_CONN_OC_ODL, PIN(2, 5), GPIO_INPUT) + /* BarrelJack */ GPIO(EN_PPVAR_BJ_ADP_L, PIN(0, 7), GPIO_OUT_LOW) @@ -87,6 +79,17 @@ 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) @@ -94,16 +97,20 @@ 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(SMSCALER_CLK, PIN(3, 3), GPIO_INPUT) -GPIO(SMSCALER_DATA, PIN(3, 6), GPIO_INPUT) +GPIO(EC_I2C_QI_SCL, PIN(3, 3), GPIO_INPUT) +GPIO(EC_I2C_QI_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_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_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_C1_TCPC_SCL, PIN(F, 3), GPIO_INPUT) GPIO(EC_I2C_USB_C1_TCPC_SDA, PIN(F, 2), GPIO_INPUT) @@ -121,26 +128,36 @@ 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_FRS_EN, PIN(9, 7), GPIO_OUT_LOW) -GPIO(USB_C0_RT_RST_L, PIN(A, 7), GPIO_OUT_HIGH) +GPIO(USB_C0_C2_TCPC_RST_ODL, PIN(A, 7), GPIO_ODR_LOW) GPIO(USB_C1_FRS_EN, PIN(9, 4), GPIO_OUT_LOW) -GPIO(USB_C1_RT_RST_L, PIN(0, 2), GPIO_OUT_HIGH) +GPIO(USB_C1_RT_INT_ODL, PIN(A, 0), GPIO_INPUT) +GPIO(USB_C1_RT_RST_R_L, PIN(0, 2), GPIO_OUT_LOW) /* 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) /* GPIO36/RTS_L/I2C5_SDA0, GPIO33/I2C5_SCL0/CTS_L */ +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, 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 */ @@ -161,14 +178,10 @@ 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(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 */ +UNUSED(PIN(0, 4)) /* KSO13/GPIO04 */ diff --git a/board/gaelin/i2c.c b/board/gaelin/i2c.c index f9bfa11657..0a0b6b69a6 100644 --- a/board/gaelin/i2c.c +++ b/board/gaelin/i2c.c @@ -11,44 +11,60 @@ /* 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", - .port = I2C_PORT_USB_C0_TCPC, + .name = "tcpc0,2", + .port = I2C_PORT_USB_C0_C2_TCPC, .kbps = 1000, - .scl = GPIO_EC_I2C_USB_C0_TCPC_SCL, - .sda = GPIO_EC_I2C_USB_C0_TCPC_SDA, + .scl = GPIO_EC_I2C_USB_C0_C2_TCPC_SCL, + .sda = GPIO_EC_I2C_USB_C0_C2_TCPC_SDA, }, { /* I2C2 */ - .name = "ppc0", - .port = I2C_PORT_USB_C0_PPC, + .name = "ppc0,2", + .port = I2C_PORT_USB_C0_C2_PPC, .kbps = 1000, - .scl = GPIO_EC_I2C_USB_C0_PPC_BC_SCL, - .sda = GPIO_EC_I2C_USB_C0_PPC_BC_SDA, + .scl = GPIO_EC_I2C_USB_C0_C2_PPC_SCL, + .sda = GPIO_EC_I2C_USB_C0_C2_PPC_SDA, }, { /* I2C3 */ - .name = "ppc1", - .port = I2C_PORT_USB_C1_PPC, + .name = "retimer0,2", + .port = I2C_PORT_USB_C0_C2_MUX, .kbps = 1000, - .scl = GPIO_EC_I2C_USB_C1_PPC_BC_SCL, - .sda = GPIO_EC_I2C_USB_C1_PPC_BC_SDA, + .scl = GPIO_EC_I2C_USB_C0_C2_RT_SCL, + .sda = GPIO_EC_I2C_USB_C0_C2_RT_SDA, }, { - /* I2C4 */ + /* I2C4 C1 TCPC */ .name = "tcpc1", .port = I2C_PORT_USB_C1_TCPC, - .kbps = 1000, + .kbps = 400, .scl = GPIO_EC_I2C_USB_C1_TCPC_SCL, .sda = GPIO_EC_I2C_USB_C1_TCPC_SDA, }, { /* I2C5 */ - .name = "scaler", - .port = I2C_PORT_SCALER, + .name = "wireless_charger", + .port = I2C_PORT_QI, .kbps = 400, - .scl = GPIO_SMSCALER_CLK, - .sda = GPIO_SMSCALER_DATA, + .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, }, { /* I2C7 */ diff --git a/board/gaelin/led.c b/board/gaelin/led.c index a4b9a0d094..842cee0530 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); } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 fe7e82894a..3d4335f453 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, - .freq = 25000 }, + .flags = PWM_CONFIG_OPEN_DRAIN | PWM_CONFIG_DSLEEP, + .freq = 1000 }, [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 deleted file mode 100644 index e15e0043e1..0000000000 --- a/board/gaelin/thermal.c +++ /dev/null @@ -1,140 +0,0 @@ -/* 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 98595fc607..806ff2c4ee 100644 --- a/board/gaelin/usbc_config.c +++ b/board/gaelin/usbc_config.c @@ -10,13 +10,17 @@ #include "compile_time_macros.h" #include "console.h" #include "driver/bc12/pi3usb9201_public.h" -#include "driver/ppc/nx20p348x.h" -#include "driver/tcpm/ps8xxx_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/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" @@ -36,22 +40,29 @@ 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 = PS8XXX_I2C_ADDR1_FLAGS, + .port = I2C_PORT_USB_C0_C2_TCPC, + .addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS, }, - .drv = &ps8xxx_tcpm_drv, + .drv = &nct38xx_tcpm_drv, .flags = TCPC_FLAGS_TCPCI_REV2_0 | - TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V, + 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_ADDR2_FLAGS, + .addr_flags = RT1715_I2C_ADDR_FLAGS, }, - .drv = &ps8xxx_tcpm_drv, - .flags = TCPC_FLAGS_TCPCI_REV2_0 | - TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V, + .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, }, }; BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == USBC_PORT_COUNT); @@ -60,16 +71,19 @@ BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT); /* USBC PPC configuration */ struct ppc_config_t ppc_chips[] = { [USBC_PORT_C0] = { - /* Compatible with Silicon Mitus SM5360A */ - .i2c_port = I2C_PORT_USB_C0_PPC, - .i2c_addr_flags = NX20P3483_ADDR2_FLAGS, - .drv = &nx20p348x_drv, + .i2c_port = I2C_PORT_USB_C0_C2_PPC, + .i2c_addr_flags = SYV682X_ADDR0_FLAGS, + .drv = &syv682x_drv, }, [USBC_PORT_C1] = { - /* Compatible with Silicon Mitus SM5360A */ .i2c_port = I2C_PORT_USB_C1_PPC, - .i2c_addr_flags = NX20P3483_ADDR3_FLAGS, - .drv = &nx20p348x_drv, + .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, }, }; BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT); @@ -81,100 +95,200 @@ static const struct usb_mux_chain usbc0_tcss_usb_mux = { .mux = &(const struct usb_mux){ .usb_port = USBC_PORT_C0, - .driver = &tcpci_tcpm_usb_mux_driver, - .hpd_update = &ps8xxx_tcpc_update_hpd_status, + .driver = &virtual_usb_mux_driver, + .hpd_update = &virtual_hpd_update, }, }; static const struct usb_mux_chain usbc1_tcss_usb_mux = { .mux = &(const struct usb_mux){ .usb_port = USBC_PORT_C1, - .driver = &tcpci_tcpm_usb_mux_driver, - .hpd_update = &ps8xxx_tcpc_update_hpd_status, + .driver = &virtual_usb_mux_driver, + .hpd_update = &virtual_hpd_update, }, }; +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 = &virtual_usb_mux_driver, - .hpd_update = &virtual_hpd_update, + .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, }, .next = &usbc0_tcss_usb_mux, }, [USBC_PORT_C1] = { .mux = &(const struct usb_mux) { .usb_port = USBC_PORT_C1, - .driver = &virtual_usb_mux_driver, - .hpd_update = &virtual_hpd_update, + .driver = &kb800x_usb_mux_driver, + .i2c_port = I2C_PORT_USB_C1_MUX, + .i2c_addr_flags = KB800X_I2C_ADDR0_FLAGS, }, .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_BC12, + .i2c_port = I2C_PORT_USB_C0_C2_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_2_FLAGS, + .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, }, }; BUILD_ASSERT(ARRAY_SIZE(pi3usb9201_bc12_chips) == USBC_PORT_COUNT); -static void ps8815_reset(int port) +/* + * 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) { - 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; + 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; } else { - return; + return EC_ERROR_INVAL; } - 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); - - CPRINTS("[C%d] %s: patching ps8815 registers", port, __func__); + /* + * We do not have a load switch for the burnside bridge chips, + * so we only need to sequence reset. + */ - 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); + 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; +} - if (i2c_write8(i2c_port, i2c_addr_flags, 0x0f, 0x31) == EC_SUCCESS) - CPRINTS("ps8815: reg 0x0f set to 0x31"); +__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_read8(i2c_port, i2c_addr_flags, 0x0f, &val) == EC_SUCCESS) - CPRINTS("ps8815: reg 0x0f now %02x", val); + return EC_SUCCESS; } void board_reset_pd_mcu(void) { - 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); + 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); } static void board_tcpc_init(void) @@ -182,19 +296,25 @@ 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_C1_PPC_INT_ODL); + gpio_enable_interrupt(GPIO_USB_C2_PPC_INT_ODL); /* Enable TCPC interrupts. */ - gpio_enable_interrupt(GPIO_USB_C0_TCPC_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL); + gpio_enable_interrupt(GPIO_USB_C0_C2_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); + 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); @@ -202,8 +322,8 @@ 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_C0_C2_TCPC_INT_ODL) == 0) + status |= PD_STATUS_TCPC_ALERT_0 | PD_STATUS_TCPC_ALERT_2; if (gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL) == 0) status |= PD_STATUS_TCPC_ALERT_1; @@ -217,13 +337,15 @@ 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_TCPC_INT_ODL: + case GPIO_USB_C0_C2_TCPC_INT_ODL: schedule_deferred_pd_interrupt(USBC_PORT_C0); break; case GPIO_USB_C1_TCPC_INT_ODL: @@ -243,6 +365,9 @@ 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; } @@ -252,10 +377,13 @@ void ppc_interrupt(enum gpio_signal signal) { switch (signal) { case GPIO_USB_C0_PPC_INT_ODL: - nx20p348x_interrupt(USBC_PORT_C0); + syv682x_interrupt(USBC_PORT_C0); break; case GPIO_USB_C1_PPC_INT_ODL: - nx20p348x_interrupt(USBC_PORT_C1); + syv682x_interrupt(USBC_PORT_C1); + break; + case GPIO_USB_C2_PPC_INT_ODL: + syv682x_interrupt(USBC_PORT_C2); break; default: break; @@ -273,3 +401,16 @@ __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 219ad9a745..5e7beae21a 100644 --- a/board/gaelin/usbc_config.h +++ b/board/gaelin/usbc_config.h @@ -8,8 +8,13 @@ #ifndef __CROS_EC_USBC_CONFIG_H #define __CROS_EC_USBC_CONFIG_H -#define CONFIG_USB_PD_PORT_MAX_COUNT 2 +#define CONFIG_USB_PD_PORT_MAX_COUNT 3 -enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_C1, USBC_PORT_COUNT }; +enum usbc_port { + USBC_PORT_C0 = 0, + USBC_PORT_C1, + USBC_PORT_C2, + USBC_PORT_COUNT +}; #endif /* __CROS_EC_USBC_CONFIG_H */ diff --git a/board/galtic/board.c b/board/galtic/board.c index 9800c1150c..af0638be20 100644 --- a/board/galtic/board.c +++ b/board/galtic/board.c @@ -502,6 +502,18 @@ 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 174e4b0764..11346a3c7d 100644 --- a/board/gelarshie/board.c +++ b/board/gelarshie/board.c @@ -511,7 +511,6 @@ 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 +682,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +695,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/gelarshie/board.h b/board/gelarshie/board.h index 737f005639..7e27c7a62f 100644 --- a/board/gelarshie/board.h +++ b/board/gelarshie/board.h @@ -35,7 +35,6 @@ #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" @@ -43,9 +42,6 @@ #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 5373eb2bff..0ca135b9fd 100644 --- a/board/gimble/board.c +++ b/board/gimble/board.c @@ -185,3 +185,16 @@ __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 1d4099e7eb..015f3f78e6 100644 --- a/board/gimble/board.h +++ b/board/gimble/board.h @@ -196,8 +196,6 @@ #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 7fabd2082e..a4fa209246 100644 --- a/board/gimble/charger.c +++ b/board/gimble/charger.c @@ -81,3 +81,10 @@ 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 544117f9c6..250f6afd61 100644 --- a/board/gooey/board.c +++ b/board/gooey/board.c @@ -259,6 +259,19 @@ 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 fde32f8866..b586c0f334 100644 --- a/board/gooey/board.h +++ b/board/gooey/board.h @@ -32,11 +32,6 @@ */ #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 8814871ed7..d7509115b5 100644 --- a/board/haboki/board.c +++ b/board/haboki/board.c @@ -526,17 +526,19 @@ uint16_t tcpc_get_alert_status(void) return status; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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)) - charge_ma = MIN(charge_ma, 2000); + icl = MIN(icl, 2000); /* * TODO(b/151955431): Characterize the input current limit in case a * scaling needs to be applied here */ - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit(icl, charge_mv); } int board_set_active_charge_port(int port) diff --git a/board/hammer/board.h b/board/hammer/board.h index dd4b337c66..bce7dc39f4 100644 --- a/board/hammer/board.h +++ b/board/hammer/board.h @@ -83,6 +83,7 @@ #define CONFIG_LTO #define CONFIG_FORCE_CONSOLE_RESUME #define CONFIG_MATH_UTIL +#define CONFIG_STM_HWTIMER32 /* USB Configuration */ #define CONFIG_USB @@ -269,7 +270,7 @@ #ifdef BOARD_WAND /* Battery and charger options. */ #define CONFIG_CHARGER -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 128 +#define CONFIG_CHARGER_INPUT_CURRENT 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 9e900a126a..d36a9228c1 100644 --- a/board/hatch_fp/board.h +++ b/board/hatch_fp/board.h @@ -235,6 +235,7 @@ #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 894c907ab9..828e7523b3 100644 --- a/board/hatch_fp/build.mk +++ b/board/hatch_fp/build.mk @@ -29,7 +29,6 @@ test-list-y=\ abort \ aes \ always_memset \ - benchmark \ cec \ compile_time_macros \ cortexm_fpu \ @@ -40,8 +39,6 @@ test-list-y=\ flash_write_protect \ fpsensor \ fpsensor_hw \ - ftrapv \ - libc_printf \ mpu \ mutex \ panic \ @@ -49,7 +46,6 @@ 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 c80b00f0de..98d1b70bac 100644 --- a/board/herobrine/usbc_config.c +++ b/board/herobrine/usbc_config.c @@ -177,7 +177,6 @@ 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); @@ -286,8 +285,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -299,7 +298,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/hoho/board.h b/board/hoho/board.h index f6421fdaf0..7768ab7293 100644 --- a/board/hoho/board.h +++ b/board/hoho/board.h @@ -15,6 +15,7 @@ #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 11035d2034..ab4b95b625 100644 --- a/board/homestar/board.c +++ b/board/homestar/board.c @@ -459,7 +459,6 @@ 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); @@ -631,8 +630,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -644,7 +643,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/homestar/board.h b/board/homestar/board.h index 60d943b300..230aa6e7d3 100644 --- a/board/homestar/board.h +++ b/board/homestar/board.h @@ -27,9 +27,6 @@ #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 0580ddcb41..fddadf245d 100644 --- a/board/host/charger.c +++ b/board/host/charger.c @@ -136,8 +136,7 @@ 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_DEFAULT_CURRENT_LIMIT; + mock_current = mock_input_current = CONFIG_CHARGER_INPUT_CURRENT; return EC_SUCCESS; } diff --git a/board/hyperdebug/board.c b/board/hyperdebug/board.c index 66cd981dca..37e41f66a9 100644 --- a/board/hyperdebug/board.c +++ b/board/hyperdebug/board.c @@ -20,8 +20,6 @@ #include "usb-stream.h" #include "gpio_list.h" -#include <stdio.h> - void board_config_pre_init(void) { /* enable SYSCFG clock */ @@ -238,26 +236,6 @@ 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 86c2c88ad0..9d15311784 100644 --- a/board/hyperdebug/board.h +++ b/board/hyperdebug/board.h @@ -36,6 +36,7 @@ #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 4d145287a4..be464e3a77 100644 --- a/board/icarus/board.c +++ b/board/icarus/board.c @@ -204,6 +204,14 @@ 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 ca1a236307..98b6da3fd5 100644 --- a/board/icarus/board.h +++ b/board/icarus/board.h @@ -24,7 +24,6 @@ #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 d9e88d3f80..129b75f8e2 100644 --- a/board/jacuzzi/board.c +++ b/board/jacuzzi/board.c @@ -244,6 +244,14 @@ 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 d5d0523790..0fd5f6496d 100644 --- a/board/jacuzzi/board.h +++ b/board/jacuzzi/board.h @@ -34,7 +34,6 @@ #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 95227f753a..ab48a7338c 100644 --- a/board/kano/charger.c +++ b/board/kano/charger.c @@ -79,3 +79,10 @@ 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 c00e375560..c04b24d3ed 100644 --- a/board/kappa/board.c +++ b/board/kappa/board.c @@ -217,6 +217,14 @@ 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 5c49053a7b..6b6461ae83 100644 --- a/board/kappa/board.h +++ b/board/kappa/board.h @@ -26,7 +26,6 @@ #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 d9ecb33da0..1dc86013d7 100644 --- a/board/kappa/led.c +++ b/board/kappa/led.c @@ -129,7 +129,6 @@ 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 eafd55bcf2..f0f17e93a9 100644 --- a/board/kingoftown/usbc_config.c +++ b/board/kingoftown/usbc_config.c @@ -225,7 +225,6 @@ 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); @@ -334,8 +333,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -347,7 +346,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/kinox/board.c b/board/kinox/board.c index 7d9955e05f..7c55fba876 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 47bf6a7687..136b05ea1e 100644 --- a/board/kracko/board.c +++ b/board/kracko/board.c @@ -582,17 +582,19 @@ uint16_t tcpc_get_alert_status(void) return status; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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)) - charge_ma = MIN(charge_ma, 2000); + icl = MIN(icl, 2000); /* * TODO(b/151955431): Characterize the input current limit in case a * scaling needs to be applied here */ - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit(icl, charge_mv); } int board_set_active_charge_port(int port) diff --git a/board/kuldax/led.c b/board/kuldax/led.c index 2fabc26a9a..39b79e2196 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); } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 a41d5be713..96f49de8a3 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] = { /* 20/(20+8.66)*50/200 */ + [ADC_PPVAR_IMON] = { /* 872.3 mV/A */ .name = "PPVAR_IMON", .input_ch = NPCX_ADC_CH3, - .factor_mul = ADC_MAX_VOLT * 143, - .factor_div = (ADC_READ_MAX + 1) * 25, + .factor_mul = ADC_MAX_VOLT * 1433, + .factor_div = (ADC_READ_MAX + 1) * 1250, }, }; diff --git a/board/lalala/board.c b/board/lalala/board.c index f0f354fcf3..78404d6821 100644 --- a/board/lalala/board.c +++ b/board/lalala/board.c @@ -397,6 +397,19 @@ 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 2996ad3613..4967e49752 100644 --- a/board/lalala/board.h +++ b/board/lalala/board.h @@ -33,11 +33,6 @@ #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 9917231474..08fc84e222 100644 --- a/board/lantis/board.c +++ b/board/lantis/board.c @@ -719,6 +719,18 @@ 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 26a8a5692d..11cc649573 100644 --- a/board/lazor/usbc_config.c +++ b/board/lazor/usbc_config.c @@ -263,7 +263,6 @@ 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); @@ -371,8 +370,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -384,7 +383,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/lisbon/led.c b/board/lisbon/led.c index a4b9a0d094..842cee0530 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); } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 77c939143a..eedf8e6fdd 100644 --- a/board/madoo/board.c +++ b/board/madoo/board.c @@ -312,6 +312,20 @@ 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 0d5e24c2a0..82cfa30b0e 100644 --- a/board/madoo/board.h +++ b/board/madoo/board.h @@ -19,11 +19,6 @@ #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 3ddc1af3d1..bfa77375e5 100644 --- a/board/magolor/board.c +++ b/board/magolor/board.c @@ -415,8 +415,6 @@ 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) @@ -595,6 +593,19 @@ 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 beb2cc279c..481856323f 100644 --- a/board/magolor/board.h +++ b/board/magolor/board.h @@ -45,11 +45,6 @@ #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 5a7158b58a..24b34d9a75 100644 --- a/board/makomo/board.c +++ b/board/makomo/board.c @@ -235,6 +235,14 @@ 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 86e5e78862..bf705e9560 100644 --- a/board/makomo/board.h +++ b/board/makomo/board.h @@ -27,7 +27,6 @@ #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 deleted file mode 100644 index b974930d5b..0000000000 --- a/board/marasov/battery.c +++ /dev/null @@ -1,77 +0,0 @@ -/* 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 deleted file mode 100644 index e48dfaa163..0000000000 --- a/board/marasov/board.c +++ /dev/null @@ -1,52 +0,0 @@ -/* 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 deleted file mode 100644 index 6cb0225edc..0000000000 --- a/board/marasov/board.h +++ /dev/null @@ -1,217 +0,0 @@ -/* 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 deleted file mode 100644 index 8b85854cf0..0000000000 --- a/board/marasov/build.mk +++ /dev/null @@ -1,25 +0,0 @@ -# -*- 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 deleted file mode 100644 index 68fff4f283..0000000000 --- a/board/marasov/charger.c +++ /dev/null @@ -1,83 +0,0 @@ -/* 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 deleted file mode 100644 index a4039fc94f..0000000000 --- a/board/marasov/ec.tasklist +++ /dev/null @@ -1,26 +0,0 @@ -/* 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 deleted file mode 100644 index 158f4bf704..0000000000 --- a/board/marasov/fans.c +++ /dev/null @@ -1,89 +0,0 @@ -/* 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 deleted file mode 100644 index 375f5e965b..0000000000 --- a/board/marasov/fw_config.c +++ /dev/null @@ -1,46 +0,0 @@ -/* 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 deleted file mode 100644 index 906e61fe7e..0000000000 --- a/board/marasov/fw_config.h +++ /dev/null @@ -1,52 +0,0 @@ -/* 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 deleted file mode 100644 index f01f5b790b..0000000000 --- a/board/marasov/generated-gpio.inc +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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 deleted file mode 100644 index d4a2ff2d67..0000000000 --- a/board/marasov/gpio.inc +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- 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 deleted file mode 100644 index 15c9b13e83..0000000000 --- a/board/marasov/i2c.c +++ /dev/null @@ -1,81 +0,0 @@ -/* 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 deleted file mode 100644 index 936aeb290b..0000000000 --- a/board/marasov/keyboard.c +++ /dev/null @@ -1,25 +0,0 @@ -/* 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 deleted file mode 100644 index 74005005cb..0000000000 --- a/board/marasov/led.c +++ /dev/null @@ -1,101 +0,0 @@ -/* 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 deleted file mode 100644 index f693a6e27f..0000000000 --- a/board/marasov/pwm.c +++ /dev/null @@ -1,38 +0,0 @@ -/* 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 deleted file mode 100644 index 2a25141639..0000000000 --- a/board/marasov/sensors.c +++ /dev/null @@ -1,187 +0,0 @@ -/* 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 deleted file mode 100644 index b974ba7509..0000000000 --- a/board/marasov/usbc_config.c +++ /dev/null @@ -1,348 +0,0 @@ -/* 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 deleted file mode 100644 index 1fa7ad4c7a..0000000000 --- a/board/marasov/usbc_config.h +++ /dev/null @@ -1,17 +0,0 @@ -/* 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 deleted file mode 100644 index 6ade5d2f92..0000000000 --- a/board/marasov/vif_override.xml +++ /dev/null @@ -1,148 +0,0 @@ -<?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 cf59f133e7..125c39a826 100644 --- a/board/marzipan/board.c +++ b/board/marzipan/board.c @@ -496,7 +496,6 @@ 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); @@ -626,8 +625,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -639,7 +638,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/mchpevb1/board.c b/board/mchpevb1/board.c index 3b7b34843b..23135108f6 100644 --- a/board/mchpevb1/board.c +++ b/board/mchpevb1/board.c @@ -590,6 +590,21 @@ 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 dd7c87fd6f..10208ca736 100644 --- a/board/mchpevb1/board.h +++ b/board/mchpevb1/board.h @@ -150,8 +150,7 @@ /* #define CONFIG_CHARGER_DISCHARGE_ON_AC */ /* #define CONFIG_CHARGER_ISL9237 */ /* #define CONFIG_CHARGER_ILIM_PIN_DISABLED */ -/* #define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 */ -/* #define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 */ +/* #define CONFIG_CHARGER_INPUT_CURRENT 512 */ /* #define CONFIG_CHARGER_NARROW_VDC */ /* #define CONFIG_CHARGER_PROFILE_OVERRIDE */ diff --git a/board/metaknight/board.c b/board/metaknight/board.c index e5d86aba63..5aa3a21cc0 100644 --- a/board/metaknight/board.c +++ b/board/metaknight/board.c @@ -396,6 +396,19 @@ 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 79027a3e9c..5bd3c56a83 100644 --- a/board/metaknight/board.h +++ b/board/metaknight/board.h @@ -22,11 +22,6 @@ #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 0b6ea04bd4..d12375d678 100644 --- a/board/mithrax/board.h +++ b/board/mithrax/board.h @@ -176,7 +176,6 @@ #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 7a16fcd5cb..a9eafe353e 100644 --- a/board/mithrax/charger_isl9241.c +++ b/board/mithrax/charger_isl9241.c @@ -79,3 +79,11 @@ 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 a63c93ae50..acc12f9831 100644 --- a/board/moli/board.c +++ b/board/moli/board.c @@ -8,13 +8,11 @@ #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" @@ -33,32 +31,6 @@ 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] = { @@ -144,6 +116,34 @@ 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,9 +155,12 @@ static void adp_connect_deferred(void) /* Debounce */ if (connected == adp_connected) return; - if (connected) - ec_bj_power(&pi.voltage, &pi.current); + if (connected) { + unsigned int bj = ec_config_get_bj_power(); + 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; @@ -189,29 +192,12 @@ 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); @@ -446,72 +432,3 @@ 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 8d0ba97fb2..e7aa7855e7 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 }; -enum monitor_port { - HDMI1_MONITOR, - HDMI2_MONITOR, - OPTION_MONITOR, - MONITOR_COUNT -}; - -enum monitor_state { MONITOR_OFF, MONITOR_ON }; +/* + * 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) 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 4ddfaaf181..4897d446b2 100644 --- a/board/moli/build.mk +++ b/board/moli/build.mk @@ -20,4 +20,3 @@ 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 deleted file mode 100644 index 5807ee9111..0000000000 --- a/board/moli/fw_config.c +++ /dev/null @@ -1,73 +0,0 @@ -/* 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 deleted file mode 100644 index ee3dcd274d..0000000000 --- a/board/moli/fw_config.h +++ /dev/null @@ -1,53 +0,0 @@ -/* 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 e8473f8c95..fb3b508573 100644 --- a/board/moli/gpio.inc +++ b/board/moli/gpio.inc @@ -25,9 +25,6 @@ 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) @@ -123,9 +120,12 @@ GPIO(LED_ORANGE_CONTROL, PIN(3, 1), GPIO_ODR_LOW) GPIO(LED_BLUE_CONTROL, PIN(2, 5), GPIO_ODR_LOW) /* Option Board */ -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) +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) 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 edb429e530..f2ab214418 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); } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 52b1c50a1b..50ba008512 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +598,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/mrbland/board.h b/board/mrbland/board.h index cc6207ca83..0f78db50d9 100644 --- a/board/mrbland/board.h +++ b/board/mrbland/board.h @@ -24,8 +24,6 @@ #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 6d7b35da1c..f6996b8460 100644 --- a/board/munna/board.c +++ b/board/munna/board.c @@ -236,6 +236,14 @@ 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 20194bed88..5dc35c68df 100644 --- a/board/munna/board.h +++ b/board/munna/board.h @@ -40,7 +40,6 @@ #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 2ab66ab951..02fb27a283 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_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, @@ -760,7 +760,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, (model == MODEL_EKKO || model == MODEL_BARD)) factor = 95; charge_ma = charge_ma * factor / 100; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } void board_hibernate(void) diff --git a/board/nami/board.h b/board/nami/board.h index 652db4826d..51cde41acb 100644 --- a/board/nami/board.h +++ b/board/nami/board.h @@ -96,8 +96,7 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_ISL9238 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 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 af7d7f48d4..3cdd7abaf1 100644 --- a/board/nautilus/board.c +++ b/board/nautilus/board.c @@ -528,6 +528,26 @@ 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 2b4f25538d..cbca28a71f 100644 --- a/board/nautilus/board.h +++ b/board/nautilus/board.h @@ -79,13 +79,11 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_ISL9238 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 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 1c0b2b3397..d32f036844 100644 --- a/board/nocturne/board.c +++ b/board/nocturne/board.c @@ -760,6 +760,19 @@ 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 73700b8480..279016ec98 100644 --- a/board/nocturne/board.h +++ b/board/nocturne/board.h @@ -8,8 +8,6 @@ #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. @@ -33,7 +31,6 @@ #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 @@ -70,14 +67,8 @@ #define CONFIG_CHARGE_MANAGER #define CONFIG_CHARGER #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 128 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 128 +#define CONFIG_CHARGER_INPUT_CURRENT 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 d95df6101a..e7d34445b0 100644 --- a/board/nocturne_fp/board.h +++ b/board/nocturne_fp/board.h @@ -110,6 +110,7 @@ #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 2bc59c1f13..65ffd6c096 100644 --- a/board/nocturne_fp/build.mk +++ b/board/nocturne_fp/build.mk @@ -29,7 +29,6 @@ test-list-y=\ abort \ aes \ always_memset \ - benchmark \ cec \ compile_time_macros \ cortexm_fpu \ @@ -40,8 +39,6 @@ test-list-y=\ flash_write_protect \ fpsensor \ fpsensor_hw \ - ftrapv \ - libc_printf \ mpu \ mutex \ panic \ @@ -49,7 +46,6 @@ 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 b544490fc9..2e3e1f31d2 100644 --- a/board/nucleo-dartmonkey/build.mk +++ b/board/nucleo-dartmonkey/build.mk @@ -22,13 +22,11 @@ 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 bd957d35db..d807209564 100644 --- a/board/nucleo-f072rb/board.h +++ b/board/nucleo-f072rb/board.h @@ -16,6 +16,7 @@ #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 3b7d5f1bf1..d4e299dcff 100644 --- a/board/nucleo-f411re/board.h +++ b/board/nucleo-f411re/board.h @@ -19,6 +19,7 @@ /* 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 d923a7a40f..21a2955bc4 100644 --- a/board/nucleo-f412zg/build.mk +++ b/board/nucleo-f412zg/build.mk @@ -19,13 +19,11 @@ 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 e2df8d2547..905b4ea110 100644 --- a/board/nucleo-g431rb/board.h +++ b/board/nucleo-g431rb/board.h @@ -12,6 +12,7 @@ #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 ad04a68918..6153d85d8a 100644 --- a/board/nucleo-h743zi/build.mk +++ b/board/nucleo-h743zi/build.mk @@ -19,13 +19,11 @@ 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 17908caa7a..468b6e6677 100644 --- a/board/oak/board.c +++ b/board/oak/board.c @@ -357,10 +357,11 @@ int board_set_active_charge_port(int charge_port) * @param charge_ma Desired charge limit (mA). * @param charge_mv Negotiated charge voltage (mV). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, + int charge_mv) { - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); pd_send_host_event(PD_EVENT_POWER_CHANGE); } diff --git a/board/oak/board.h b/board/oak/board.h index c429a655c5..6f5ed3fc87 100644 --- a/board/oak/board.h +++ b/board/oak/board.h @@ -14,7 +14,6 @@ /* Free up some flash space */ #define CONFIG_DEBUG_ASSERT_BRIEF #define CONFIG_USB_PD_DEBUG_LEVEL 0 -#undef CONFIG_CONSOLE_CMDHELP #define CONFIG_LTO @@ -40,8 +39,7 @@ #define CONFIG_CHARGE_MANAGER #define CONFIG_CHARGER -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 512 #if BOARD_REV == OAK_REV1 #define CONFIG_CHARGER_BQ24773 @@ -107,6 +105,7 @@ #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 7a16fcd5cb..88f5b85a41 100644 --- a/board/osiris/charger.c +++ b/board/osiris/charger.c @@ -79,3 +79,10 @@ 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 1efad2255f..6ed03e90ad 100644 --- a/board/pazquel/board.c +++ b/board/pazquel/board.c @@ -305,7 +305,6 @@ 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); @@ -534,8 +533,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -547,7 +546,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/pdeval-stm32f072/board.h b/board/pdeval-stm32f072/board.h index 6ba7923b8e..4cb55573f4 100644 --- a/board/pdeval-stm32f072/board.h +++ b/board/pdeval-stm32f072/board.h @@ -21,6 +21,7 @@ #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 801c344a69..f884545b6d 100644 --- a/board/pico/board.c +++ b/board/pico/board.c @@ -320,6 +320,14 @@ 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 97128b54f1..665cf59691 100644 --- a/board/pico/board.h +++ b/board/pico/board.h @@ -28,7 +28,6 @@ #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 ae1c74bdfc..8913ec0f07 100644 --- a/board/pirika/board.c +++ b/board/pirika/board.c @@ -491,6 +491,18 @@ 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; @@ -578,7 +590,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 (!board_is_usb_pd_port_present(port)) + if (port < 0 || port > board_get_usb_pd_port_count()) return; raa489000_set_output_current(port, rp); diff --git a/board/plankton/board.h b/board/plankton/board.h index a17bd30c3c..224364269b 100644 --- a/board/plankton/board.h +++ b/board/plankton/board.h @@ -16,6 +16,7 @@ #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 1390bb996c..41069f2722 100644 --- a/board/polyberry/board.h +++ b/board/polyberry/board.h @@ -60,6 +60,7 @@ #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 ccaff4f55f..394f06be8e 100644 --- a/board/pompom/board.c +++ b/board/pompom/board.c @@ -269,6 +269,8 @@ 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. @@ -288,7 +290,8 @@ void board_hibernate(void) * otherwise, ACOK won't go High and can't wake EC up. Check the * bug b/170324206 for details. */ - ppc_vbus_sink_enable(USB_PD_PORT_C0, 1); + for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) + ppc_vbus_sink_enable(i, 1); } __override uint16_t board_get_ps8xxx_product_id(int port) @@ -320,9 +323,9 @@ void board_tcpc_init(void) * Initialize HPD to low; after sysjump SOC needs to see * HPD pulse to enable video path */ - usb_mux_hpd_update(USB_PD_PORT_C0, - USB_PD_MUX_HPD_LVL_DEASSERTED | - USB_PD_MUX_HPD_IRQ_DEASSERTED); + 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); } DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C + 1); @@ -402,20 +405,24 @@ void board_overcurrent_event(int port, int is_overcurrented) int board_set_active_charge_port(int port) { - int is_real_port = (port == USB_PD_PORT_C0); + int is_real_port = (port >= 0 && port < CONFIG_USB_PD_PORT_MAX_COUNT); + int i; if (!is_real_port && port != CHARGE_PORT_NONE) return EC_ERROR_INVAL; if (port == CHARGE_PORT_NONE) { CPRINTS("Disabling all charging port"); - /* - * 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); + + /* 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); + } return EC_SUCCESS; } @@ -428,6 +435,18 @@ 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); @@ -437,8 +456,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -450,7 +469,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/pompom/board.h b/board/pompom/board.h index 774b339273..40e7185c16 100644 --- a/board/pompom/board.h +++ b/board/pompom/board.h @@ -23,8 +23,6 @@ /* 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 @@ -32,7 +30,6 @@ #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 ab3f3b40b0..38183c0da0 100644 --- a/board/poppy/board.c +++ b/board/poppy/board.c @@ -58,6 +58,9 @@ #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) && @@ -676,8 +679,8 @@ int board_set_active_charge_port(int charge_port) * @param charge_ma Desired charge limit (mA). * @param charge_mv Negotiated charge voltage (mV). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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; @@ -685,7 +688,7 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, if (charge_mv > 5000) charge_ma -= 52; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit(MAX(charge_ma, ILIM_MIN_MA), charge_mv); } void board_hibernate(void) diff --git a/board/poppy/board.h b/board/poppy/board.h index 5242c1d3a8..b55dc1d818 100644 --- a/board/poppy/board.h +++ b/board/poppy/board.h @@ -89,8 +89,7 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_ISL9238 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 472 +#define CONFIG_CHARGER_INPUT_CURRENT 512 #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 3f438cee00..8b5f1a86fc 100644 --- a/board/primus/board.c +++ b/board/primus/board.c @@ -137,7 +137,8 @@ __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(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } static void configure_input_current_limit(void) @@ -158,7 +159,9 @@ static void configure_input_current_limit(void) else adapter_current_ma = adapter_current_ma * 97 / 100; - charge_set_input_current_limit(adapter_current_ma, adapter_current_mv); + charge_set_input_current_limit(MAX(adapter_current_ma, + CONFIG_CHARGER_INPUT_CURRENT), + 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 7fabd2082e..a4fa209246 100644 --- a/board/primus/charger.c +++ b/board/primus/charger.c @@ -81,3 +81,10 @@ 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 42768de2e7..5c3cabce53 100644 --- a/board/prism/board.h +++ b/board/prism/board.h @@ -111,6 +111,7 @@ #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 5475773aa0..d863b5fc0b 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. */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 7002a62e03..6cdf814c74 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +625,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /** diff --git a/board/quackingstick/board.h b/board/quackingstick/board.h index a8ec5a4231..9b50237b4d 100644 --- a/board/quackingstick/board.h +++ b/board/quackingstick/board.h @@ -32,8 +32,6 @@ #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 05142a3936..07a006b671 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 745ebeaca8..463a1e4a05 100644 --- a/board/rainier/board.h +++ b/board/rainier/board.h @@ -22,6 +22,7 @@ #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 e4abed4afb..8cbc6c6856 100644 --- a/board/rammus/board.c +++ b/board/rammus/board.c @@ -558,6 +558,26 @@ 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 975417df9a..c0c8238c3e 100644 --- a/board/rammus/board.h +++ b/board/rammus/board.h @@ -84,12 +84,10 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_ISL9238 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 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 7fabd2082e..a4fa209246 100644 --- a/board/redrix/charger.c +++ b/board/redrix/charger.c @@ -81,3 +81,10 @@ 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 ad92334c2b..e41921a436 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). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +555,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, if (bd9995x_bc12_enable_charging(port, bc12_enable)) return; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = (charge_ma * 95) / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /** diff --git a/board/reef/board.h b/board/reef/board.h index cc1783e43a..fc25024dff 100644 --- a/board/reef/board.h +++ b/board/reef/board.h @@ -50,9 +50,7 @@ #define CONFIG_CHARGER_BD9995X #define CONFIG_CHARGER_BD9995X_CHGEN #define CONFIG_CHARGER_DISCHARGE_ON_AC -#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_INPUT_CURRENT 512 #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 1e222a4ed4..b00e451842 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). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +311,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, if (bd9995x_bc12_enable_charging(port, bc12_enable)) return; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = (charge_ma * 95) / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /** diff --git a/board/reef_it8320/board.h b/board/reef_it8320/board.h index dbccc6eeee..45abf34151 100644 --- a/board/reef_it8320/board.h +++ b/board/reef_it8320/board.h @@ -48,9 +48,7 @@ #define CONFIG_CHARGER_BD9995X #define CONFIG_CHARGER_BD9995X_CHGEN #define CONFIG_CHARGER_DISCHARGE_ON_AC -#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_INPUT_CURRENT 512 #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 c50a4feb8a..0a40f5dd04 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). */ -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +748,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, if (bd9995x_bc12_enable_charging(port, bc12_enable)) return; - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = (charge_ma * 95) / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } /** diff --git a/board/reef_mchp/board.h b/board/reef_mchp/board.h index 925f271ffd..bde2d831d3 100644 --- a/board/reef_mchp/board.h +++ b/board/reef_mchp/board.h @@ -53,9 +53,7 @@ #define CONFIG_CHARGER_BD9995X #define CONFIG_CHARGER_BD9995X_CHGEN #define CONFIG_CHARGER_DISCHARGE_ON_AC -#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_INPUT_CURRENT 512 #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 e6767d8126..ddd5279d62 100644 --- a/board/sasuke/board.c +++ b/board/sasuke/board.c @@ -395,6 +395,19 @@ 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 df390d2d99..64c830df0f 100644 --- a/board/sasuke/board.h +++ b/board/sasuke/board.h @@ -29,11 +29,6 @@ #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 f6786c1441..e45213a63a 100644 --- a/board/sasukette/board.c +++ b/board/sasukette/board.c @@ -251,6 +251,19 @@ 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 f06a89a5f0..44cb65239a 100644 --- a/board/sasukette/board.h +++ b/board/sasukette/board.h @@ -36,11 +36,6 @@ #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 66017e172d..34e5cc456c 100644 --- a/board/scarlet/board.c +++ b/board/scarlet/board.c @@ -212,6 +212,13 @@ 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 cdc09f9114..4691d74391 100644 --- a/board/scarlet/board.h +++ b/board/scarlet/board.h @@ -32,6 +32,7 @@ #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 @@ -69,8 +70,7 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_RT9467 -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 +#define CONFIG_CHARGER_INPUT_CURRENT 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 109a40409d..801b67e07e 100644 --- a/board/servo_micro/board.h +++ b/board/servo_micro/board.h @@ -30,6 +30,7 @@ #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 1c7d90eab4..289c117989 100644 --- a/board/servo_v4/board.h +++ b/board/servo_v4/board.h @@ -35,6 +35,7 @@ #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 @@ -96,8 +97,6 @@ #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 e3eba6104a..4fcded6842 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 4debd67b49..b6c7915c6c 100644 --- a/board/servo_v4p1/board.h +++ b/board/servo_v4p1/board.h @@ -97,6 +97,7 @@ #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 fc79bf84da..7f5b6f35bf 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; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 5d96e164cf..dea75ee7d2 100644 --- a/board/shotzo/board.c +++ b/board/shotzo/board.c @@ -351,8 +351,8 @@ uint16_t tcpc_get_alert_status(void) return 0; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 a6d488aaf6..26576ede86 100644 --- a/board/stern/board.c +++ b/board/stern/board.c @@ -236,6 +236,14 @@ 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 d7d96ea67c..eedbc2a44c 100644 --- a/board/stern/board.h +++ b/board/stern/board.h @@ -28,7 +28,6 @@ #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 667483d81f..4ae9117829 100644 --- a/board/stm32f446e-eval/board.h +++ b/board/stm32f446e-eval/board.h @@ -56,6 +56,7 @@ #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 40c7fb0eca..26ea530e4e 100644 --- a/board/stm32l476g-eval/board.h +++ b/board/stm32l476g-eval/board.h @@ -33,6 +33,7 @@ #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 83d9ef4c72..f6f3ed5750 100644 --- a/board/storo/board.c +++ b/board/storo/board.c @@ -431,6 +431,19 @@ 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 1f33ce53b0..93dd573ba1 100644 --- a/board/storo/board.h +++ b/board/storo/board.h @@ -31,11 +31,6 @@ #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 4d945f5dc4..4387cd4094 100644 --- a/board/sweetberry/board.h +++ b/board/sweetberry/board.h @@ -77,6 +77,7 @@ #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 9f0d21b8b8..79ef4029d6 100644 --- a/board/taeko/board.c +++ b/board/taeko/board.c @@ -136,3 +136,16 @@ 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 a3ae9abb00..c3193c8847 100644 --- a/board/taeko/board.h +++ b/board/taeko/board.h @@ -26,9 +26,6 @@ #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 7fabd2082e..a4fa209246 100644 --- a/board/taeko/charger.c +++ b/board/taeko/charger.c @@ -81,3 +81,10 @@ 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 f8501d761b..5da998524b 100644 --- a/board/taniks/board.c +++ b/board/taniks/board.c @@ -115,3 +115,16 @@ 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 a301f3b458..6cd42ad7bb 100644 --- a/board/taniks/board.h +++ b/board/taniks/board.h @@ -36,9 +36,6 @@ */ #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 7fabd2082e..a4fa209246 100644 --- a/board/taniks/charger.c +++ b/board/taniks/charger.c @@ -81,3 +81,10 @@ 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 3724c9d2d0..8426216e79 100644 --- a/board/terrador/board.c +++ b/board/terrador/board.c @@ -301,7 +301,6 @@ 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 e285014e5e..3912e8803a 100644 --- a/board/tglrvp_ish/board.h +++ b/board/tglrvp_ish/board.h @@ -79,11 +79,8 @@ #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 26e6af5985..ea4d11db06 100644 --- a/board/tigertail/board.h +++ b/board/tigertail/board.h @@ -24,6 +24,7 @@ #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 b9c37a04fd..39a54f659e 100644 --- a/board/trogdor/usbc_config.c +++ b/board/trogdor/usbc_config.c @@ -225,7 +225,6 @@ 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); @@ -334,8 +333,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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 @@ -347,7 +346,8 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/twinkie/board.h b/board/twinkie/board.h index 808053d146..b1379fb15b 100644 --- a/board/twinkie/board.h +++ b/board/twinkie/board.h @@ -79,7 +79,8 @@ void trace_packets(void); void set_trace_mode(int mode); /* Timer selection */ -#define TIM_CLOCK32 2 +#define TIM_CLOCK_MSB 3 +#define TIM_CLOCK_LSB 15 #define TIM_ADC 16 #include "gpio_signal.h" diff --git a/board/vell/board.h b/board/vell/board.h index 3a7d97858c..4b3d527901 100644 --- a/board/vell/board.h +++ b/board/vell/board.h @@ -61,8 +61,6 @@ #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 53b14381cd..e33a0ed44a 100644 --- a/board/vell/charger.c +++ b/board/vell/charger.c @@ -81,6 +81,18 @@ 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 1ba266f145..7c74794d9d 100644 --- a/board/vilboz/board.c +++ b/board/vilboz/board.c @@ -504,3 +504,16 @@ 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 8a7c86824d..5160abbc26 100644 --- a/board/vilboz/board.h +++ b/board/vilboz/board.h @@ -20,7 +20,6 @@ #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 7a16fcd5cb..88f5b85a41 100644 --- a/board/volmar/charger.c +++ b/board/volmar/charger.c @@ -79,3 +79,10 @@ 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 4dfb3048ca..d7abda740c 100644 --- a/board/waddledee/board.c +++ b/board/waddledee/board.c @@ -342,6 +342,18 @@ 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 3cdb71cc5e..e207e59456 100644 --- a/board/waddledoo/board.c +++ b/board/waddledoo/board.c @@ -390,6 +390,19 @@ 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 23a89c84d6..727f1bdb33 100644 --- a/board/waddledoo/board.h +++ b/board/waddledoo/board.h @@ -18,12 +18,10 @@ #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 0 +#define CONFIG_USB_PD_DEBUG_LEVEL 2 /* EC console commands */ #define CONFIG_CMD_CHARGER_DUMP @@ -43,11 +41,6 @@ #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 98c061d9af..fd12aec449 100644 --- a/board/waddledoo2/board.c +++ b/board/waddledoo2/board.c @@ -397,6 +397,19 @@ 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 3b4587037d..93f0a0f108 100644 --- a/board/waddledoo2/board.h +++ b/board/waddledoo2/board.h @@ -28,11 +28,6 @@ #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 e8852a0b5a..9708dcca82 100644 --- a/board/wheelie/board.c +++ b/board/wheelie/board.c @@ -229,6 +229,18 @@ 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 1fdcc37492..826df6940c 100644 --- a/board/willow/board.c +++ b/board/willow/board.c @@ -234,6 +234,14 @@ 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 315c206a07..18745a07a4 100644 --- a/board/willow/board.h +++ b/board/willow/board.h @@ -27,7 +27,6 @@ #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 7e9fbd224f..747c576fc2 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_ADDR0_FLAGS, + .i2c_addr_flags = PS8818_I2C_ADDR_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 e9e929de53..3c4dfe4b3c 100644 --- a/board/wormdingler/board.c +++ b/board/wormdingler/board.c @@ -458,7 +458,6 @@ 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 +629,8 @@ int board_set_active_charge_port(int port) return EC_SUCCESS; } -__override void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +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,7 +642,9 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, charge_ma = max_ma; } - charge_set_input_current_limit(charge_ma, charge_mv); + charge_ma = charge_ma * 95 / 100; + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } uint16_t tcpc_get_alert_status(void) diff --git a/board/wormdingler/board.h b/board/wormdingler/board.h index 447846c509..3c3ba6ead5 100644 --- a/board/wormdingler/board.h +++ b/board/wormdingler/board.h @@ -24,8 +24,6 @@ #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 |