11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef PLATFORM_RTC_HI35XX_H 171bd4fe43Sopenharmony_ci#define PLATFORM_RTC_HI35XX_H 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#include "rtc_core.h" 201bd4fe43Sopenharmony_ci 211bd4fe43Sopenharmony_ci#ifdef __cplusplus 221bd4fe43Sopenharmony_ci#if __cplusplus 231bd4fe43Sopenharmony_ciextern "C" { 241bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 251bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 261bd4fe43Sopenharmony_ci 271bd4fe43Sopenharmony_cienum RtcErrorType { 281bd4fe43Sopenharmony_ci RTC_ERROR_READ_FAIL = 1, 291bd4fe43Sopenharmony_ci RTC_ERROR_WRITE_FAIL = 2, 301bd4fe43Sopenharmony_ci RTC_ERROR_READ_BUSY = 3, 311bd4fe43Sopenharmony_ci RTC_ERROR_WRITE_BUSY = 4, 321bd4fe43Sopenharmony_ci RTC_ERROR_NULL = 5, 331bd4fe43Sopenharmony_ci}; 341bd4fe43Sopenharmony_ci 351bd4fe43Sopenharmony_cienum RtcFeatureSupportType { 361bd4fe43Sopenharmony_ci RTC_FEATURE_NO_SUPPORT = 0, 371bd4fe43Sopenharmony_ci RTC_FEATURE_SUPPORT = 1, 381bd4fe43Sopenharmony_ci}; 391bd4fe43Sopenharmony_ci 401bd4fe43Sopenharmony_ci/* define the union SPI_RW */ 411bd4fe43Sopenharmony_ciunion RtcSpiConfig { 421bd4fe43Sopenharmony_ci struct { 431bd4fe43Sopenharmony_ci uint32_t spiWriteData : 8; /* [7:0] */ 441bd4fe43Sopenharmony_ci uint32_t spiReadData : 8; /* [15:8] */ 451bd4fe43Sopenharmony_ci uint32_t spiAddr : 7; /* [22:16] */ 461bd4fe43Sopenharmony_ci uint32_t spiOperateType : 1; /* [23] */ 471bd4fe43Sopenharmony_ci uint32_t spiStart : 1; /* [24] */ 481bd4fe43Sopenharmony_ci uint32_t reserved : 6; /* [30:25] */ 491bd4fe43Sopenharmony_ci uint32_t spiBusy : 1; /* [31] */ 501bd4fe43Sopenharmony_ci } bits; 511bd4fe43Sopenharmony_ci uint32_t data; /* define an unsigned int member */ 521bd4fe43Sopenharmony_ci}; 531bd4fe43Sopenharmony_ci 541bd4fe43Sopenharmony_cistruct RtcLockAddr { 551bd4fe43Sopenharmony_ci uint8_t lock0Addr; 561bd4fe43Sopenharmony_ci uint8_t lock1Addr; 571bd4fe43Sopenharmony_ci uint8_t lock2Addr; 581bd4fe43Sopenharmony_ci uint8_t lock3Addr; 591bd4fe43Sopenharmony_ci}; 601bd4fe43Sopenharmony_ci 611bd4fe43Sopenharmony_cistruct RtcConfigInfo { 621bd4fe43Sopenharmony_ci uint32_t spiBaseAddr; 631bd4fe43Sopenharmony_ci volatile void *remapBaseAddr; 641bd4fe43Sopenharmony_ci uint16_t regAddrLength; 651bd4fe43Sopenharmony_ci uint8_t supportAnaCtrl; 661bd4fe43Sopenharmony_ci uint8_t supportLock; 671bd4fe43Sopenharmony_ci uint8_t irq; 681bd4fe43Sopenharmony_ci uint8_t alarmIndex; 691bd4fe43Sopenharmony_ci uint8_t anaCtrlAddr; 701bd4fe43Sopenharmony_ci struct RtcLockAddr lockAddr; 711bd4fe43Sopenharmony_ci RtcAlarmCallback cb; 721bd4fe43Sopenharmony_ci struct OsalMutex mutex; 731bd4fe43Sopenharmony_ci}; 741bd4fe43Sopenharmony_cistruct RtcTimeReg { 751bd4fe43Sopenharmony_ci uint8_t millisecondAddr; 761bd4fe43Sopenharmony_ci uint8_t secondAddr; 771bd4fe43Sopenharmony_ci uint8_t minuteAddr; 781bd4fe43Sopenharmony_ci uint8_t hourAddr; 791bd4fe43Sopenharmony_ci uint8_t dayLowAddr; 801bd4fe43Sopenharmony_ci uint8_t dayHighAddr; 811bd4fe43Sopenharmony_ci}; 821bd4fe43Sopenharmony_ci 831bd4fe43Sopenharmony_ci#define RTC_SPI_WRITE 0 841bd4fe43Sopenharmony_ci#define RTC_SPI_READ 1 851bd4fe43Sopenharmony_ci 861bd4fe43Sopenharmony_ci/* RTC control over SPI */ 871bd4fe43Sopenharmony_ci#define RTC_SPI_CLK_DIV(base) ((base) + 0x000) 881bd4fe43Sopenharmony_ci#define RTC_SPI_RW(base) ((base) + 0x004) 891bd4fe43Sopenharmony_ci 901bd4fe43Sopenharmony_ci/* RTC reg */ 911bd4fe43Sopenharmony_ci#define RTC_10MS_COUN 0x00 921bd4fe43Sopenharmony_ci#define RTC_S_COUNT 0x01 931bd4fe43Sopenharmony_ci#define RTC_M_COUNT 0x02 941bd4fe43Sopenharmony_ci#define RTC_H_COUNT 0x03 951bd4fe43Sopenharmony_ci#define RTC_D_COUNT_L 0x04 961bd4fe43Sopenharmony_ci#define RTC_D_COUNT_H 0x05 971bd4fe43Sopenharmony_ci#define RTC_MR_10MS 0x06 981bd4fe43Sopenharmony_ci#define RTC_MR_S 0x07 991bd4fe43Sopenharmony_ci#define RTC_MR_M 0x08 1001bd4fe43Sopenharmony_ci#define RTC_MR_H 0x09 1011bd4fe43Sopenharmony_ci#define RTC_MR_D_L 0x0A 1021bd4fe43Sopenharmony_ci#define RTC_MR_D_H 0x0B 1031bd4fe43Sopenharmony_ci#define RTC_LR_10MS 0x0C 1041bd4fe43Sopenharmony_ci#define RTC_LR_S 0x0D 1051bd4fe43Sopenharmony_ci#define RTC_LR_M 0x0E 1061bd4fe43Sopenharmony_ci#define RTC_LR_H 0x0F 1071bd4fe43Sopenharmony_ci#define RTC_LR_D_L 0x10 1081bd4fe43Sopenharmony_ci#define RTC_LR_D_H 0x11 1091bd4fe43Sopenharmony_ci#define RTC_LORD 0x12 1101bd4fe43Sopenharmony_ci#define RTC_MSC 0x13 1111bd4fe43Sopenharmony_ci#define RTC_INT_CLR 0x14 1121bd4fe43Sopenharmony_ci#define RTC_INT 0x15 1131bd4fe43Sopenharmony_ci#define RTC_INT_RAW 0x16 1141bd4fe43Sopenharmony_ci#define RTC_CLK 0x17 1151bd4fe43Sopenharmony_ci#define RTC_POR_N 0x18 1161bd4fe43Sopenharmony_ci#define RTC_SAR_CTRL 0x1A 1171bd4fe43Sopenharmony_ci#define RTC_FREQ_H 0x51 1181bd4fe43Sopenharmony_ci#define RTC_FREQ_L 0x52 1191bd4fe43Sopenharmony_ci 1201bd4fe43Sopenharmony_ci#define RTC_USER_REG1 0x53 1211bd4fe43Sopenharmony_ci#define RTC_USER_REG2 0x54 1221bd4fe43Sopenharmony_ci#define RTC_USER_REG3 0x55 1231bd4fe43Sopenharmony_ci#define RTC_USER_REG4 0x56 1241bd4fe43Sopenharmony_ci#define RTC_USER_REG5 0x57 1251bd4fe43Sopenharmony_ci#define RTC_USER_REG6 0x58 1261bd4fe43Sopenharmony_ci#define RTC_USER_REG7 0x59 1271bd4fe43Sopenharmony_ci#define RTC_USER_REG8 0x5A 1281bd4fe43Sopenharmony_ci 1291bd4fe43Sopenharmony_ci/* RTC reg value */ 1301bd4fe43Sopenharmony_ci#define RTC_CLK_DIV_VALUE 0X4 1311bd4fe43Sopenharmony_ci#define RTC_MSC_ENABLE 0x4 /* 0x4:[2] bit,irq enable */ 1321bd4fe43Sopenharmony_ci#define RTC_UV_CTRL_ENABLE 0x20 /* 0x20:[5] bit,low-power detect */ 1331bd4fe43Sopenharmony_ci#define RTC_ANA_CTRL_ENABLE 0x02 /* 0x20:[2],ana ctl */ 1341bd4fe43Sopenharmony_ci#define RTC_ANA_CTRL_ORDER 0x03 /* 0x03:ana ctl order */ 1351bd4fe43Sopenharmony_ci#define RTC_LOCK_ORDER0 0xCD /* 0xCD:ctl order */ 1361bd4fe43Sopenharmony_ci#define RTC_LOCK_ORDER1 0xAB /* 0xAB:ctl order */ 1371bd4fe43Sopenharmony_ci#define RTC_LOCK_ORDER2 0x5A /* 0x5A:ctl order */ 1381bd4fe43Sopenharmony_ci#define FREQ_H_DEFAULT 0x8 1391bd4fe43Sopenharmony_ci#define FREQ_L_DEFAULT 0x1B 1401bd4fe43Sopenharmony_ci#define RTC_CLK_OUT_SEL 0x01 1411bd4fe43Sopenharmony_ci#define RTC_INT_CLR_MASK 0x1 1421bd4fe43Sopenharmony_ci#define RTC_INT_RAW_MASK 0x2 1431bd4fe43Sopenharmony_ci#define RTC_MSC_TIME_MASK 0x1 1441bd4fe43Sopenharmony_ci#define RTC_INT_MASK 0x1 1451bd4fe43Sopenharmony_ci#define RTC_INT_UV_MASK 0x2 1461bd4fe43Sopenharmony_ci#define RTC_LOCK_BYPASS_MASK 0x4 1471bd4fe43Sopenharmony_ci#define RTC_LOCK_MASK 0x2 1481bd4fe43Sopenharmony_ci#define RTC_LOAD_MASK 0x1 1491bd4fe43Sopenharmony_ci 1501bd4fe43Sopenharmony_ci#define RETRY_CNT 500 1511bd4fe43Sopenharmony_ci#define RTC_WAIT_TIME 10 1521bd4fe43Sopenharmony_ci#define FREQ_MAX_VAL 3277000 1531bd4fe43Sopenharmony_ci#define FREQ_MIN_VAL 3276000 1541bd4fe43Sopenharmony_ci#define FREQ_ROUND_OFF_NUMBER 100 /* freq * 100 round-ff number */ 1551bd4fe43Sopenharmony_ci#define REG_INDEX_MAX_VAL 8 1561bd4fe43Sopenharmony_ci#define SHIFT_BYTE 8 1571bd4fe43Sopenharmony_ci#define FREQ_DIFF 3270000 1581bd4fe43Sopenharmony_ci#define FREQ_COEFFICIENT 3052 1591bd4fe43Sopenharmony_ci#define FREQ_UNIT 10000 1601bd4fe43Sopenharmony_ci#define SHIFT_BYTE 8 1611bd4fe43Sopenharmony_ci#define MS_OF_ACCURACY 10 1621bd4fe43Sopenharmony_ci 1631bd4fe43Sopenharmony_ci#ifdef __cplusplus 1641bd4fe43Sopenharmony_ci#if __cplusplus 1651bd4fe43Sopenharmony_ci} 1661bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 1671bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 1681bd4fe43Sopenharmony_ci 1691bd4fe43Sopenharmony_ci#endif /* PLATFORM_RTC_HI35XX_H */ 170