blob: e2980659d4c7ab26ed86754e39f114db6e43cca3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include "lbrtc.h"
#include "attributes.h"
s32 D_801160C0_jp = 0;
s32 lbrtc_init(OSMesgQueue* mq) {
s32 ret;
u8 status;
UNUSED s32 pad;
__OSContRTCControlRegs rtc[1];
ret = func_800FE480_jp(mq, &status);
if (ret == 0) {
if (D_801160C0_jp == 0) {
osCreateMesgQueue(&__contRTCMesgQ, &__contRTCMesg, OS_MESG_BLOCK);
D_801160C0_jp = 1;
}
if (status & RTC_STATUS_STOPPED) {
ret = func_800FEE10_jp(mq, RTC_CR_BLOCK_TYPE, (u8*)&rtc);
if ((ret == 0) || (ret == RTC_STOPPED)) {
rtc[0].flagsBitfield &= ~RTC_WRITE_STOP_COUNT2_BIT;
ret = func_800FE8D0_jp(mq, RTC_CR_BLOCK_TYPE, (u8*)&rtc);
}
}
if (status & RTC_STATUS_BATTERY_FAILURE) {
ret = (status & RTC_STATUS_CRYSTAL_FAILURE) ? 0x13 : RTC_ERR_BATTERY;
} else if (status & RTC_STATUS_CRYSTAL_FAILURE) {
ret = RTC_ERR_CRYSTAL;
}
}
return ret;
}
|