xref: /linux-6.15/include/linux/mfd/mt6397/rtc.h (revision c2004b6e)
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 MTK_RTC_POLL_DELAY_US  10
64c512995cSJosef Friedl #define MTK_RTC_POLL_TIMEOUT   (jiffies_to_usecs(HZ))
65c512995cSJosef Friedl 
6629ee4009SRan Bi struct mtk_rtc_data {
6729ee4009SRan Bi 	u32                     wrtgr;
6829ee4009SRan Bi };
6929ee4009SRan Bi 
70c512995cSJosef Friedl struct mt6397_rtc {
71c512995cSJosef Friedl 	struct rtc_device       *rtc_dev;
72c512995cSJosef Friedl 
73c512995cSJosef Friedl 	/* Protect register access from multiple tasks */
74c512995cSJosef Friedl 	struct mutex            lock;
75c512995cSJosef Friedl 	struct regmap           *regmap;
76c512995cSJosef Friedl 	int                     irq;
77c512995cSJosef Friedl 	u32                     addr_base;
7829ee4009SRan Bi 	const struct mtk_rtc_data *data;
79c512995cSJosef Friedl };
80c512995cSJosef Friedl 
81c512995cSJosef Friedl #endif /* _LINUX_MFD_MT6397_RTC_H_ */
82