/** * Handle a pending reboot command. */ static int handle_pending_reboot(enum ec_reboot_cmd cmd) { switch (cmd) { case EC_REBOOT_CANCEL: return EC_SUCCESS; case EC_REBOOT_JUMP_RO: return system_run_image_copy(SYSTEM_IMAGE_RO); case EC_REBOOT_JUMP_RW: return system_run_image_copy(SYSTEM_IMAGE_RW); case EC_REBOOT_COLD: #ifdef HAS_TASK_PDCMD /* Reboot the PD chip as well */ board_reset_pd_mcu(); #endif system_reset(SYSTEM_RESET_HARD); /* That shouldn't return... */ return EC_ERROR_UNKNOWN; case EC_REBOOT_DISABLE_JUMP: system_disable_jump(); return EC_SUCCESS; #ifdef CONFIG_HIBERNATE case EC_REBOOT_HIBERNATE: CPRINTS("system hibernating"); system_hibernate(0, 0); /* That shouldn't return... */ return EC_ERROR_UNKNOWN; #endif default: return EC_ERROR_INVAL; } }
void board_tcpc_init(void) { int port, reg; /* Only reset TCPC if not sysjump */ if (!system_jumped_to_this_image()) board_reset_pd_mcu(); /* * TODO: Remove when Reef is updated with PS8751 A3. * * Force PS8751 A2 to wake from low power mode. * If PS8751 remains in low power mode after sysjump, * TCPM_INIT will fail due to not able to access PS8751. * * NOTE: PS8751 A3 will wake on any I2C access. */ i2c_read8(NPCX_I2C_PORT0_1, 0x10, 0xA0, ®); /* Enable TCPC0 interrupt */ gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); /* Enable TCPC1 interrupt */ gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); #ifdef CONFIG_USB_PD_TCPC_LOW_POWER /* Enable CABLE_DET interrupt for ANX3429 wake from standby */ gpio_enable_interrupt(GPIO_USB_C0_CABLE_DET); #endif /* * Initialize HPD to low; after sysjump SOC needs to see * HPD pulse to enable video path */ for (port = 0; port < CONFIG_USB_PD_PORT_COUNT; port++) { const struct usb_mux *mux = &usb_muxes[port]; mux->hpd_update(port, 0, 0); } }