#include <linux/module.h>
#include <linux/regmap.h>
#include <linux/irqdomain.h>
#include <linux/platform_device.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/mfd/mt6397/core.h>
#define RTC_BBPU_CBUSY BIT(6)
#define RTC_IRQ_STA 0x0002
#define RTC_IRQ_STA_AL BIT(0)
#define RTC_IRQ_STA_LP BIT(3)
#define RTC_IRQ_EN 0x0004
#define RTC_IRQ_EN_AL BIT(0)
#define RTC_IRQ_EN_ONESHOT BIT(2)
#define RTC_IRQ_EN_LP BIT(3)
#define RTC_IRQ_EN_ONESHOT_AL (RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL)
#define RTC_AL_MASK 0x0008
#define RTC_AL_MASK_DOW BIT(4)
#define RTC_TC_SEC 0x000a
#define RTC_OFFSET_HOUR 2
#define RTC_OFFSET_YEAR 6
#define RTC_OFFSET_COUNT 7
#define RTC_AL_SEC 0x0018
#define RTC_PDN2_PWRON_ALARM BIT(4)
#define RTC_MIN_YEAR 1968
#define RTC_BASE_YEAR 1900
#define RTC_NUM_YEARS 128
#define RTC_MIN_YEAR_OFFSET (RTC_MIN_YEAR - RTC_BASE_YEAR)
struct rtc_device *rtc_dev;
static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc)
unsigned long timeout = jiffies + HZ;
ret = regmap_write(rtc->regmap, rtc->addr_base + RTC_WRTGR, 1);
ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_BBPU,
if (!(data & RTC_BBPU_CBUSY))
if (time_after(jiffies, timeout)) {