1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <soc/power.h> 4 #include <soc/wakeup.h> 5 wakeup(void)6void wakeup(void) 7 { 8 if (wakeup_need_reset()) 9 power_reset(); 10 11 power_init(); /* Ensure ps_hold_setup() for early wakeup. */ 12 power_exit_wakeup(); 13 /* Should never return. If we do, reset. */ 14 power_reset(); 15 } 16 get_wakeup_state(void)17int get_wakeup_state(void) 18 { 19 uint32_t status = power_read_reset_status(); 20 21 /* DIDLE/LPA can be resumed without clock reset (ex, bootblock), 22 * and SLEEP requires resetting clock (should be done in ROM stage). 23 */ 24 25 if (status == S5P_CHECK_DIDLE || status == S5P_CHECK_LPA) 26 return WAKEUP_DIRECT; 27 28 if (status == S5P_CHECK_SLEEP) 29 return WAKEUP_NEED_CLOCK_RESET; 30 31 return IS_NOT_WAKEUP; 32 } 33 wakeup_enable_uart(void)34void wakeup_enable_uart(void) 35 { 36 power_release_uart_retention(); 37 } 38