1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <bootmode.h> 4 #include <ec/google/chromeec/ec.h> 5 #include <elog.h> 6 7 #if CONFIG(EC_GOOGLE_CHROMEEC_LPC) get_lid_switch(void)8int get_lid_switch(void) 9 { 10 if (!CONFIG(VBOOT_LID_SWITCH)) 11 return -1; 12 13 return !!(google_chromeec_get_switches() & EC_SWITCH_LID_OPEN); 14 } 15 #endif 16 get_recovery_mode_switch(void)17int get_recovery_mode_switch(void) 18 { 19 /* Check for dedicated recovery switch first. */ 20 if (CONFIG(EC_GOOGLE_CHROMEEC_LPC) && 21 (google_chromeec_get_switches() & EC_SWITCH_DEDICATED_RECOVERY)) 22 return 1; 23 24 /* Check if the EC has posted the keyboard recovery event. */ 25 return !!(google_chromeec_get_events_b() & 26 EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY)); 27 } 28 get_recovery_mode_retrain_switch(void)29int get_recovery_mode_retrain_switch(void) 30 { 31 /* 32 * Check if the EC has posted the keyboard recovery event with memory 33 * retrain. 34 */ 35 return !!(google_chromeec_get_events_b() & 36 EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT)); 37 } 38 elog_add_recovery_mode_switch_event(void)39static void elog_add_recovery_mode_switch_event(void) 40 { 41 uint64_t events = google_chromeec_get_events_b(); 42 uint8_t event_byte = EC_HOST_EVENT_KEYBOARD_RECOVERY; 43 44 if (!(events & EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY))) 45 return; 46 47 if (events & EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT)) 48 event_byte = EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT; 49 50 elog_add_event_byte(ELOG_TYPE_EC_EVENT, event_byte); 51 } 52 clear_recovery_mode_switch(void)53int clear_recovery_mode_switch(void) 54 { 55 /* Log elog event before clearing */ 56 elog_add_recovery_mode_switch_event(); 57 58 /* Clear all host event bits requesting recovery mode. */ 59 return google_chromeec_clear_events_b( 60 EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY) | 61 EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT)); 62 } 63