xref: /linux-6.15/include/linux/mfd/mt6397/rtc.h (revision be60652f)
1c512995cSJosef Friedl /* SPDX-License-Identifier: GPL-2.0 */
2c512995cSJosef Friedl /*
3c512995cSJosef Friedl  * Copyright (C) 2014-2019 MediaTek Inc.
4c512995cSJosef Friedl  *
5c512995cSJosef Friedl  * Author: Tianping.Fang <[email protected]>
6c512995cSJosef Friedl  *        Sean Wang <[email protected]>
7c512995cSJosef Friedl  */
8c512995cSJosef Friedl 
9c512995cSJosef Friedl #ifndef _LINUX_MFD_MT6397_RTC_H_
10c512995cSJosef Friedl #define _LINUX_MFD_MT6397_RTC_H_
11c512995cSJosef Friedl 
12c512995cSJosef Friedl #include <linux/jiffies.h>
13c512995cSJosef Friedl #include <linux/mutex.h>
14c512995cSJosef Friedl #include <linux/regmap.h>
15c512995cSJosef Friedl #include <linux/rtc.h>
16c512995cSJosef Friedl 
17c512995cSJosef Friedl #define RTC_BBPU               0x0000
18c512995cSJosef Friedl #define RTC_BBPU_CBUSY         BIT(6)
19c512995cSJosef Friedl #define RTC_BBPU_KEY            (0x43 << 8)
20c512995cSJosef Friedl 
2129ee4009SRan Bi #define RTC_WRTGR_MT6358       0x003a
2229ee4009SRan Bi #define RTC_WRTGR_MT6397       0x003c
2329ee4009SRan Bi #define RTC_WRTGR_MT6323       RTC_WRTGR_MT6397
24c512995cSJosef Friedl 
25c512995cSJosef Friedl #define RTC_IRQ_STA            0x0002
26c512995cSJosef Friedl #define RTC_IRQ_STA_AL         BIT(0)
27c512995cSJosef Friedl #define RTC_IRQ_STA_LP         BIT(3)
28c512995cSJosef Friedl 
29c512995cSJosef Friedl #define RTC_IRQ_EN             0x0004
30c512995cSJosef Friedl #define RTC_IRQ_EN_AL          BIT(0)
31c512995cSJosef Friedl #define RTC_IRQ_EN_ONESHOT     BIT(2)
32c512995cSJosef Friedl #define RTC_IRQ_EN_LP          BIT(3)
33c512995cSJosef Friedl #define RTC_IRQ_EN_ONESHOT_AL  (RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL)
34c512995cSJosef Friedl 
35c512995cSJosef Friedl #define RTC_AL_MASK            0x0008
36c512995cSJosef Friedl #define RTC_AL_MASK_DOW                BIT(4)
37c512995cSJosef Friedl 
38c512995cSJosef Friedl #define RTC_TC_SEC             0x000a
39*be60652fSHsin-Hsiung Wang #define RTC_TC_MTH_MASK        0x000f
40c512995cSJosef Friedl /* Min, Hour, Dom... register offset to RTC_TC_SEC */
41c512995cSJosef Friedl #define RTC_OFFSET_SEC         0
42c512995cSJosef Friedl #define RTC_OFFSET_MIN         1
43c512995cSJosef Friedl #define RTC_OFFSET_HOUR                2
44c512995cSJosef Friedl #define RTC_OFFSET_DOM         3
45c512995cSJosef Friedl #define RTC_OFFSET_DOW         4
46c512995cSJosef Friedl #define RTC_OFFSET_MTH         5
47c512995cSJosef Friedl #define RTC_OFFSET_YEAR                6
48c512995cSJosef Friedl #define RTC_OFFSET_COUNT       7
49c512995cSJosef Friedl 
50c512995cSJosef Friedl #define RTC_AL_SEC             0x0018
51c512995cSJosef Friedl 
52653997eeSRan Bi #define RTC_AL_SEC_MASK        0x003f
53653997eeSRan Bi #define RTC_AL_MIN_MASK        0x003f
54653997eeSRan Bi #define RTC_AL_HOU_MASK        0x001f
55653997eeSRan Bi #define RTC_AL_DOM_MASK        0x001f
56653997eeSRan Bi #define RTC_AL_DOW_MASK        0x0007
57653997eeSRan Bi #define RTC_AL_MTH_MASK        0x000f
58653997eeSRan Bi #define RTC_AL_YEA_MASK        0x007f
59653997eeSRan Bi 
60c512995cSJosef Friedl #define RTC_PDN2               0x002e
61c512995cSJosef Friedl #define RTC_PDN2_PWRON_ALARM   BIT(4)
62c512995cSJosef Friedl 
63c512995cSJosef Friedl #define RTC_MIN_YEAR           1968
64c512995cSJosef Friedl #define RTC_BASE_YEAR          1900
65c512995cSJosef Friedl #define RTC_NUM_YEARS          128
66c512995cSJosef Friedl #define RTC_MIN_YEAR_OFFSET    (RTC_MIN_YEAR - RTC_BASE_YEAR)
67c512995cSJosef Friedl 
68c512995cSJosef Friedl #define MTK_RTC_POLL_DELAY_US  10
69c512995cSJosef Friedl #define MTK_RTC_POLL_TIMEOUT   (jiffies_to_usecs(HZ))
70c512995cSJosef Friedl 
7129ee4009SRan Bi struct mtk_rtc_data {
7229ee4009SRan Bi 	u32                     wrtgr;
7329ee4009SRan Bi };
7429ee4009SRan Bi 
75c512995cSJosef Friedl struct mt6397_rtc {
76c512995cSJosef Friedl 	struct rtc_device       *rtc_dev;
77c512995cSJosef Friedl 
78c512995cSJosef Friedl 	/* Protect register access from multiple tasks */
79c512995cSJosef Friedl 	struct mutex            lock;
80c512995cSJosef Friedl 	struct regmap           *regmap;
81c512995cSJosef Friedl 	int                     irq;
82c512995cSJosef Friedl 	u32                     addr_base;
8329ee4009SRan Bi 	const struct mtk_rtc_data *data;
84c512995cSJosef Friedl };
85c512995cSJosef Friedl 
86c512995cSJosef Friedl #endif /* _LINUX_MFD_MT6397_RTC_H_ */
87