diff options
Diffstat (limited to 'board/beadrix/board.c')
-rw-r--r-- | board/beadrix/board.c | 290 |
1 files changed, 143 insertions, 147 deletions
diff --git a/board/beadrix/board.c b/board/beadrix/board.c index 0fb2f9773b..5cea32f90c 100644 --- a/board/beadrix/board.c +++ b/board/beadrix/board.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -39,8 +39,8 @@ #include "usb_pd.h" #include "usb_pd_tcpm.h" -#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) -#define CPRINTUSB(format, args...) cprints(CC_USBCHARGE, format, ## args) +#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ##args) +#define CPRINTUSB(format, args...) cprints(CC_USBCHARGE, format, ##args) #define INT_RECHECK_US 5000 @@ -142,34 +142,26 @@ __override void board_pulse_entering_rw(void) /* 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_SUB_ANALOG] = { - .name = "SUB_ANALOG", - .factor_mul = ADC_MAX_MVOLT, - .factor_div = ADC_READ_MAX + 1, - .shift = 0, - .channel = CHIP_ADC_CH13 - }, + [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_SUB_ANALOG] = { .name = "SUB_ANALOG", + .factor_mul = ADC_MAX_MVOLT, + .factor_div = ADC_READ_MAX + 1, + .shift = 0, + .channel = CHIP_ADC_CH13 }, }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); @@ -224,38 +216,48 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }; static int board_nb7v904m_mux_set(const struct usb_mux *me, - mux_state_t mux_state); + mux_state_t mux_state); /* USB Retimer */ -const struct usb_mux usbc1_retimer = { - .usb_port = 1, - .i2c_port = I2C_PORT_SUB_USB_C1, - .i2c_addr_flags = NB7V904M_I2C_ADDR0, - .driver = &nb7v904m_usb_redriver_drv, - .board_set = &board_nb7v904m_mux_set, +const struct usb_mux_chain usbc1_retimer = { + .mux = + &(const struct usb_mux){ + .usb_port = 1, + .i2c_port = I2C_PORT_SUB_USB_C1, + .i2c_addr_flags = NB7V904M_I2C_ADDR0, + .driver = &nb7v904m_usb_redriver_drv, + .board_set = &board_nb7v904m_mux_set, + }, }; /* USB Muxes */ -struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { +struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { { - .usb_port = 0, - .i2c_port = I2C_PORT_USB_C0, - .i2c_addr_flags = IT5205_I2C_ADDR1_FLAGS, - .driver = &it5205_usb_mux_driver, + .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, + }, }, - { /* Used as MUX only*/ - .usb_port = 1, - .i2c_port = I2C_PORT_SUB_USB_C1, - .i2c_addr_flags = AN7447_TCPC0_I2C_ADDR_FLAGS, - .flags = USB_MUX_FLAG_NOT_TCPC, - .driver = &anx7447_usb_mux_driver, - .next_mux = &usbc1_retimer, + { + /* Used as MUX only*/ + .mux = + &(const struct usb_mux){ + .usb_port = 1, + .i2c_port = I2C_PORT_SUB_USB_C1, + .i2c_addr_flags = AN7447_TCPC0_I2C_ADDR_FLAGS, + .flags = USB_MUX_FLAG_NOT_TCPC, + .driver = &anx7447_usb_mux_driver, + }, + .next = &usbc1_retimer, }, }; /* USB Mux */ static int board_nb7v904m_mux_set(const struct usb_mux *me, - mux_state_t mux_state) + mux_state_t mux_state) { int rv = EC_SUCCESS; int flipped = !!(mux_state & USB_PD_MUX_POLARITY_INVERTED); @@ -264,75 +266,71 @@ static int board_nb7v904m_mux_set(const struct usb_mux *me, /* USB with DP */ if (mux_state & USB_PD_MUX_DP_ENABLED) { if (flipped) { /* CC2 */ - rv |= nb7v904m_tune_usb_set_eq(me, - NB7V904M_CH_A_EQ_0_DB, - NB7V904M_CH_B_EQ_4_DB, - NB7V904M_CH_C_EQ_0_DB, - NB7V904M_CH_D_EQ_0_DB); - rv |= nb7v904m_tune_usb_flat_gain(me, - NB7V904M_CH_A_GAIN_0_DB, - NB7V904M_CH_B_GAIN_3P5_DB, - NB7V904M_CH_C_GAIN_0_DB, - NB7V904M_CH_D_GAIN_0_DB); - rv |= nb7v904m_set_loss_profile_match(me, - NB7V904M_LOSS_PROFILE_A, - NB7V904M_LOSS_PROFILE_A, - NB7V904M_LOSS_PROFILE_D, - NB7V904M_LOSS_PROFILE_D); + rv |= nb7v904m_tune_usb_set_eq( + me, NB7V904M_CH_A_EQ_0_DB, + NB7V904M_CH_B_EQ_4_DB, + NB7V904M_CH_C_EQ_0_DB, + NB7V904M_CH_D_EQ_0_DB); + rv |= nb7v904m_tune_usb_flat_gain( + me, NB7V904M_CH_A_GAIN_0_DB, + NB7V904M_CH_B_GAIN_3P5_DB, + NB7V904M_CH_C_GAIN_0_DB, + NB7V904M_CH_D_GAIN_0_DB); + rv |= nb7v904m_set_loss_profile_match( + me, NB7V904M_LOSS_PROFILE_A, + NB7V904M_LOSS_PROFILE_A, + NB7V904M_LOSS_PROFILE_D, + NB7V904M_LOSS_PROFILE_D); } /* CC1 */ else { - rv |= nb7v904m_tune_usb_set_eq(me, - NB7V904M_CH_A_EQ_0_DB, - NB7V904M_CH_B_EQ_0_DB, - NB7V904M_CH_C_EQ_4_DB, - NB7V904M_CH_D_EQ_0_DB); - rv |= nb7v904m_tune_usb_flat_gain(me, - NB7V904M_CH_A_GAIN_0_DB, - NB7V904M_CH_B_GAIN_0_DB, - NB7V904M_CH_C_GAIN_3P5_DB, - NB7V904M_CH_D_GAIN_0_DB); - rv |= nb7v904m_set_loss_profile_match(me, - NB7V904M_LOSS_PROFILE_D, - NB7V904M_LOSS_PROFILE_D, - NB7V904M_LOSS_PROFILE_A, - NB7V904M_LOSS_PROFILE_A); - } - } else { - /* USB only */ - rv |= nb7v904m_tune_usb_set_eq(me, - NB7V904M_CH_A_EQ_0_DB, - NB7V904M_CH_B_EQ_4_DB, + rv |= nb7v904m_tune_usb_set_eq( + me, NB7V904M_CH_A_EQ_0_DB, + NB7V904M_CH_B_EQ_0_DB, NB7V904M_CH_C_EQ_4_DB, NB7V904M_CH_D_EQ_0_DB); - rv |= nb7v904m_tune_usb_flat_gain(me, - NB7V904M_CH_A_GAIN_0_DB, - NB7V904M_CH_B_GAIN_3P5_DB, + rv |= nb7v904m_tune_usb_flat_gain( + me, NB7V904M_CH_A_GAIN_0_DB, + NB7V904M_CH_B_GAIN_0_DB, NB7V904M_CH_C_GAIN_3P5_DB, NB7V904M_CH_D_GAIN_0_DB); - rv |= nb7v904m_set_loss_profile_match(me, - NB7V904M_LOSS_PROFILE_A, - NB7V904M_LOSS_PROFILE_A, + rv |= nb7v904m_set_loss_profile_match( + me, NB7V904M_LOSS_PROFILE_D, + NB7V904M_LOSS_PROFILE_D, NB7V904M_LOSS_PROFILE_A, NB7V904M_LOSS_PROFILE_A); + } + } else { + /* USB only */ + rv |= nb7v904m_tune_usb_set_eq(me, + NB7V904M_CH_A_EQ_0_DB, + NB7V904M_CH_B_EQ_4_DB, + NB7V904M_CH_C_EQ_4_DB, + NB7V904M_CH_D_EQ_0_DB); + rv |= nb7v904m_tune_usb_flat_gain( + me, NB7V904M_CH_A_GAIN_0_DB, + NB7V904M_CH_B_GAIN_3P5_DB, + NB7V904M_CH_C_GAIN_3P5_DB, + NB7V904M_CH_D_GAIN_0_DB); + rv |= nb7v904m_set_loss_profile_match( + me, NB7V904M_LOSS_PROFILE_A, + NB7V904M_LOSS_PROFILE_A, + NB7V904M_LOSS_PROFILE_A, + NB7V904M_LOSS_PROFILE_A); } } else if (mux_state & USB_PD_MUX_DP_ENABLED) { /* 4 lanes DP */ - rv |= nb7v904m_tune_usb_set_eq(me, - NB7V904M_CH_A_EQ_0_DB, - NB7V904M_CH_B_EQ_0_DB, - NB7V904M_CH_C_EQ_0_DB, - NB7V904M_CH_D_EQ_0_DB); - rv |= nb7v904m_tune_usb_flat_gain(me, - NB7V904M_CH_A_GAIN_0_DB, - NB7V904M_CH_B_GAIN_0_DB, - NB7V904M_CH_C_GAIN_0_DB, - NB7V904M_CH_D_GAIN_0_DB); - rv |= nb7v904m_set_loss_profile_match(me, - NB7V904M_LOSS_PROFILE_D, - NB7V904M_LOSS_PROFILE_D, - NB7V904M_LOSS_PROFILE_D, - NB7V904M_LOSS_PROFILE_D); + rv |= nb7v904m_tune_usb_set_eq(me, NB7V904M_CH_A_EQ_0_DB, + NB7V904M_CH_B_EQ_0_DB, + NB7V904M_CH_C_EQ_0_DB, + NB7V904M_CH_D_EQ_0_DB); + rv |= nb7v904m_tune_usb_flat_gain(me, NB7V904M_CH_A_GAIN_0_DB, + NB7V904M_CH_B_GAIN_0_DB, + NB7V904M_CH_C_GAIN_0_DB, + NB7V904M_CH_D_GAIN_0_DB); + rv |= nb7v904m_set_loss_profile_match( + me, NB7V904M_LOSS_PROFILE_D, NB7V904M_LOSS_PROFILE_D, + NB7V904M_LOSS_PROFILE_D, NB7V904M_LOSS_PROFILE_D); } return rv; @@ -406,8 +404,7 @@ int board_is_sourcing_vbus(int port) int board_set_active_charge_port(int port) { - int is_real_port = (port >= 0 && - port < board_get_usb_pd_port_count()); + int is_real_port = (port >= 0 && port < board_get_usb_pd_port_count()); int i; int old_port; @@ -443,22 +440,24 @@ int board_set_active_charge_port(int port) * Turn off the other ports' sink path FETs, before enabling the * requested charge port. */ - for (i = 0; i < board_get_usb_pd_port_count(); i++) { - if (i == port) - continue; - - if (tcpc_write(i, TCPC_REG_COMMAND, - TCPC_REG_COMMAND_SNK_CTRL_LOW)) - CPRINTS("p%d: sink path disable failed.", i); - raa489000_enable_asgate(i, false); - } + if (old_port != CHARGE_PORT_NONE && old_port != port) { + for (i = 0; i < board_get_usb_pd_port_count(); i++) { + if (i == port) + continue; - /* - * Stop the charger IC from switching while changing ports. Otherwise, - * we can overcurrent the adapter we're switching to. (crbug.com/926056) - */ - if (old_port != CHARGE_PORT_NONE) + if (tcpc_write(i, TCPC_REG_COMMAND, + TCPC_REG_COMMAND_SNK_CTRL_LOW)) + CPRINTS("p%d: sink path disable failed.", i); + raa489000_enable_asgate(i, false); + } + + /* + * Stop the charger IC from switching while changing ports. + * Otherwise, we can overcurrent the adapter we're switching to. + * (crbug.com/926056) + */ charger_discharge_on_ac(1); + } /* Enable requested charge port. */ if (raa489000_enable_asgate(port, true) || @@ -476,8 +475,8 @@ int board_set_active_charge_port(int port) } /* Vconn control for integrated ITE TCPC */ -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); @@ -518,7 +517,7 @@ uint16_t tcpc_get_alert_status(void) } if (board_get_usb_pd_port_count() > 1 && - !gpio_get_level(GPIO_USB_C1_INT_V1_ODL)) { + !gpio_get_level(GPIO_USB_C1_INT_V1_ODL)) { if (!tcpc_read16(1, TCPC_REG_ALERT, ®val)) { /* TCPCI spec Rev 1.0 says to ignore bits 14:12. */ if (!(tcpc_config[1].flags & TCPC_FLAGS_TCPCI_REV2_0)) @@ -532,9 +531,8 @@ uint16_t tcpc_get_alert_status(void) return status; } -__override void ocpc_get_pid_constants(int *kp, int *kp_div, - int *ki, int *ki_div, - int *kd, int *kd_div) +__override void ocpc_get_pid_constants(int *kp, int *kp_div, int *ki, + int *ki_div, int *kd, int *kd_div) { *kp = 1; *kp_div = 20; @@ -550,25 +548,23 @@ int pd_snk_is_vbus_provided(int port) } /* PWM channels. Must be in the exactly same order as in enum pwm_channel. */ -const struct pwm_t pwm_channels[] = { - [PWM_CH_KBLIGHT] = { - .channel = 0, - .flags = PWM_CONFIG_DSLEEP, - .freq_hz = 10000, - } -}; +const struct pwm_t pwm_channels[] = { [PWM_CH_KBLIGHT] = { + .channel = 0, + .flags = PWM_CONFIG_DSLEEP, + .freq_hz = 10000, + } }; 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}, + [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); @@ -589,8 +585,8 @@ static const struct ec_response_keybd_config keybd1 = { /* No function keys, no numeric keypad and no screenlock key */ }; -__override const struct ec_response_keybd_config -*board_vivaldi_keybd_config(void) +__override const struct ec_response_keybd_config * +board_vivaldi_keybd_config(void) { /* * Future boards should use fw_config if needed. |