/** * Called by hook task every 1 sec */ static void led_second(void) { if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED)) oak_led_set_power(system_get_board_version()); if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) oak_led_set_battery(system_get_board_version()); }
static int bat_led_set(enum led_color color, int on) { /* Before Rev5, it's active low; After that, it's active high */ if (system_get_board_version() < OAK_REV5) on = !on; switch (color) { case BAT_LED_GREEN: gpio_set_level(GPIO_BAT_LED0, on); /* BAT_LED_GREEN */ break; case BAT_LED_ORANGE: /* for rev2 or before */ gpio_set_level(GPIO_BAT_LED1, on); /* BAT_LED_ORANGE */ break; case BAT_LED_RED: /* for rev3 or later */ gpio_set_level(GPIO_BAT_LED1, on); /* BAT_LED_RED */ break; case BAT_LED_AMBER: /* for rev3 or later */ gpio_set_level(GPIO_BAT_LED0, on); /* BAT_LED_AMBER */ gpio_set_level(GPIO_BAT_LED1, on); break; case PWR_LED_GREEN: gpio_set_level(GPIO_PWR_LED0, on); /* PWR_LED_GREEN */ break; case PWR_LED_ORANGE: gpio_set_level(GPIO_PWR_LED1, on); /* PWR_LED_ORANGE */ break; default: return EC_ERROR_UNKNOWN; } return EC_SUCCESS; }
static void board_handle_reboot(void) { int flags; if (system_jumped_to_this_image()) return; if (system_get_board_version() < BOARD_MIN_ID_LOD_EN) return; /* Interrogate current reset flags from previous reboot. */ flags = system_get_reset_flags(); if (!(flags & PMIC_RESET_FLAGS)) return; /* Preserve AP off request. */ if (flags & RESET_FLAG_AP_OFF) chip_save_reset_flags(RESET_FLAG_AP_OFF); ccprintf("Restarting system with PMIC.\n"); /* Flush console */ cflush(); /* Bring down all rails but RTC rail (including EC power). */ gpio_set_flags(GPIO_BATLOW_L_PMIC_LDO_EN, GPIO_OUT_HIGH); while (1) ; /* wait here */ }
/* Initialize board. */ static void board_init(void) { /* Enable PD MCU interrupt */ gpio_enable_interrupt(GPIO_PD_MCU_INT); /* Enable VBUS interrupt */ gpio_enable_interrupt(GPIO_USB_C0_VBUS_WAKE_L); gpio_enable_interrupt(GPIO_USB_C1_VBUS_WAKE_L); /* Enable pericom BC1.2 interrupts */ gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_L); gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_L); /* Provide AC status to the PCH */ gpio_set_level(GPIO_PCH_ACOK, extpower_is_present()); /* Proto board workarounds */ if (system_get_board_version() == 0) { /* Disable interrupt for SLP_S0 */ gpio_set_flags(GPIO_PCH_SLP_S0_L, GPIO_INPUT | GPIO_PULL_DOWN); /* Add internal pullup on PLATFORM_EC_PROCHOT */ gpio_set_flags(GPIO_PLATFORM_EC_PROCHOT, GPIO_INPUT | GPIO_PULL_UP); } }
int host_command_get_board_version(struct host_cmd_handler_args *args) { struct ec_response_board_version *r = args->response; r->board_version = (uint16_t) system_get_board_version(); args->response_size = sizeof(*r); return EC_RES_SUCCESS; }
static int command_version(int argc, char **argv) { ccprintf("Chip: %s %s %s\n", system_get_chip_vendor(), system_get_chip_name(), system_get_chip_revision()); ccprintf("Board: %d\n", system_get_board_version()); ccprintf("RO: %s\n", system_get_version(SYSTEM_IMAGE_RO)); ccprintf("RW: %s\n", system_get_version(SYSTEM_IMAGE_RW)); ccprintf("Build: %s\n", system_get_build_info()); return EC_SUCCESS; }
/** * Set AP reset. * * PMIC_WARM_RESET_H (PB3) is connected to PMIC RESET before rev < 3. * AP_RESET_L (PC3, CPU_WARM_RESET_L) is connected to PMIC SYSRSTB * after rev >= 3. */ void board_set_ap_reset(int asserted) { if (system_get_board_version() < 3) { /* Signal is active-high */ CPRINTS("pmic warm reset(%d)", asserted); gpio_set_level(GPIO_PMIC_WARM_RESET_H, asserted); } else { /* Signal is active-low */ CPRINTS("ap warm reset(%d)", asserted); gpio_set_level(GPIO_AP_RESET_L, !asserted); } }