1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #ifndef SOC_MEDIATEK_RTC_COMMON_H 4 #define SOC_MEDIATEK_RTC_COMMON_H 5 6 #include <commonlib/bsd/bcd.h> 7 #include <console/console.h> 8 #include <rtc.h> 9 #include <stdbool.h> 10 11 #define RTCTAG "[RTC]" 12 #define rtc_info(fmt, arg ...) printk(BIOS_INFO, RTCTAG "%s,%d: " fmt, \ 13 __func__, __LINE__, ## arg) 14 15 /* 16 * Default values for RTC initialization 17 * Year (YEA) : 1970 ~ 2037 18 * Month (MTH) : 1 ~ 12 19 * Day of Month (DOM): 1 ~ 31 20 */ 21 22 enum { 23 RTC_DEFAULT_YEA = 2010, 24 RTC_DEFAULT_MTH = 1, 25 RTC_DEFAULT_DOM = 1, 26 RTC_DEFAULT_DOW = 5 27 }; 28 29 enum { 30 RTC_2SEC_REBOOT_ENABLE = 1, 31 RTC_2SEC_MODE = 2 32 }; 33 34 enum { 35 RTC_OSC32CON_UNLOCK1 = 0x1A57, 36 RTC_OSC32CON_UNLOCK2 = 0x2B68 37 }; 38 39 enum { 40 RTC_PROT_UNLOCK1 = 0x586A, 41 RTC_PROT_UNLOCK2 = 0x9136 42 }; 43 44 enum { 45 RTC_BBPU_KEY = 0x43 << 8 46 }; 47 48 enum { 49 RTC_IRQ_STA_AL = 1U << 0, 50 RTC_IRQ_STA_TC = 1U << 1, 51 RTC_IRQ_STA_LP = 1U << 3 52 }; 53 54 enum { 55 RTC_IRQ_EN_AL = 1U << 0, 56 RTC_IRQ_EN_TC = 1U << 1, 57 RTC_IRQ_EN_ONESHOT = 1U << 2, 58 RTC_IRQ_EN_LP = 1U << 3, 59 RTC_IRQ_EN_ONESHOT_AL = RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL 60 }; 61 62 enum { 63 RTC_POWERKEY1_KEY = 0xA357, 64 RTC_POWERKEY2_KEY = 0x67D2 65 }; 66 67 enum { 68 RTC_SPAR0_32K_LESS = 1U << 6 69 }; 70 71 enum { 72 RTC_MIN_YEAR = 1968, 73 RTC_BASE_YEAR = 1900, 74 RTC_MIN_YEAR_OFFSET = RTC_MIN_YEAR - RTC_BASE_YEAR, 75 76 RTC_NUM_YEARS = 128 77 }; 78 79 enum { 80 RTC_STATE_REBOOT = 0, 81 RTC_STATE_RECOVER = 1, 82 RTC_STATE_INIT = 2 83 }; 84 85 /* RTC error code */ 86 enum { 87 RTC_STATUS_OK = 0, 88 RTC_STATUS_POWERKEY_INIT_FAIL, 89 RTC_STATUS_WRITEIF_UNLOCK_FAIL, 90 RTC_STATUS_OSC_SETTING_FAIL, 91 RTC_STATUS_GPIO_INIT_FAIL, 92 RTC_STATUS_HW_INIT_FAIL, 93 RTC_STATUS_REG_INIT_FAIL, 94 RTC_STATUS_LPD_INIT_FAIL 95 }; 96 97 /* external API */ 98 bool rtc_write_trigger(void); 99 bool rtc_writeif_unlock(void); 100 bool rtc_xosc_write(u16 val); 101 bool rtc_lpen(u16 con); 102 bool rtc_reg_init(void); 103 void rtc_osc_init(void); 104 bool rtc_powerkey_init(void); 105 void rtc_boot_common(void); 106 107 #endif /* SOC_MEDIATEK_RTC_COMMON_H */ 108