linux/drivers/rtc/rtc-mt6397.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3* Copyright (c) 2014-2015 MediaTek Inc.
   4* Author: Tianping.Fang <tianping.fang@mediatek.com>
   5*/
   6
   7#include <linux/err.h>
   8#include <linux/interrupt.h>
   9#include <linux/mfd/mt6397/core.h>
  10#include <linux/module.h>
  11#include <linux/mutex.h>
  12#include <linux/of_device.h>
  13#include <linux/platform_device.h>
  14#include <linux/regmap.h>
  15#include <linux/rtc.h>
  16#include <linux/mfd/mt6397/rtc.h>
  17#include <linux/mod_devicetable.h>
  18
  19static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc)
  20{
  21        int ret;
  22        u32 data;
  23
  24        ret = regmap_write(rtc->regmap, rtc->addr_base + rtc->data->wrtgr, 1);
  25        if (ret < 0)
  26                return ret;
  27
  28        ret = regmap_read_poll_timeout(rtc->regmap,
  29                                        rtc->addr_base + RTC_BBPU, data,
  30                                        !(data & RTC_BBPU_CBUSY),
  31                                        MTK_RTC_POLL_DELAY_US,
  32                                        MTK_RTC_POLL_TIMEOUT);
  33        if (ret < 0)
  34                dev_err(rtc->rtc_dev->dev.parent,
  35                        "failed to write WRTGR: %d\n", ret);
  36
  37        return ret;
  38}
  39
  40static irqreturn_t mtk_rtc_irq_handler_thread(int irq, void *data)
  41{
  42        struct mt6397_rtc *rtc = data;
  43        u32 irqsta, irqen;
  44        int ret;
  45
  46        ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_IRQ_STA, &