diff options
Diffstat (limited to 'board/rammus')
-rw-r--r-- | board/rammus/battery.c | 130 | ||||
-rw-r--r-- | board/rammus/board.c | 837 | ||||
-rw-r--r-- | board/rammus/board.h | 282 | ||||
-rw-r--r-- | board/rammus/build.mk | 15 | ||||
-rw-r--r-- | board/rammus/cbi_ssfc.c | 36 | ||||
-rw-r--r-- | board/rammus/cbi_ssfc.h | 56 | ||||
-rw-r--r-- | board/rammus/ec.tasklist | 25 | ||||
-rw-r--r-- | board/rammus/gpio.inc | 125 | ||||
-rw-r--r-- | board/rammus/led.c | 180 | ||||
-rw-r--r-- | board/rammus/usb_pd_policy.c | 115 | ||||
-rw-r--r-- | board/rammus/vif_override.xml | 3 |
11 files changed, 0 insertions, 1804 deletions
diff --git a/board/rammus/battery.c b/board/rammus/battery.c deleted file mode 100644 index 916aac5fd3..0000000000 --- a/board/rammus/battery.c +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Placeholder values for temporary battery pack. - */ - -#include "battery.h" -#include "battery_smart.h" -#include "charge_state.h" -#include "console.h" -#include "ec_commands.h" -#include "extpower.h" -#include "gpio.h" -#include "util.h" - -static enum battery_present batt_pres_prev = BP_NOT_SURE; - -/* Shutdown mode parameters to write to manufacturer access register */ -#define SB_SHIP_MODE_REG SB_MANUFACTURER_ACCESS -#define SB_SHUTDOWN_DATA 0x0010 - -static const struct battery_info info = { - .voltage_max = 13200, - .voltage_normal = 11550, - .voltage_min = 9000, - /* Pre-charge values. */ - .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 = 0, - .discharging_max_c = 60, -}; - -const struct battery_info *battery_get_info(void) -{ - return &info; -} - -int board_cut_off_battery(void) -{ - int rv; - - /* Ship mode command must be sent twice to take effect */ - rv = sb_write(SB_SHIP_MODE_REG, SB_SHUTDOWN_DATA); - - if (rv != EC_SUCCESS) - return rv; - - return sb_write(SB_SHIP_MODE_REG, SB_SHUTDOWN_DATA); -} - -enum battery_present battery_hw_present(void) -{ - /* The GPIO is low when the battery is physically present */ - return gpio_get_level(GPIO_BATT_PRES_L) ? BP_NO : BP_YES; -} - -static int battery_init(void) -{ - int batt_status; - - return battery_status(&batt_status) ? 0 : - !!(batt_status & STATUS_INITIALIZED); -} - -/* - * Check for case where both XCHG and XDSG bits are set indicating that even - * though the FG can be read from the battery, the battery is not able to be - * charged or discharged. This situation will happen if a battery disconnect was - * intiaited via H1 setting the DISCONN signal to the battery. This will put the - * battery pack into a sleep state and when power is reconnected, the FG can be - * read, but the battery is still not able to provide power to the system. The - * calling function returns batt_pres = BP_NO, which instructs the charging - * state machine to prevent powering up the AP on battery alone which could lead - * to a brownout event when the battery isn't able yet to provide power to the - * system. . - */ -static int battery_check_disconnect(void) -{ - int rv; - uint8_t data[6]; - - /* Check if battery charging + discharging is disabled. */ - rv = sb_read_mfgacc(PARAM_OPERATION_STATUS, - SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); - if (rv) - return BATTERY_DISCONNECT_ERROR; - - if ((data[3] & (BATTERY_DISCHARGING_DISABLED | - BATTERY_CHARGING_DISABLED)) == - (BATTERY_DISCHARGING_DISABLED | BATTERY_CHARGING_DISABLED)) - return BATTERY_DISCONNECTED; - - return BATTERY_NOT_DISCONNECTED; -} - -enum battery_present battery_is_present(void) -{ - enum battery_present batt_pres; - - /* Get the physical hardware status */ - batt_pres = battery_hw_present(); - - /* - * Make sure battery status is implemented, I2C transactions are - * successful & the battery status is initialized to find out if it - * is a working battery and it is not in the cut-off mode. - * - * If battery I2C fails but VBATT is high, battery is booting from - * cut-off mode. - * - * FETs are turned off after Power Shutdown time. - * The device will wake up when a voltage is applied to PACK. - * Battery status will be inactive until it is initialized. - */ - if (batt_pres == BP_YES && batt_pres_prev != batt_pres && - (battery_is_cut_off() != BATTERY_CUTOFF_STATE_NORMAL || - battery_check_disconnect() != BATTERY_NOT_DISCONNECTED || - battery_init() == 0)) { - batt_pres = BP_NO; - } - - batt_pres_prev = batt_pres; - return batt_pres; -} - diff --git a/board/rammus/board.c b/board/rammus/board.c deleted file mode 100644 index c4e32a9791..0000000000 --- a/board/rammus/board.c +++ /dev/null @@ -1,837 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Rammus board-specific configuration */ - -#include "adc.h" -#include "anx7447.h" -#include "bd99992gw.h" -#include "board_config.h" -#include "button.h" -#include "cbi_ssfc.h" -#include "charge_manager.h" -#include "charge_state.h" -#include "charge_ramp.h" -#include "charger.h" -#include "chipset.h" -#include "console.h" -#include "cros_board_info.h" -#include "driver/accelgyro_bmi_common.h" -#include "driver/accelgyro_icm_common.h" -#include "driver/accelgyro_icm426xx.h" -#include "driver/accel_bma2x2.h" -#include "driver/accel_kionix.h" -#include "driver/accel_kx022.h" -#include "driver/charger/isl923x.h" -#include "driver/tcpm/ps8xxx.h" -#include "driver/tcpm/tcpci.h" -#include "driver/tcpm/tcpm.h" -#include "driver/temp_sensor/bd99992gw.h" -#include "extpower.h" -#include "gpio.h" -#include "hooks.h" -#include "host_command.h" -#include "i2c.h" -#include "keyboard_scan.h" -#include "lid_switch.h" -#include "math_util.h" -#include "motion_lid.h" -#include "motion_sense.h" -#include "pi3usb9281.h" -#include "power.h" -#include "power_button.h" -#include "pwm.h" -#include "pwm_chip.h" -#include "spi.h" -#include "switch.h" -#include "system.h" -#include "tablet_mode.h" -#include "task.h" -#include "temp_sensor.h" -#include "timer.h" -#include "uart.h" -#include "usb_charge.h" -#include "usb_mux.h" -#include "usb_pd.h" -#include "usb_pd_tcpm.h" -#include "util.h" -#include "espi.h" - -#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args) -#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args) - -#define USB_PD_PORT_PS8751 1 -#define USB_PD_PORT_ANX7447 0 - -static void tcpc_alert_event(enum gpio_signal signal) -{ - int port = -1; - - switch (signal) { - case GPIO_USB_C0_PD_INT_ODL: - port = 0; - break; - case GPIO_USB_C1_PD_INT_ODL: - port = 1; - break; - default: - return; - } - - schedule_deferred_pd_interrupt(port); -} - -/* Set PD discharge whenever VBUS detection is high (i.e. below threshold). */ -static void vbus_discharge_handler(void) -{ - pd_set_vbus_discharge(0, gpio_get_level(GPIO_USB_C0_VBUS_DET_L)); - pd_set_vbus_discharge(1, gpio_get_level(GPIO_USB_C1_VBUS_DET_L)); -} -DECLARE_DEFERRED(vbus_discharge_handler); - -void vbus0_evt(enum gpio_signal signal) -{ - /* VBUS present GPIO is inverted */ - usb_charger_vbus_change(0, !gpio_get_level(signal)); - task_wake(TASK_ID_PD_C0); - hook_call_deferred(&vbus_discharge_handler_data, 0); -} - -void vbus1_evt(enum gpio_signal signal) -{ - /* VBUS present GPIO is inverted */ - usb_charger_vbus_change(1, !gpio_get_level(signal)); - task_wake(TASK_ID_PD_C1); - hook_call_deferred(&vbus_discharge_handler_data, 0); -} - -void usb0_evt(enum gpio_signal signal) -{ - task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12); -} - -void usb1_evt(enum gpio_signal signal) -{ - task_set_event(TASK_ID_USB_CHG_P1, USB_CHG_EVENT_BC12); -} - -#include "gpio_list.h" - -/* Hibernate wake configuration */ -const enum gpio_signal hibernate_wake_pins[] = { - GPIO_AC_PRESENT, - GPIO_LID_OPEN, - GPIO_POWER_BUTTON_L, -}; -const int hibernate_wake_pins_used = ARRAY_SIZE(hibernate_wake_pins); - -/* ADC channels */ -const struct adc_t adc_channels[] = { - /* Vbus sensing (10x voltage divider). */ - [ADC_VBUS] = {"VBUS", NPCX_ADC_CH2, ADC_MAX_VOLT*10, ADC_READ_MAX+1, 0}, - /* - * Adapter current output or battery charging/discharging current (uV) - * 18x amplification on charger side. - */ - [ADC_AMON_BMON] = {"AMON_BMON", NPCX_ADC_CH1, ADC_MAX_VOLT*1000/18, - ADC_READ_MAX+1, 0}, -}; -BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); - -/* I2C port map */ -const struct i2c_port_t i2c_ports[] = { - {"i2c_0_0", NPCX_I2C_PORT0_0, 400, GPIO_I2C0_0_SCL, GPIO_I2C0_0_SDA}, - {"i2c_0_1", NPCX_I2C_PORT0_1, 400, GPIO_I2C0_1_SCL, GPIO_I2C0_1_SDA}, - {"i2c_1", NPCX_I2C_PORT1, 100, GPIO_I2C1_SCL, GPIO_I2C1_SDA}, - {"i2c_2", NPCX_I2C_PORT2, 400, GPIO_I2C2_SCL, GPIO_I2C2_SDA}, - {"i2c_3", NPCX_I2C_PORT3, 400, GPIO_I2C3_SCL, GPIO_I2C3_SDA}, -}; -const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports); - -/* Charger Chips */ -const struct charger_config_t chg_chips[] = { - { - .i2c_port = I2C_PORT_CHARGER, - .i2c_addr_flags = ISL923X_ADDR_FLAGS, - .drv = &isl923x_drv, - }, -}; - -/* TCPC mux configuration */ -struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { - [USB_PD_PORT_PS8751] = { - .bus_type = EC_BUS_TYPE_I2C, - .i2c_info = { - .port = I2C_PORT_TCPC1, - .addr_flags = PS8751_I2C_ADDR1_FLAGS, - }, - .drv = &ps8xxx_tcpm_drv, - }, - [USB_PD_PORT_ANX7447] = { - .bus_type = EC_BUS_TYPE_I2C, - .i2c_info = { - .port = I2C_PORT_TCPC0, - /* Verified on v1.1 */ - .addr_flags = AN7447_TCPC3_I2C_ADDR_FLAGS, - }, - .drv = &anx7447_tcpm_drv, - }, -}; - -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - [USB_PD_PORT_PS8751] = { - .usb_port = USB_PD_PORT_PS8751, - .driver = &tcpci_tcpm_usb_mux_driver, - .hpd_update = &ps8xxx_tcpc_update_hpd_status, - }, - [USB_PD_PORT_ANX7447] = { - .usb_port = USB_PD_PORT_ANX7447, - .driver = &anx7447_usb_mux_driver, - .hpd_update = &anx7447_tcpc_update_hpd_status, - } -}; - -struct pi3usb9281_config pi3usb9281_chips[] = { - [USB_PD_PORT_PS8751] = { - .i2c_port = I2C_PORT_USB_CHARGER_1, - .mux_lock = NULL, - }, - [USB_PD_PORT_ANX7447] = { - .i2c_port = I2C_PORT_USB_CHARGER_0, - .mux_lock = NULL, - }, -}; -BUILD_ASSERT(ARRAY_SIZE(pi3usb9281_chips) == - CONFIG_BC12_DETECT_PI3USB9281_CHIP_COUNT); - -const int usb_port_enable[CONFIG_USB_PORT_POWER_SMART_PORT_COUNT] = { - GPIO_EN_USB_A_5V, -}; - -void board_reset_pd_mcu(void) -{ - /* Assert reset */ - gpio_set_level(GPIO_USB_PD_RST_C0, 1); - gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0); - msleep(1); - gpio_set_level(GPIO_USB_PD_RST_C0, 0); - gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1); - /* After TEST_R release, anx7447/3447 needs 2ms to finish eFuse - * loading. - */ - msleep(2); -} - -/* - * Read CBI data from EEPROM via i2c and remap the ps8751 i2c port - */ -static void ps8751_i2c_remap(void) -{ - uint32_t board_version; - - if (cbi_get_board_version(&board_version) != EC_SUCCESS || - board_version > 1) - return; - /* - * Due to b/118063849, we separate the ps8751 and anx3447 to - * different i2c bus which start from board_version >= 2. - * For the board_version <= 1, the ps8751 and anx3447 TCPC - * use the same i2c bus. Thus, reconfig the ps8751 i2c port - * to i2c_0_0. - */ - tcpc_config[USB_PD_PORT_PS8751].i2c_info.port = I2C_PORT_TCPC0; -} - -void board_tcpc_init(void) -{ - ps8751_i2c_remap(); - - /* Only reset TCPC if not sysjump */ - if (!system_jumped_late()) { - board_reset_pd_mcu(); - } - - /* Enable TCPC interrupts */ - gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); - - /* - * Initialize HPD to low; after sysjump SOC needs to see - * HPD pulse to enable video path - */ - for (int port = 0; port < CONFIG_USB_PD_PORT_MAX_COUNT; ++port) - usb_mux_hpd_update(port, USB_PD_MUX_HPD_LVL_DEASSERTED | - USB_PD_MUX_HPD_IRQ_DEASSERTED); -} -DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C+1); - -uint16_t tcpc_get_alert_status(void) -{ - uint16_t status = 0; - - if (!gpio_get_level(GPIO_USB_C0_PD_INT_ODL)) { - if (!gpio_get_level(GPIO_USB_PD_RST_C0)) - status |= PD_STATUS_TCPC_ALERT_0; - } - - if (!gpio_get_level(GPIO_USB_C1_PD_INT_ODL)) { - if (gpio_get_level(GPIO_USB_C1_PD_RST_ODL)) - status |= PD_STATUS_TCPC_ALERT_1; - } - - return status; -} - -const struct temp_sensor_t temp_sensors[] = { - {"Battery", TEMP_SENSOR_TYPE_BATTERY, charge_get_battery_temp, 0}, - - /* These BD99992GW temp sensors are only readable in S0 */ - {"Ambient", TEMP_SENSOR_TYPE_BOARD, bd99992gw_get_val, - BD99992GW_ADC_CHANNEL_SYSTHERM0}, - {"Charger", TEMP_SENSOR_TYPE_BOARD, bd99992gw_get_val, - BD99992GW_ADC_CHANNEL_SYSTHERM1}, - {"DRAM", TEMP_SENSOR_TYPE_BOARD, bd99992gw_get_val, - BD99992GW_ADC_CHANNEL_SYSTHERM2}, - {"eMMC", TEMP_SENSOR_TYPE_BOARD, bd99992gw_get_val, - BD99992GW_ADC_CHANNEL_SYSTHERM3}, -}; -BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT); - -/* - * Check if PMIC fault registers indicate VR fault. If yes, print out fault - * register info to console. Additionally, set panic reason so that the OS can - * check for fault register info by looking at offset 0x14(PWRSTAT1) and - * 0x15(PWRSTAT2) in cros ec panicinfo. - */ -static void board_report_pmic_fault(const char *str) -{ - int vrfault, pwrstat1 = 0, pwrstat2 = 0; - uint32_t info; - - /* RESETIRQ1 -- Bit 4: VRFAULT */ - if (i2c_read8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x8, &vrfault) - != EC_SUCCESS) - return; - - if (!(vrfault & BIT(4))) - return; - - /* VRFAULT has occurred, print VRFAULT status bits. */ - - /* PWRSTAT1 */ - i2c_read8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x16, &pwrstat1); - - /* PWRSTAT2 */ - i2c_read8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x17, &pwrstat2); - - CPRINTS("PMIC VRFAULT: %s", str); - CPRINTS("PMIC VRFAULT: PWRSTAT1=0x%02x PWRSTAT2=0x%02x", pwrstat1, - pwrstat2); - - /* Clear all faults -- Write 1 to clear. */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x8, BIT(4)); - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x16, pwrstat1); - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x17, pwrstat2); - - /* - * Status of the fault registers can be checked in the OS by looking at - * offset 0x14(PWRSTAT1) and 0x15(PWRSTAT2) in cros ec panicinfo. - */ - info = ((pwrstat2 & 0xFF) << 8) | (pwrstat1 & 0xFF); - panic_set_reason(PANIC_SW_PMIC_FAULT, info, 0); -} - -static void board_pmic_disable_slp_s0_vr_decay(void) -{ - /* - * VCCIOCNT: - * Bit 6 (0) - Disable decay of VCCIO on SLP_S0# assertion - * Bits 5:4 (11) - Nominal output voltage: 0.850V - * Bits 3:2 (10) - VR set to AUTO on SLP_S0# de-assertion - * Bits 1:0 (10) - VR set to AUTO operating mode - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x30, 0x3a); - - /* - * V18ACNT: - * Bits 7:6 (00) - Disable low power mode on SLP_S0# assertion - * Bits 5:4 (10) - Nominal voltage set to 1.8V - * Bits 3:2 (10) - VR set to AUTO on SLP_S0# de-assertion - * Bits 1:0 (10) - VR set to AUTO operating mode - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x34, 0x2a); - - /* - * V085ACNT: - * Bits 7:6 (00) - Disable low power mode on SLP_S0# assertion - * Bits 5:4 (11) - Nominal voltage 1.0V - * Bits 3:2 (10) - VR set to AUTO on SLP_S0# de-assertion - * Bits 1:0 (10) - VR set to AUTO operating mode - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x38, 0x3a); -} - -static void board_pmic_enable_slp_s0_vr_decay(void) -{ - /* - * VCCIOCNT: - * Bit 6 (1) - Enable decay of VCCIO on SLP_S0# assertion - * Bits 5:4 (11) - Nominal output voltage: 0.850V - * Bits 3:2 (10) - VR set to AUTO on SLP_S0# de-assertion - * Bits 1:0 (10) - VR set to AUTO operating mode - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x30, 0x7a); - - /* - * V18ACNT: - * Bits 7:6 (01) - Enable low power mode on SLP_S0# assertion - * Bits 5:4 (10) - Nominal voltage set to 1.8V - * Bits 3:2 (10) - VR set to AUTO on SLP_S0# de-assertion - * Bits 1:0 (10) - VR set to AUTO operating mode - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x34, 0x6a); - - /* - * V085ACNT: - * Bits 7:6 (01) - Enable low power mode on SLP_S0# assertion - * Bits 5:4 (11) - Nominal voltage 1.0V - * Bits 3:2 (10) - VR set to AUTO on SLP_S0# de-assertion - * Bits 1:0 (10) - VR set to AUTO operating mode - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x38, 0x7a); -} - -__override void power_board_handle_host_sleep_event( - enum host_sleep_event state) -{ - if (state == HOST_SLEEP_EVENT_S0IX_SUSPEND) - board_pmic_enable_slp_s0_vr_decay(); - else if (state == HOST_SLEEP_EVENT_S0IX_RESUME) - board_pmic_disable_slp_s0_vr_decay(); -} - -static void board_pmic_init(void) -{ - board_report_pmic_fault("SYSJUMP"); - - if (system_jumped_late()) - return; - - /* - * DISCHGCNT2 - enable 100 ohm discharge on - * V5A_DS3/V33A_DSW/V33A_PCH/V1.8A - */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x3d, 0x55); - /* DISCHGCNT3 - enable 100 ohm discharge on V1.8U_25U/V1.00A */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x3e, 0x44); - /* DISCHGCNT4 - enable 100 ohm discharge on v1.8S */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x3f, 0x04); - - board_pmic_disable_slp_s0_vr_decay(); - - /* VRMODECTRL - disable low-power mode for all rails */ - i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x3b, 0x1f); -} -DECLARE_DEFERRED(board_pmic_init); - -/* Initialize board. */ -static void board_init(void) -{ - /* - * This enables pull-down on F_DIO1 (SPI MISO), and F_DIO0 (SPI MOSI), - * whenever the EC is not doing SPI flash transactions. This avoids - * floating SPI buffer input (MISO), which causes power leakage (see - * b/64797021). - */ - NPCX_PUPD_EN1 |= BIT(NPCX_DEVPU1_F_SPI_PUD_EN); - - /* Provide AC status to the PCH */ - gpio_set_level(GPIO_PCH_ACPRESENT, extpower_is_present()); - - /* Enable sensors power supply */ - gpio_set_level(GPIO_EN_PP1800_DX_SENSOR, 1); - - /* Enable VBUS interrupt */ - gpio_enable_interrupt(GPIO_USB_C0_VBUS_DET_L); - gpio_enable_interrupt(GPIO_USB_C1_VBUS_DET_L); - - /* Enable pericom BC1.2 interrupts */ - gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_L); - gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_L); - - /* Enable Gyro interrupts */ - gpio_enable_interrupt(GPIO_BASE_SIXAXIS_INT_L); - - /* Initialize PMIC */ - hook_call_deferred(&board_pmic_init_data, 0); -} -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - -static void usb_charge_mode_init(void) -{ - /* - * By default, turn the charging off when system suspends. - * If system power on with connecting a USB device, - * the OS must send an event to EC to clear the - * inhibit_charging_in_suspend. - */ - usb_charge_set_mode(0, CONFIG_USB_PORT_POWER_SMART_DEFAULT_MODE, - USB_DISALLOW_SUSPEND_CHARGE); -} -DECLARE_HOOK(HOOK_INIT, usb_charge_mode_init, HOOK_PRIO_DEFAULT + 1); - -/** - * Buffer the AC present GPIO to the PCH. - */ -static void board_extpower(void) -{ - gpio_set_level(GPIO_PCH_ACPRESENT, extpower_is_present()); -} -DECLARE_HOOK(HOOK_AC_CHANGE, board_extpower, HOOK_PRIO_DEFAULT); - -/** - * Set active charge port -- only one port can be active at a time. - * - * @param charge_port Charge port to enable. - * - * Returns EC_SUCCESS if charge port is accepted and made active, - * EC_ERROR_* otherwise. - */ -int board_set_active_charge_port(int charge_port) -{ - /* charge port is a physical port */ - int is_real_port = (charge_port >= 0 && - charge_port < CONFIG_USB_PD_PORT_MAX_COUNT); - /* check if we are source VBUS on the port */ - int source = gpio_get_level(charge_port == 0 ? GPIO_USB_C0_5V_EN : - GPIO_USB_C1_5V_EN); - - if (is_real_port && source) { - CPRINTF("Skip enable p%d", charge_port); - return EC_ERROR_INVAL; - } - - CPRINTF("New chg p%d", charge_port); - - if (charge_port == CHARGE_PORT_NONE) { - /* Disable both ports */ - gpio_set_level(GPIO_EN_USB_C0_CHARGE_EC_L, 1); - gpio_set_level(GPIO_EN_USB_C1_CHARGE_EC_L, 1); - } else { - /* Make sure non-charging port is disabled */ - gpio_set_level(charge_port ? GPIO_EN_USB_C0_CHARGE_EC_L : - GPIO_EN_USB_C1_CHARGE_EC_L, 1); - /* Enable charging port */ - gpio_set_level(charge_port ? GPIO_EN_USB_C1_CHARGE_EC_L : - GPIO_EN_USB_C0_CHARGE_EC_L, 0); - } - - 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."); - uart_flush_output(); - - /* Trigger PMIC shutdown. */ - if (i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992_FLAGS, 0x49, 0x01)) { - /* - * If we can't tell the PMIC to shutdown, instead reset - * and don't start the AP. Hopefully we'll be able to - * communicate with the PMIC next time. - */ - CPRINTS("PMIC i2c failed."); - system_reset(SYSTEM_RESET_LEAVE_AP_OFF); - } - - /* Await shutdown. */ - while (1) - ; -} - -const struct pwm_t pwm_channels[] = { - /* - * 1.2kHz is a multiple of both 50 and 60. So a video recorder - * (generally designed to ignore either 50 or 60 Hz flicker) will not - * alias with refresh rate. - */ - [PWM_CH_KBLIGHT] = { 4, 0, 1200 }, -}; -BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); - -/* Lid Sensor mutex */ -static struct mutex g_lid_mutex; -static struct mutex g_base_mutex; - -static struct bmi_drv_data_t g_bmi160_data; -static struct icm_drv_data_t g_icm426xx_data; - -/* private data */ -static struct accelgyro_saved_data_t g_bma255_data; -static struct kionix_accel_data g_kx022_data; - -/* Matrix to rotate accelrator into standard reference frame */ -const mat33_fp_t base_standard_ref = { - { FLOAT_TO_FP(1), 0, 0 }, - { 0, FLOAT_TO_FP(-1), 0 }, - { 0, 0, FLOAT_TO_FP(-1) } -}; - -const mat33_fp_t base_standard_ref_icm = { - { 0, FLOAT_TO_FP(1), 0 }, - { FLOAT_TO_FP(1), 0, 0 }, - { 0, 0, FLOAT_TO_FP(-1) } -}; - -const mat33_fp_t lid_standard_ref = { - { FLOAT_TO_FP(-1), 0, 0 }, - { 0, FLOAT_TO_FP(1), 0 }, - { 0, 0, FLOAT_TO_FP(-1) } -}; - -struct motion_sensor_t base_accel_icm = { - .name = "Base Accel", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_ICM426XX, - .type = MOTIONSENSE_TYPE_ACCEL, - .location = MOTIONSENSE_LOC_BASE, - .drv = &icm426xx_drv, - .mutex = &g_base_mutex, - .drv_data = &g_icm426xx_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = ICM426XX_ADDR0_FLAGS, - .rot_standard_ref = &base_standard_ref_icm, - .min_frequency = ICM426XX_ACCEL_MIN_FREQ, - .max_frequency = ICM426XX_ACCEL_MAX_FREQ, - .default_range = 4, /* g, to meet CDD 7.3.1/C-1-4 reqs */ - .config = { - /* EC use accel for angle detection */ - [SENSOR_CONFIG_EC_S0] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 100 * MSEC, - }, - /* Sensor on in S3 */ - [SENSOR_CONFIG_EC_S3] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 0, - }, - }, -}; - -struct motion_sensor_t base_gyro_icm = { - .name = "Base Gyro", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_ICM426XX, - .type = MOTIONSENSE_TYPE_GYRO, - .location = MOTIONSENSE_LOC_BASE, - .drv = &icm426xx_drv, - .mutex = &g_base_mutex, - .drv_data = &g_icm426xx_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = ICM426XX_ADDR0_FLAGS, - .default_range = 1000, /* dps */ - .rot_standard_ref = &base_standard_ref_icm, - .min_frequency = ICM426XX_GYRO_MIN_FREQ, - .max_frequency = ICM426XX_GYRO_MAX_FREQ, -}; - -struct motion_sensor_t lid_accel_kx022 = { - .name = "Lid Accel", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_KX022, - .type = MOTIONSENSE_TYPE_ACCEL, - .location = MOTIONSENSE_LOC_LID, - .drv = &kionix_accel_drv, - .mutex = &g_lid_mutex, - .drv_data = &g_kx022_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = KX022_ADDR1_FLAGS, - .rot_standard_ref = &lid_standard_ref, - .min_frequency = KX022_ACCEL_MIN_FREQ, - .max_frequency = KX022_ACCEL_MAX_FREQ, - .default_range = 2, /* g, to support lid angle calculation. */ - .config = { - /* EC use accel for angle detection */ - [SENSOR_CONFIG_EC_S0] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 0, - }, - /* Sensor on in S3 */ - [SENSOR_CONFIG_EC_S3] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 0, - }, - }, -}; - -struct motion_sensor_t motion_sensors[] = { - [LID_ACCEL] = { - .name = "Lid Accel", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_BMA255, - .type = MOTIONSENSE_TYPE_ACCEL, - .location = MOTIONSENSE_LOC_LID, - .drv = &bma2x2_accel_drv, - .mutex = &g_lid_mutex, - .drv_data = &g_bma255_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = BMA2x2_I2C_ADDR1_FLAGS, - .rot_standard_ref = &lid_standard_ref, - .min_frequency = BMA255_ACCEL_MIN_FREQ, - .max_frequency = BMA255_ACCEL_MAX_FREQ, - .default_range = 2, /* g, to support lid angle calculation. */ - .config = { - /* EC use accel for angle detection */ - [SENSOR_CONFIG_EC_S0] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 0, - }, - /* Sensor on in S3 */ - [SENSOR_CONFIG_EC_S3] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 0, - }, - }, - }, - [BASE_ACCEL] = { - .name = "Base Accel", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_BMI160, - .type = MOTIONSENSE_TYPE_ACCEL, - .location = MOTIONSENSE_LOC_BASE, - .drv = &bmi160_drv, - .mutex = &g_base_mutex, - .drv_data = &g_bmi160_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = BMI160_ADDR0_FLAGS, - .rot_standard_ref = &base_standard_ref, - .min_frequency = BMI_ACCEL_MIN_FREQ, - .max_frequency = BMI_ACCEL_MAX_FREQ, - .default_range = 4, /* g, to meet CDD 7.3.1/C-1-4 reqs */ - .config = { - /* EC use accel for angle detection */ - [SENSOR_CONFIG_EC_S0] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 100 * MSEC, - }, - /* Sensor on in S3 */ - [SENSOR_CONFIG_EC_S3] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 0, - }, - }, - }, - [BASE_GYRO] = { - .name = "Base Gyro", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_BMI160, - .type = MOTIONSENSE_TYPE_GYRO, - .location = MOTIONSENSE_LOC_BASE, - .drv = &bmi160_drv, - .mutex = &g_base_mutex, - .drv_data = &g_bmi160_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = BMI160_ADDR0_FLAGS, - .default_range = 1000, /* dps */ - .rot_standard_ref = &base_standard_ref, - .min_frequency = BMI_GYRO_MIN_FREQ, - .max_frequency = BMI_GYRO_MAX_FREQ, - }, -}; -const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); - -void motion_interrupt(enum gpio_signal signal) -{ - if (get_cbi_ssfc_base_sensor() == SSFC_SENSOR_BASE_ICM426XX) - icm426xx_interrupt(signal); - else - bmi160_interrupt(signal); -} - -static void board_detect_motionsense(void) -{ - if (get_cbi_ssfc_lid_sensor() == SSFC_SENSOR_LID_KX022) { - motion_sensors[LID_ACCEL] = lid_accel_kx022; - ccprints("LID_ACCEL is KX022"); - } else - ccprints("LID_ACCEL is BMA253"); - - if (get_cbi_ssfc_base_sensor() == SSFC_SENSOR_BASE_ICM426XX) { - motion_sensors[BASE_ACCEL] = base_accel_icm; - motion_sensors[BASE_GYRO] = base_gyro_icm; - ccprints("BASE_ACCEL is ICM426XX"); - } else - ccprints("BASE_ACCEL is BMI160"); -} -DECLARE_HOOK(HOOK_INIT, board_detect_motionsense, HOOK_PRIO_DEFAULT); - -/* Enable or disable input devices, based on chipset state and tablet mode */ -__override void lid_angle_peripheral_enable(int enable) -{ - /* If the lid is in 360 position, ignore the lid angle, - * which might be faulty. Disable keyboard. - */ - if (tablet_get_mode() || chipset_in_state(CHIPSET_STATE_ANY_OFF)) - enable = 0; - keyboard_scan_enable(enable, KB_SCAN_DISABLE_LID_ANGLE); -} - -static void board_chipset_reset(void) -{ - board_report_pmic_fault("CHIPSET RESET"); -} -DECLARE_HOOK(HOOK_CHIPSET_RESET, board_chipset_reset, HOOK_PRIO_DEFAULT); - -/* Called on AP S3 -> S0 transition */ -static void board_chipset_resume(void) -{ - gpio_set_level(GPIO_ENABLE_BACKLIGHT, 1); - gpio_set_level(GPIO_KB_BL_EN, 1); -} -DECLARE_HOOK(HOOK_CHIPSET_RESUME, board_chipset_resume, HOOK_PRIO_DEFAULT); - -/* Called on AP S0 -> S3 transition */ -static void board_chipset_suspend(void) -{ - gpio_set_level(GPIO_ENABLE_BACKLIGHT, 0); - gpio_set_level(GPIO_KB_BL_EN, 0); -} -DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, board_chipset_suspend, HOOK_PRIO_DEFAULT); - -/* Called on AP S5 -> S3 transition */ -static void board_chipset_startup(void) -{ - gpio_set_level(GPIO_EN_PP3300_TRACKPAD, 1); -} -DECLARE_HOOK(HOOK_CHIPSET_STARTUP, board_chipset_startup, HOOK_PRIO_DEFAULT); - -/* Called on AP S3 -> S5 transition */ -static void board_chipset_shutdown(void) -{ - gpio_set_level(GPIO_EN_PP3300_TRACKPAD, 0); -} -DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, board_chipset_shutdown, HOOK_PRIO_DEFAULT); diff --git a/board/rammus/board.h b/board/rammus/board.h deleted file mode 100644 index dc2ae71de8..0000000000 --- a/board/rammus/board.h +++ /dev/null @@ -1,282 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Rammus board configuration */ - -#ifndef __CROS_EC_BOARD_H -#define __CROS_EC_BOARD_H - -/* EC */ -#define CONFIG_ADC -#define CONFIG_BACKLIGHT_LID -#define CONFIG_BOARD_VERSION_CBI -#define CONFIG_BOARD_FORCE_RESET_PIN -#define CONFIG_CRC8 -#define CONFIG_CBI_EEPROM -#define CONFIG_DPTF -#define CONFIG_FLASH_SIZE_BYTES 0x80000 -#define CONFIG_FPU -#define CONFIG_I2C -#define CONFIG_I2C_CONTROLLER -#define CONFIG_KEYBOARD_COL2_INVERTED -#undef CONFIG_KEYBOARD_VIVALDI -#define CONFIG_KEYBOARD_PROTOCOL_8042 -#define CONFIG_LED_COMMON -#define CONFIG_LID_SWITCH -#define CONFIG_LOW_POWER_IDLE -#define CONFIG_LTO -#define CONFIG_CHIP_PANIC_BACKUP -#define CONFIG_PWM -#define CONFIG_PWM_KBLIGHT -#define CONFIG_SOFTWARE_PANIC -#define CONFIG_SPI_FLASH_REGS -#define CONFIG_SPI_FLASH_W25X40 -#define CONFIG_VBOOT_HASH -#define CONFIG_SHA256_UNROLLED -#define CONFIG_VOLUME_BUTTONS -#define CONFIG_VSTORE -#define CONFIG_VSTORE_SLOT_COUNT 1 -#define CONFIG_WATCHDOG_HELP -#define CONFIG_WIRELESS -#define CONFIG_WIRELESS_SUSPEND \ - (EC_WIRELESS_SWITCH_WLAN | EC_WIRELESS_SWITCH_WLAN_POWER) -#define WIRELESS_GPIO_WLAN GPIO_WLAN_OFF_L -#define WIRELESS_GPIO_WLAN_POWER GPIO_EN_PP3300_DX_WLAN - -/* EC console commands */ -#define CONFIG_CMD_ACCELS -#define CONFIG_CMD_ACCEL_INFO -#define CONFIG_CMD_BUTTON - -/* Port80 */ -#undef CONFIG_PORT80_HISTORY_LEN -#define CONFIG_PORT80_HISTORY_LEN 256 - -/* SOC */ -#define CONFIG_CHIPSET_SKYLAKE -#define CONFIG_CHIPSET_HAS_PLATFORM_PMIC_RESET -#define CONFIG_CHIPSET_RESET_HOOK -#define CONFIG_HOSTCMD_ESPI -#define CONFIG_HOSTCMD_ESPI_VW_SLP_S3 -#define CONFIG_HOSTCMD_ESPI_VW_SLP_S4 -#define CONFIG_HOSTCMD_FLASH_SPI_INFO - -/* Battery */ -#define CONFIG_BATTERY_CUT_OFF -#define CONFIG_BATTERY_HW_PRESENT_CUSTOM -#define CONFIG_BATTERY_DEVICE_CHEMISTRY "LION" -#define CONFIG_BATTERY_SMART -#define CONFIG_BATTERY_LEVEL_NEAR_FULL 94 - -/* Charger */ -#define CONFIG_CHARGE_MANAGER -#define CONFIG_CHARGE_RAMP_HW /* This, or just RAMP? */ - -#define CONFIG_CHARGER -#define CONFIG_CHARGER_ISL9238 -#define CONFIG_CHARGER_DISCHARGE_ON_AC -#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_CMD_CHARGER_ADC_AMON_BMON -#define CONFIG_HOSTCMD_PD_CONTROL -#define CONFIG_EXTPOWER_GPIO -#undef CONFIG_EXTPOWER_DEBOUNCE_MS -#define CONFIG_EXTPOWER_DEBOUNCE_MS 1000 -#define CONFIG_POWER_BUTTON -#define CONFIG_POWER_BUTTON_X86 -#define CONFIG_POWER_COMMON -#define CONFIG_POWER_SIGNAL_INTERRUPT_STORM_DETECT_THRESHOLD 30 -#define CONFIG_POWER_S0IX -#define CONFIG_POWER_TRACK_HOST_SLEEP_STATE - -/* USB-A config */ -#define CONFIG_USB_PORT_POWER_SMART -#define CONFIG_USB_PORT_POWER_SMART_CDP_SDP_ONLY -#define CONFIG_USB_PORT_POWER_SMART_DEFAULT_MODE USB_CHARGE_MODE_CDP -#define CONFIG_USB_PORT_POWER_SMART_INVERTED -#undef CONFIG_USB_PORT_POWER_SMART_PORT_COUNT -#define CONFIG_USB_PORT_POWER_SMART_PORT_COUNT 1 -#define GPIO_USB1_ILIM_SEL GPIO_USB_A_CHARGE_EN_L - -/* Sensor */ -#define CONFIG_TEMP_SENSOR -#define CONFIG_TEMP_SENSOR_BD99992GW -#define CONFIG_THERMISTOR_NCP15WB - -#define CONFIG_MKBP_EVENT -#define CONFIG_MKBP_USE_HOST_EVENT -#define CONFIG_ACCELGYRO_BMI160 -#define CONFIG_ACCELGYRO_BMI160_INT_EVENT \ - TASK_EVENT_MOTION_SENSOR_INTERRUPT(BASE_ACCEL) -#define CONFIG_ACCELGYRO_ICM426XX -#define CONFIG_ACCELGYRO_ICM426XX_INT_EVENT \ - TASK_EVENT_MOTION_SENSOR_INTERRUPT(BASE_ACCEL) -#define CONFIG_ACCELGYRO_BMI160_INT2_OUTPUT -#define CONFIG_ACCEL_BMA255 -#define CONFIG_ACCEL_KX022 -#define CONFIG_ACCEL_INTERRUPTS -#define CONFIG_LID_ANGLE -#define CONFIG_LID_ANGLE_SENSOR_BASE BASE_ACCEL -#define CONFIG_LID_ANGLE_SENSOR_LID LID_ACCEL -#define CONFIG_LID_ANGLE_UPDATE - -#undef CONFIG_SENSOR_TIGHT_TIMESTAMPS - -/* Enable sensor fifo, must also define the _SIZE and _THRES */ -#define CONFIG_ACCEL_FIFO -/* FIFO size is in power of 2. */ -#define CONFIG_ACCEL_FIFO_SIZE 512 -/* Depends on how fast the AP boots and typical ODRs */ -#define CONFIG_ACCEL_FIFO_THRES (CONFIG_ACCEL_FIFO_SIZE / 3) - -#undef CONFIG_UART_TX_BUF_SIZE -#define CONFIG_UART_TX_BUF_SIZE 1024 - -#define CONFIG_TABLET_MODE -#define CONFIG_TABLET_MODE_SWITCH -#define CONFIG_GMR_TABLET_MODE -#define GMR_TABLET_MODE_GPIO_L GPIO_TABLET_MODE - -/* USB */ -#define CONFIG_USB_CHARGER -#define CONFIG_USB_PD_ALT_MODE -#define CONFIG_USB_PD_ALT_MODE_DFP -#define CONFIG_USB_PD_COMM_LOCKED -#define CONFIG_USB_PD_DISCHARGE_TCPC -#define CONFIG_USB_PD_DUAL_ROLE -#define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE -#define CONFIG_USB_PD_LOGGING -#define CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT TYPEC_RP_3A0 -#define CONFIG_USB_PD_PORT_MAX_COUNT 2 -#define CONFIG_USB_PD_VBUS_DETECT_GPIO -#define CONFIG_USB_PD_TCPC_LOW_POWER -/* TODO(b:121222079): Remove the config before FSI */ -#define CONFIG_USB_PD_TCPC_RUNTIME_CONFIG -#define CONFIG_USB_PD_TCPM_MUX -#define CONFIG_USB_PD_TCPM_TCPCI -#define CONFIG_USB_PD_TCPM_ANX7447 -#define CONFIG_USB_PD_TCPM_ANX7447_OCM_ERASE_COMMAND -#define CONFIG_USB_PD_TCPM_PS8751 -#define CONFIG_USB_PD_TRY_SRC -#define CONFIG_USB_POWER_DELIVERY -#define CONFIG_USB_PD_TCPMV1 -#define CONFIG_USBC_SS_MUX -#define CONFIG_USBC_SS_MUX_DFP_ONLY -#define CONFIG_USBC_VCONN -#define CONFIG_USBC_VCONN_SWAP - -/* BC 1.2 charger */ -#define CONFIG_BC12_DETECT_PI3USB9281 -#define CONFIG_BC12_DETECT_PI3USB9281_CHIP_COUNT 2 - -/* Optional feature to configure npcx chip */ -#define NPCX_UART_MODULE2 1 /* 1:GPIO64/65 as UART */ -#define NPCX_JTAG_MODULE2 0 /* 0:GPIO21/17/16/20 as JTAG */ -#define NPCX_TACH_SEL2 0 /* 0:GPIO40/73 as TACH */ - -/* I2C ports */ -#define I2C_PORT_TCPC0 NPCX_I2C_PORT0_0 -#define I2C_PORT_TCPC1 NPCX_I2C_PORT0_1 -#define I2C_PORT_USB_CHARGER_1 NPCX_I2C_PORT0_1 -#define I2C_PORT_USB_CHARGER_0 NPCX_I2C_PORT1 -#define I2C_PORT_CHARGER NPCX_I2C_PORT1 -#define I2C_PORT_EEPROM NPCX_I2C_PORT0_0 -#define I2C_PORT_BATTERY NPCX_I2C_PORT1 -#define I2C_PORT_PMIC NPCX_I2C_PORT2 -#define I2C_PORT_MP2949 NPCX_I2C_PORT2 -#define I2C_PORT_GYRO NPCX_I2C_PORT3 -#define I2C_PORT_ACCEL I2C_PORT_GYRO -#define I2C_PORT_THERMAL I2C_PORT_PMIC - -/* I2C addresses */ -#define I2C_ADDR_BD99992_FLAGS 0x30 -#define I2C_ADDR_MP2949_FLAGS 0x20 -#define I2C_ADDR_EEPROM_FLAGS 0x50 - -/* Rename GPIOs */ -#define GPIO_PCH_SLP_S0_L GPIO_SLP_S0_L -#define GPIO_PCH_SLP_SUS_L GPIO_SLP_SUS_L_PCH -#define GPIO_RSMRST_L_PGOOD GPIO_ROP_EC_RSMRST_L -#define GPIO_PMIC_DPWROK GPIO_ROP_DSW_PWROK -#define GPIO_POWER_BUTTON_L GPIO_PWR_BTN_ODL -#define GPIO_VOLUME_DOWN_L GPIO_VOLDN_BTN -#define GPIO_VOLUME_UP_L GPIO_VOLUP_BTN -#define GPIO_AC_PRESENT GPIO_ROP_EC_ACOK -#define GPIO_ENABLE_BACKLIGHT GPIO_BL_DISABLE_L -#define GPIO_CPU_PROCHOT GPIO_PCH_PROCHOT -#define GPIO_PCH_PWRBTN_L GPIO_PCH_PWR_BTN_L -#define GPIO_EC_PLATFORM_RST GPIO_PLATFORM_RST -#define GPIO_PMIC_SLP_SUS_L GPIO_SLP_SUS_L_PMIC -#define GPIO_USB_C0_5V_EN GPIO_EN_USB_C0_5V_OUT -#define GPIO_USB_C1_5V_EN GPIO_EN_USB_C1_5V_OUT - -#ifndef __ASSEMBLER__ - -#include "gpio_signal.h" -#include "registers.h" - -enum temp_sensor_id { - TEMP_SENSOR_BATTERY, /* Smart Battery Temperature */ - TEMP_SENSOR_AMBIENT, /* BD99992GW SYSTHERM0 */ - TEMP_SENSOR_CHARGER, /* BD99992GW SYSTHERM1 */ - TEMP_SENSOR_DRAM, /* BD99992GW SYSTHERM2 */ - TEMP_SENSOR_EMMC, /* BD99992GW SYSTHERM3 */ - TEMP_SENSOR_COUNT -}; - -/* - * Motion sensors: - * When reading through IO memory is set up for sensors (LPC is used), - * the first 2 entries must be accelerometers, then gyroscope. - * For BMI160, accel, gyro and compass sensors must be next to each other. - */ -enum sensor_id { - LID_ACCEL = 0, - BASE_ACCEL, - BASE_GYRO, - SENSOR_COUNT, -}; - -enum adc_channel { - ADC_VBUS, - ADC_AMON_BMON, - ADC_CH_COUNT -}; - -enum pwm_channel { - PWM_CH_KBLIGHT, - /* Number of PWM channels */ - PWM_CH_COUNT -}; - -/* TODO(crosbug.com/p/61098): Verify the numbers below. */ -/* - * delay to turn on the power supply max is ~16ms. - * delay to turn off the power supply max is about ~180ms. - */ -#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ -#define PD_POWER_SUPPLY_TURN_OFF_DELAY 250000 /* us */ - -/* delay to turn on/off vconn */ - -/* Define typical operating power and max power */ -#define PD_OPERATING_POWER_MW 15000 -#define PD_MAX_POWER_MW 45000 -#define PD_MAX_CURRENT_MA 3000 -#define PD_MAX_VOLTAGE_MV 20000 - -/* Board specific handlers */ -void board_reset_pd_mcu(void); -void board_set_tcpc_power_mode(int port, int mode); -void motion_interrupt(enum gpio_signal signal); - -/* Sensors without hardware FIFO are in forced mode */ -#define CONFIG_ACCEL_FORCE_MODE_MASK BIT(LID_ACCEL) - -#endif /* !__ASSEMBLER__ */ - -#endif /* __CROS_EC_BOARD_H */ diff --git a/board/rammus/build.mk b/board/rammus/build.mk deleted file mode 100644 index 5a9cabdcae..0000000000 --- a/board/rammus/build.mk +++ /dev/null @@ -1,15 +0,0 @@ -# -*- makefile -*- -# Copyright 2018 The Chromium OS Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -# -# Board specific files build -# - -CHIP:=npcx -CHIP_VARIANT:=npcx5m6g - -board-y=board.o cbi_ssfc.o -board-$(CONFIG_BATTERY_SMART)+=battery.o -board-$(CONFIG_LED_COMMON)+=led.o -board-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o diff --git a/board/rammus/cbi_ssfc.c b/board/rammus/cbi_ssfc.c deleted file mode 100644 index e1f6fa4bd2..0000000000 --- a/board/rammus/cbi_ssfc.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "cbi_ssfc.h" -#include "common.h" -#include "console.h" -#include "cros_board_info.h" -#include "hooks.h" - -#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args) - -/* Cache SSFC on init since we don't expect it to change in runtime */ -static union rammus_cbi_ssfc cached_ssfc; -BUILD_ASSERT(sizeof(cached_ssfc) == sizeof(uint32_t)); - -static void cbi_ssfc_init(void) -{ - if (cbi_get_ssfc(&cached_ssfc.raw_value) != EC_SUCCESS) - /* Default to 0 when CBI isn't populated */ - cached_ssfc.raw_value = 0; - - CPRINTS("Read CBI SSFC : 0x%04X", cached_ssfc.raw_value); -} -DECLARE_HOOK(HOOK_INIT, cbi_ssfc_init, HOOK_PRIO_INIT_I2C+1); - -enum ec_ssfc_lid_sensor get_cbi_ssfc_lid_sensor(void) -{ - return cached_ssfc.lid_sensor; -} - -enum ec_ssfc_base_sensor get_cbi_ssfc_base_sensor(void) -{ - return cached_ssfc.base_sensor; -} diff --git a/board/rammus/cbi_ssfc.h b/board/rammus/cbi_ssfc.h deleted file mode 100644 index 2ca20f2376..0000000000 --- a/board/rammus/cbi_ssfc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef _RAMMUS_CBI_SSFC__H_ -#define _RAMMUS_CBI_SSFC__H_ - -#include "stdint.h" - -/**************************************************************************** - * Rammus CBI Second Source Factory Cache - */ - -/* - * Lid Sensor (Bits 2-0) - */ -enum ec_ssfc_lid_sensor { - SSFC_SENSOR_LID_DEFAULT = 0, - SSFC_SENSOR_LID_BMA255 = 1, - SSFC_SENSOR_LID_KX022 = 2 -}; - -/* - * Base Sensor (Bits 5-3) - */ -enum ec_ssfc_base_sensor { - SSFC_SENSOR_BASE_DEFAULT = 0, - SSFC_SENSOR_BASE_BMI160 = 1, - SSFC_SENSOR_BASE_ICM426XX = 2, -}; - -union rammus_cbi_ssfc { - struct { - enum ec_ssfc_lid_sensor lid_sensor : 3; - enum ec_ssfc_base_sensor base_sensor : 3; - uint32_t reserved_2 : 26; - }; - uint32_t raw_value; -}; - -/** - * Get the Lid sensor type from SSFC_CONFIG. - * - * @return the Lid sensor board type. - */ -enum ec_ssfc_lid_sensor get_cbi_ssfc_lid_sensor(void); - -/** - * Get the base sensor type form SSFC_CONFIG. - * - * @return the base sensor board type. - */ -enum ec_ssfc_base_sensor get_cbi_ssfc_base_sensor(void); - -#endif /* _RAMMUS_CBI_SSFC__H_ */ diff --git a/board/rammus/ec.tasklist b/board/rammus/ec.tasklist deleted file mode 100644 index f708a41386..0000000000 --- a/board/rammus/ec.tasklist +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* - * See CONFIG_TASK_LIST in config.h for details. - */ - -#define CONFIG_TASK_LIST \ - TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(USB_CHG_P1, usb_charger_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \ - TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_NOTEST(KEYPROTO, keyboard_protocol_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(HOSTCMD, host_command_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_INT_C1, pd_interrupt_handler_task, 1, TASK_STACK_SIZE) diff --git a/board/rammus/gpio.inc b/board/rammus/gpio.inc deleted file mode 100644 index 1e05cbe9a7..0000000000 --- a/board/rammus/gpio.inc +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- mode:c -*- - * - * Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Declare symbolic names for all the GPIOs that we care about. - * Note: Those with interrupt handlers must be declared first. */ - -GPIO_INT(USB_C0_PD_INT_ODL, PIN(3, 7), GPIO_INT_FALLING, tcpc_alert_event) -GPIO_INT(USB_C1_PD_INT_ODL, PIN(C, 5), GPIO_INT_FALLING | GPIO_PULL_UP, tcpc_alert_event) -#ifdef CONFIG_POWER_S0IX -GPIO_INT(SLP_S0_L, PIN(7, 5), GPIO_INT_BOTH, power_signal_interrupt) -#endif -GPIO_INT(SLP_SUS_L_PCH, PIN(6, 2), GPIO_INT_BOTH, power_signal_interrupt) -GPIO_INT(ROP_EC_RSMRST_L, PIN(B, 0), GPIO_INT_BOTH, power_signal_interrupt) -GPIO_INT(ROP_DSW_PWROK, PIN(C, 7), GPIO_INT_BOTH, power_signal_interrupt) -GPIO_INT(PWR_BTN_ODL, PIN(0, 4), GPIO_INT_BOTH | GPIO_PULL_UP, power_button_interrupt) -GPIO_INT(LID_OPEN, PIN(6, 7), GPIO_INT_BOTH, lid_interrupt) -GPIO_INT(VOLDN_BTN, PIN(8, 3), GPIO_INT_BOTH, button_interrupt) -GPIO_INT(VOLUP_BTN, PIN(3, 6), GPIO_INT_BOTH, button_interrupt) -GPIO_INT(WP_L, PIN(4, 0), GPIO_INT_BOTH, switch_interrupt) -GPIO_INT(ROP_EC_ACOK, PIN(C, 1), GPIO_INT_BOTH, extpower_interrupt) -GPIO_INT(USB_C0_VBUS_DET_L, PIN(9, 3), GPIO_INT_BOTH | GPIO_PULL_UP, vbus0_evt) -GPIO_INT(USB_C1_VBUS_DET_L, PIN(9, 7), GPIO_INT_BOTH | GPIO_PULL_UP, vbus1_evt) -GPIO_INT(USB_C0_BC12_INT_L, PIN(D, 3), GPIO_INT_FALLING, usb0_evt) -GPIO_INT(USB_C1_BC12_INT_L, PIN(3, 3), GPIO_INT_FALLING, usb1_evt) -GPIO_INT(BASE_SIXAXIS_INT_L, PIN(7, 3), GPIO_INT_FALLING | GPIO_SEL_1P8V, motion_interrupt) -GPIO_INT(TABLET_MODE, PIN(C, 6), GPIO_INT_BOTH, gmr_tablet_switch_isr) - -GPIO(EN_PP3300_TRACKPAD, PIN(4, 5), GPIO_OUT_LOW) /* Enable TouchPad */ -GPIO(PCH_RTCRST, PIN(8, 2), GPIO_OUT_LOW) /* RTCRST# to SOC */ -GPIO(BL_DISABLE_L, PIN(5, 6), GPIO_OUT_LOW) /* Enable Backlight */ -GPIO(WLAN_OFF_L, PIN(7, 2), GPIO_OUT_LOW) /* Disable WLAN */ -GPIO(EN_PP3300_DX_WLAN, PIN(A, 7), GPIO_OUT_LOW) /* Enable WLAN 3.3V Power */ -GPIO(PCH_PROCHOT, PIN(8, 1), GPIO_OUT_HIGH) /* PROCHOT# to SOC */ -GPIO(PCH_ACPRESENT, PIN(5, 0), GPIO_ODR_LOW) /* ACOK to SOC */ -GPIO(PCH_WAKE_L, PIN(A, 3), GPIO_ODR_HIGH) /* Wake SOC */ -GPIO(PCH_RSMRST_L, PIN(7, 0), GPIO_OUT_LOW) /* RSMRST# to SOC */ -GPIO(PCH_PWR_BTN_L, PIN(C, 4), GPIO_ODR_HIGH) /* Power Button to SOC */ -GPIO(PLATFORM_RST, PIN(A, 6), GPIO_OUT_LOW) /* EC Reset to LDO_EN */ -GPIO(SYS_RESET_L, PIN(6, 1), GPIO_ODR_HIGH) /* Cold Reset to SOC */ -GPIO(SLP_SUS_L_PMIC, PIN(8, 5), GPIO_OUT_LOW) /* SLP_SUS# to PMIC */ -GPIO(BATT_PRES_L, PIN(3, 4), GPIO_INPUT) /* Battery Present */ -GPIO(CCD_MODE_ODL, PIN(6, 3), GPIO_INPUT) /* Case Closed Debug Mode */ -GPIO(ENTERING_RW, PIN(7, 6), GPIO_OUTPUT) /* EC Entering RW */ -GPIO(ROP_EC_INT_L, PIN(6, 0), GPIO_INPUT) /* PMIC interrupt */ -GPIO(KB_BL_EN, PIN(7, 1), GPIO_OUT_LOW) /* Keyboard backlight enable */ -#ifndef CONFIG_POWER_S0IX -GPIO(SLP_S0_L, PIN(7, 5), GPIO_INPUT) -#endif - -/* Sensor Power */ -GPIO(EN_PP1800_DX_SENSOR, PIN(E, 7), GPIO_OUT_LOW) - -/* Reserved, no function */ -GPIO(EN_PP3300_USB_PD, PIN(0, 1), GPIO_INPUT) -/* Reserved, output low to disable Board ID ADC by default */ -GPIO(BRD_ID_EN, PIN(0, 2), GPIO_OUT_LOW) /* Enable for board ID ADC */ -/* Reserved, for the lid accelerator interrupt */ -GPIO(LID_ACCEL_INT_L, PIN(D, 2), GPIO_INPUT | GPIO_SEL_1P8V | GPIO_PULL_UP) /* LID Accelerator interrupt */ -/* Reserved, changing touchpad interrupt behavior for wakeup */ -GPIO(TP_INT_CONN, PIN(C, 2), GPIO_INPUT) /* Touchpad interrupt */ -/* Reserved, output low to enable touchpad interrupt by default */ -GPIO(TP_INT_EN, PIN(A, 1), GPIO_OUT_LOW) /* Enable Touchpad interrupt */ - -/* I2C pins - these will be reconfigured for alternate function below */ -GPIO(I2C0_0_SCL, PIN(B, 5), GPIO_INPUT) /* EC_I2C0_0_USBC_3V3_SCL */ -GPIO(I2C0_0_SDA, PIN(B, 4), GPIO_INPUT) /* EC_I2C0_0_USBC_3V3_SDA */ -GPIO(I2C0_1_SCL, PIN(B, 3), GPIO_INPUT) /* EC_I2C0_1_USBC_3V3_SCL */ -GPIO(I2C0_1_SDA, PIN(B, 2), GPIO_INPUT) /* EC_I2C0_1_USBC_3V3_SDA */ -GPIO(I2C1_SCL, PIN(9, 0), GPIO_INPUT) /* EC_I2C1_3V3_SCL */ -GPIO(I2C1_SDA, PIN(8, 7), GPIO_INPUT) /* EC_I2C1_3V3_SDA */ -GPIO(I2C2_SCL, PIN(9, 2), GPIO_INPUT) /* EC_I2C2_PMIC_3V3_SCL */ -GPIO(I2C2_SDA, PIN(9, 1), GPIO_INPUT) /* EC_I2C2_PMIC_3V3_SDA */ -GPIO(I2C3_SCL, PIN(D, 1), GPIO_INPUT | GPIO_SEL_1P8V) /* EC_I2C3_SENSOR_1V8_SCL */ -GPIO(I2C3_SDA, PIN(D, 0), GPIO_INPUT | GPIO_SEL_1P8V) /* EC_I2C3_SENSOR_1V8_SDA */ - -/* rev0: 5V enables: INPUT=1.5A, OUT_LOW=OFF, OUT_HIGH=3A */ -GPIO(EN_USB_C0_5V_OUT, PIN(3, 2), GPIO_OUT_LOW) /* C0 5V Enable */ -GPIO(EN_USB_C0_3A, PIN(6, 6), GPIO_OUT_LOW) /* C0 Enable 3A */ -GPIO(EN_USB_C0_CHARGE_EC_L, PIN(C, 0), GPIO_OUT_LOW) /* C0 Charge enable */ -GPIO(EN_USB_C1_5V_OUT, PIN(B, 1), GPIO_OUT_LOW) /* C1 5V Enable */ -GPIO(EN_USB_C1_3A, PIN(3, 5), GPIO_OUT_LOW) /* C1 3A Enable */ -GPIO(EN_USB_C1_CHARGE_EC_L, PIN(C, 3), GPIO_OUT_LOW) /* C1 Charge enable */ -GPIO(USB_PD_RST_C0, PIN(0, 3), GPIO_OUT_LOW) /* C0 PD Reset */ -GPIO(USB_C1_PD_RST_ODL, PIN(7, 4), GPIO_ODR_HIGH) /* C1 PD Reset */ -GPIO(USB_C0_DP_HPD, PIN(9, 4), GPIO_INPUT) /* C0 DP Hotplug Detect */ -GPIO(USB_C1_DP_HPD, PIN(A, 5), GPIO_INPUT) /* C1 DP Hotplug Detect */ -GPIO(USB2_ID2, PIN(9, 5), GPIO_OUT_LOW) /* USB OTG ID */ - -/* USB Type-A control */ -GPIO(USB_A_CHARGE_EN_L, PIN(0, 0), GPIO_OUT_LOW) -GPIO(EN_USB_A_5V, PIN(8, 4), GPIO_OUT_LOW) - -/* LEDs */ -GPIO(CHG_LED1, PIN(8, 0), GPIO_OUT_LOW) -GPIO(CHG_LED2, PIN(B, 7), GPIO_OUT_LOW) -GPIO(PWR_LED, PIN(8, 6), GPIO_OUT_LOW) - -/* Alternate functions GPIO definitions */ -/* UART pins */ -ALTERNATE(PIN_MASK(6, 0x30), 1, MODULE_UART, 0) /* GPIO64-65 */ /* UART from EC to Servo */ - -/* I2C pins */ -ALTERNATE(PIN_MASK(8, 0x80), 1, MODULE_I2C, 0) /* GPIO87 */ /* EC_I2C1_3V3_SDA */ -ALTERNATE(PIN_MASK(9, 0x01), 1, MODULE_I2C, 0) /* GPIO90 */ /* EC_I2C1_3V3_SCL */ -ALTERNATE(PIN_MASK(9, 0x06), 1, MODULE_I2C, 0) /* GPIO91-92 */ /* EC_I2C2_PMIC_3V3_SDA/SCL */ -ALTERNATE(PIN_MASK(B, 0x30), 1, MODULE_I2C, 0) /* GPIOB4-B5 */ /* EC_I2C0_0_USBC_3V3_SDA/SCL */ -ALTERNATE(PIN_MASK(B, 0x0C), 1, MODULE_I2C, 0) /* GPOPB2-B3 */ /* EC_I2C0_1_3V3_SDA/SCL */ -ALTERNATE(PIN_MASK(D, 0x03), 1, MODULE_I2C, 0) /* GPIOD0-D1 */ /* EC_I2C3_SENSOR_1V8_SDA/SCL */ - -/* PWM pins */ -ALTERNATE(PIN_MASK(B, 0x40), 1, MODULE_PWM, 0) /* GPIOB6 */ /* PWM KB Backlight */ - -/* Keyboard pins */ -#define GPIO_KB_INPUT (GPIO_INPUT | GPIO_PULL_UP) -#define GPIO_KB_OUTPUT (GPIO_ODR_HIGH) -ALTERNATE(PIN_MASK(3, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) /* GPIO30-31 */ /* KSI_00-01 */ -ALTERNATE(PIN_MASK(2, 0xfc), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) /* GPIO22-27 */ /* KSI_02-07 */ -ALTERNATE(PIN_MASK(2, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT) /* GPIO20-21 */ /* KSO_00-01 */ -ALTERNATE(PIN_MASK(1, 0x7f), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT) /* GPIO10-16 */ /* KSO_03-09 */ -ALTERNATE(PIN_MASK(0, 0xe0), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT) /* GPIO05-07 */ /* KSO_10-12 */ -GPIO(KBD_KSO2, PIN(1, 7), GPIO_OUT_LOW) /* EC_KSO_02_INV */ diff --git a/board/rammus/led.c b/board/rammus/led.c deleted file mode 100644 index a86e11e3a0..0000000000 --- a/board/rammus/led.c +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Power and battery LED control. - */ - -#include "battery.h" -#include "charge_manager.h" -#include "charge_state.h" -#include "chipset.h" -#include "ec_commands.h" -#include "gpio.h" -#include "hooks.h" -#include "host_command.h" -#include "led_common.h" -#include "system.h" -#include "util.h" - -#define LED_ON 1 -#define LED_OFF 0 -#define LED_TOTAL_TICKS 20 -#define LED_CHARGE_PULSE 10 -#define LED_POWER_PULSE 15 - -const enum ec_led_id supported_led_ids[] = { - EC_LED_ID_POWER_LED, - EC_LED_ID_BATTERY_LED}; - -const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); - -enum led_charge_state { - LED_STATE_DISCHARGE = 0, - LED_STATE_CHARGE, - LED_STATE_FULL, - LED_STATE_ERROR_PHASE0, - LED_STATE_ERROR_PHASE1, - LED_CHARGE_STATE_COUNT -}; - -enum led_power_state { - LED_STATE_S0 = 0, - LED_STATE_S3_PHASE0, - LED_STATE_S3_PHASE1, - LED_STATE_S5, - LED_POWER_STATE_COUNT -}; - -static const struct { - uint8_t led1:1; - uint8_t led2:1; -} led_chg_state_table[] = { - [LED_STATE_DISCHARGE] = {LED_OFF, LED_OFF}, - [LED_STATE_CHARGE] = {LED_OFF, LED_ON}, - [LED_STATE_FULL] = {LED_ON, LED_OFF}, - [LED_STATE_ERROR_PHASE0] = {LED_OFF, LED_OFF}, - [LED_STATE_ERROR_PHASE1] = {LED_OFF, LED_ON} -}; - -static const struct { - uint8_t led:1; -} led_pwr_state_table[] = { - [LED_STATE_S0] = {LED_ON}, - [LED_STATE_S3_PHASE0] = {LED_OFF}, - [LED_STATE_S3_PHASE1] = {LED_ON}, - [LED_STATE_S5] = {LED_OFF} -}; - -void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) -{ - brightness_range[EC_LED_COLOR_WHITE] = 1; - brightness_range[EC_LED_COLOR_GREEN] = 1; - brightness_range[EC_LED_COLOR_AMBER] = 1; -} - -int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) -{ - gpio_set_level(GPIO_PWR_LED, brightness[EC_LED_COLOR_WHITE]); - gpio_set_level(GPIO_CHG_LED1, brightness[EC_LED_COLOR_GREEN]); - gpio_set_level(GPIO_CHG_LED2, brightness[EC_LED_COLOR_AMBER]); - - return EC_SUCCESS; -} - -void config_power_led(enum led_power_state state) -{ - gpio_set_level(GPIO_PWR_LED, led_pwr_state_table[state].led); -} - -void config_battery_led(enum led_charge_state state) -{ - gpio_set_level(GPIO_CHG_LED1, led_chg_state_table[state].led1); - gpio_set_level(GPIO_CHG_LED2, led_chg_state_table[state].led2); -} - -static void rammus_led_set_power(void) -{ - static unsigned int power_ticks; - int chipset_state; - - chipset_state = chipset_in_state(CHIPSET_STATE_HARD_OFF) | - (chipset_in_state(CHIPSET_STATE_SOFT_OFF) << 1) | - (chipset_in_state(CHIPSET_STATE_SUSPEND) << 2) | - (chipset_in_state(CHIPSET_STATE_ON) << 3) | - (chipset_in_state(CHIPSET_STATE_STANDBY) << 4); - - switch (chipset_state) { - case CHIPSET_STATE_ON: - config_power_led(LED_STATE_S0); - power_ticks = 0; - break; - case CHIPSET_STATE_SUSPEND: - case CHIPSET_STATE_STANDBY: - if ((power_ticks++ % LED_TOTAL_TICKS) < LED_POWER_PULSE) - config_power_led(LED_STATE_S3_PHASE0); - else - config_power_led(LED_STATE_S3_PHASE1); - break; - case CHIPSET_STATE_HARD_OFF: - case CHIPSET_STATE_SOFT_OFF: - config_power_led(LED_STATE_S5); - power_ticks = 0; - break; - default: - break; - } -} - -static void rammus_led_set_battery(void) -{ - enum charge_state chg_state = charge_get_state(); - int charge_percent = charge_get_percent(); - static unsigned int charge_ticks; - - /* CHIPSET_STATE_OFF */ - switch (chg_state) { - case PWR_STATE_DISCHARGE: - if ((charge_get_flags() & CHARGE_FLAG_EXTERNAL_POWER) && - charge_percent >= BATTERY_LEVEL_NEAR_FULL) - config_battery_led(LED_STATE_FULL); - else - config_battery_led(LED_STATE_DISCHARGE); - charge_ticks = 0; - break; - case PWR_STATE_CHARGE: - config_battery_led(LED_STATE_CHARGE); - charge_ticks = 0; - break; - case PWR_STATE_ERROR: - if ((charge_ticks++ % LED_TOTAL_TICKS) < LED_CHARGE_PULSE) - config_battery_led(LED_STATE_ERROR_PHASE0); - else - config_battery_led(LED_STATE_ERROR_PHASE1); - break; - case PWR_STATE_CHARGE_NEAR_FULL: - case PWR_STATE_IDLE: - if(charge_get_flags() & CHARGE_FLAG_EXTERNAL_POWER) - config_battery_led(LED_STATE_FULL); - else - config_battery_led(LED_STATE_OFF); - charge_ticks = 0; - break; - default: - break; - } -} - -/** - * Called by hook task every 200 ms - */ -static void led_tick(void) -{ - if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED)) - rammus_led_set_power(); - - if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) - rammus_led_set_battery(); -} - -DECLARE_HOOK(HOOK_TICK, led_tick, HOOK_PRIO_DEFAULT); diff --git a/board/rammus/usb_pd_policy.c b/board/rammus/usb_pd_policy.c deleted file mode 100644 index 652c9bb259..0000000000 --- a/board/rammus/usb_pd_policy.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "atomic.h" -#include "extpower.h" -#include "charge_manager.h" -#include "common.h" -#include "console.h" -#include "driver/tcpm/ps8xxx.h" -#include "gpio.h" -#include "hooks.h" -#include "host_command.h" -#include "registers.h" -#include "system.h" -#include "task.h" -#include "timer.h" -#include "util.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) - -static uint8_t vbus_en[CONFIG_USB_PD_PORT_MAX_COUNT]; -static uint8_t vbus_rp[CONFIG_USB_PD_PORT_MAX_COUNT] = {TYPEC_RP_1A5, - TYPEC_RP_1A5}; - -int board_vbus_source_enabled(int port) -{ - return vbus_en[port]; -} - -static void board_vbus_update_source_current(int port) -{ - gpio_set_level(port ? GPIO_EN_USB_C1_3A : GPIO_EN_USB_C0_3A, - vbus_rp[port] == TYPEC_RP_3A0 ? 1 : 0); - gpio_set_level(port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN, - vbus_en[port]); -} - -__override void typec_set_source_current_limit(int port, enum tcpc_rp_value rp) -{ - vbus_rp[port] = rp; - - /* change the GPIO driving the load switch if needed */ - board_vbus_update_source_current(port); -} - -int pd_set_power_supply_ready(int port) -{ - /* Disable charging */ - gpio_set_level(port ? GPIO_EN_USB_C1_CHARGE_EC_L : - GPIO_EN_USB_C0_CHARGE_EC_L, 1); - - /* Ensure we advertise the proper available current quota */ - charge_manager_source_port(port, 1); - - /* Provide VBUS */ - vbus_en[port] = 1; - board_vbus_update_source_current(port); - - pd_set_vbus_discharge(port, 0); - - /* notify host of power info change */ - pd_send_host_event(PD_EVENT_POWER_CHANGE); - - return EC_SUCCESS; /* we are ready */ -} - -void pd_power_supply_reset(int port) -{ - int prev_en; - - prev_en = vbus_en[port]; - - /* Disable VBUS */ - vbus_en[port] = 0; - board_vbus_update_source_current(port); - - /* Enable discharge if we were previously sourcing 5V */ - if (prev_en) - pd_set_vbus_discharge(port, 1); - - /* Give back the current quota we are no longer using */ - charge_manager_source_port(port, 0); - - /* notify host of power info change */ - pd_send_host_event(PD_EVENT_POWER_CHANGE); -} - -int pd_snk_is_vbus_provided(int port) -{ - return !gpio_get_level(port ? GPIO_USB_C1_VBUS_DET_L : - GPIO_USB_C0_VBUS_DET_L); -} - -int pd_check_vconn_swap(int port) -{ - /* in G3, do not allow vconn swap since pp5000_A rail is off */ - return gpio_get_level(GPIO_SLP_SUS_L_PMIC); -} - -__override void pd_execute_data_swap(int port, - enum pd_data_role data_role) -{ - /* Only port 0 supports device mode. */ - if (port != 0) - return; - - gpio_set_level(GPIO_USB2_ID2, - (data_role == PD_ROLE_UFP) ? 1 : 0); -} diff --git a/board/rammus/vif_override.xml b/board/rammus/vif_override.xml deleted file mode 100644 index 32736caf64..0000000000 --- a/board/rammus/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. ---> |