#include <linux/clocksource.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/watchdog.h>
#define TKETSC0 …
#define TKETSC1 …
#define TKEUSEC …
#define TKEOSC …
#define TKEIE(x) …
#define TKEIE_WDT_MASK(x, y) …
#define TMRCR …
#define TMRCR_ENABLE …
#define TMRCR_PERIODIC …
#define TMRCR_PTV(x) …
#define TMRSR …
#define TMRSR_INTR_CLR …
#define TMRCSSR …
#define TMRCSSR_SRC_USEC …
#define WDTCR …
#define WDTCR_SYSTEM_POR_RESET_ENABLE …
#define WDTCR_SYSTEM_DEBUG_RESET_ENABLE …
#define WDTCR_REMOTE_INT_ENABLE …
#define WDTCR_LOCAL_FIQ_ENABLE …
#define WDTCR_LOCAL_INT_ENABLE …
#define WDTCR_PERIOD_MASK …
#define WDTCR_PERIOD(x) …
#define WDTCR_TIMER_SOURCE_MASK …
#define WDTCR_TIMER_SOURCE(x) …
#define WDTCMDR …
#define WDTCMDR_DISABLE_COUNTER …
#define WDTCMDR_START_COUNTER …
#define WDTUR …
#define WDTUR_UNLOCK_PATTERN …
struct tegra186_timer_soc { … };
struct tegra186_tmr { … };
struct tegra186_wdt { … };
static inline struct tegra186_wdt *to_tegra186_wdt(struct watchdog_device *wdd)
{ … }
struct tegra186_timer { … };
static void tmr_writel(struct tegra186_tmr *tmr, u32 value, unsigned int offset)
{ … }
static void wdt_writel(struct tegra186_wdt *wdt, u32 value, unsigned int offset)
{ … }
static u32 wdt_readl(struct tegra186_wdt *wdt, unsigned int offset)
{ … }
static struct tegra186_tmr *tegra186_tmr_create(struct tegra186_timer *tegra,
unsigned int index)
{ … }
static const struct watchdog_info tegra186_wdt_info = …;
static void tegra186_wdt_disable(struct tegra186_wdt *wdt)
{ … }
static void tegra186_wdt_enable(struct tegra186_wdt *wdt)
{ … }
static int tegra186_wdt_start(struct watchdog_device *wdd)
{ … }
static int tegra186_wdt_stop(struct watchdog_device *wdd)
{ … }
static int tegra186_wdt_ping(struct watchdog_device *wdd)
{ … }
static int tegra186_wdt_set_timeout(struct watchdog_device *wdd,
unsigned int timeout)
{ … }
static const struct watchdog_ops tegra186_wdt_ops = …;
static struct tegra186_wdt *tegra186_wdt_create(struct tegra186_timer *tegra,
unsigned int index)
{ … }
static u64 tegra186_timer_tsc_read(struct clocksource *cs)
{ … }
static int tegra186_timer_tsc_init(struct tegra186_timer *tegra)
{ … }
static u64 tegra186_timer_osc_read(struct clocksource *cs)
{ … }
static int tegra186_timer_osc_init(struct tegra186_timer *tegra)
{ … }
static u64 tegra186_timer_usec_read(struct clocksource *cs)
{ … }
static int tegra186_timer_usec_init(struct tegra186_timer *tegra)
{ … }
static irqreturn_t tegra186_timer_irq(int irq, void *data)
{ … }
static int tegra186_timer_probe(struct platform_device *pdev)
{ … }
static void tegra186_timer_remove(struct platform_device *pdev)
{ … }
static int __maybe_unused tegra186_timer_suspend(struct device *dev)
{ … }
static int __maybe_unused tegra186_timer_resume(struct device *dev)
{ … }
static SIMPLE_DEV_PM_OPS(tegra186_timer_pm_ops, tegra186_timer_suspend,
tegra186_timer_resume);
static const struct tegra186_timer_soc tegra186_timer = …;
static const struct tegra186_timer_soc tegra234_timer = …;
static const struct of_device_id tegra186_timer_of_match[] = …;
MODULE_DEVICE_TABLE(of, tegra186_timer_of_match);
static struct platform_driver tegra186_wdt_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;