xref: /linux-6.15/include/linux/mfd/mt6397/rtc.h (revision 29ee4009)
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 
21*29ee4009SRan Bi #define RTC_WRTGR_MT6358       0x003a
22*29ee4009SRan Bi #define RTC_WRTGR_MT6397       0x003c
23*29ee4009SRan 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
39c512995cSJosef Friedl /* Min, Hour, Dom... register offset to RTC_TC_SEC */
40c512995cSJosef Friedl #define RTC_OFFSET_SEC         0
41c512995cSJosef Friedl #define RTC_OFFSET_MIN         1
42c512995cSJosef Friedl #define RTC_OFFSET_HOUR                2
43c512995cSJosef Friedl #define RTC_OFFSET_DOM         3
44c512995cSJosef Friedl #define RTC_OFFSET_DOW         4
45c512995cSJosef Friedl #define RTC_OFFSET_MTH         5
46c512995cSJosef Friedl #define RTC_OFFSET_YEAR                6
47c512995cSJosef Friedl #define RTC_OFFSET_COUNT       7
48c512995cSJosef Friedl 
49c512995cSJosef Friedl #define RTC_AL_SEC             0x0018
50c512995cSJosef Friedl 
51653997eeSRan Bi #define RTC_AL_SEC_MASK        0x003f
52653997eeSRan Bi #define RTC_AL_MIN_MASK        0x003f
53653997eeSRan Bi #define RTC_AL_HOU_MASK        0x001f
54653997eeSRan Bi #define RTC_AL_DOM_MASK        0x001f
55653997eeSRan Bi #define RTC_AL_DOW_MASK        0x0007
56653997eeSRan Bi #define RTC_AL_MTH_MASK        0x000f
57653997eeSRan Bi #define RTC_AL_YEA_MASK        0x007f
58653997eeSRan Bi 
59c512995cSJosef Friedl #define RTC_PDN2               0x002e
60c512995cSJosef Friedl #define RTC_PDN2_PWRON_ALARM   BIT(4)
61c512995cSJosef Friedl 
62c512995cSJosef Friedl #define RTC_MIN_YEAR           1968
63c512995cSJosef Friedl #define RTC_BASE_YEAR          1900
64c512995cSJosef Friedl #define RTC_NUM_YEARS          128
65c512995cSJosef Friedl #define RTC_MIN_YEAR_OFFSET    (RTC_MIN_YEAR - RTC_BASE_YEAR)
66c512995cSJosef Friedl 
67c512995cSJosef Friedl #define MTK_RTC_POLL_DELAY_US  10
68c512995cSJosef Friedl #define MTK_RTC_POLL_TIMEOUT   (jiffies_to_usecs(HZ))
69c512995cSJosef Friedl 
70*29ee4009SRan Bi struct mtk_rtc_data {
71*29ee4009SRan Bi 	u32                     wrtgr;
72*29ee4009SRan Bi };
73*29ee4009SRan Bi 
74c512995cSJosef Friedl struct mt6397_rtc {
75c512995cSJosef Friedl 	struct device           *dev;
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;
83*29ee4009SRan Bi 	const struct mtk_rtc_data *data;
84c512995cSJosef Friedl };
85c512995cSJosef Friedl 
86c512995cSJosef Friedl #endif /* _LINUX_MFD_MT6397_RTC_H_ */
87