]> Git Repo - J-u-boot.git/blame - drivers/rtc/mxsrtc.c
Merge branch 'master' of git://git.denx.de/u-boot
[J-u-boot.git] / drivers / rtc / mxsrtc.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
aa711b11
MV
2/*
3 * Freescale i.MX28 RTC Driver
4 *
5 * Copyright (C) 2011 Marek Vasut <[email protected]>
6 * on behalf of DENX Software Engineering GmbH
aa711b11
MV
7 */
8
9#include <common.h>
10#include <rtc.h>
11#include <asm/io.h>
12#include <asm/arch/imx-regs.h>
13#include <asm/arch/sys_proto.h>
14
15#define MXS_RTC_MAX_TIMEOUT 1000000
16
17/* Set time in seconds since 1970-01-01 */
18int mxs_rtc_set_time(uint32_t secs)
19{
9c471142 20 struct mxs_rtc_regs *rtc_regs = (struct mxs_rtc_regs *)MXS_RTC_BASE;
aa711b11
MV
21 int ret;
22
23 writel(secs, &rtc_regs->hw_rtc_seconds);
24
25 /*
26 * The 0x80 here means seconds were copied to analog. This information
27 * is taken from the linux kernel driver for the STMP37xx RTC since
28 * documentation doesn't mention it.
29 */
fa7a51cb 30 ret = mxs_wait_mask_clr(&rtc_regs->hw_rtc_stat_reg,
aa711b11
MV
31 0x80 << RTC_STAT_STALE_REGS_OFFSET, MXS_RTC_MAX_TIMEOUT);
32
33 if (ret)
34 printf("MXS RTC: Timeout waiting for update\n");
35
36 return ret;
37}
38
39int rtc_get(struct rtc_time *time)
40{
9c471142 41 struct mxs_rtc_regs *rtc_regs = (struct mxs_rtc_regs *)MXS_RTC_BASE;
aa711b11
MV
42 uint32_t secs;
43
44 secs = readl(&rtc_regs->hw_rtc_seconds);
9f9276c3 45 rtc_to_tm(secs, time);
aa711b11
MV
46
47 return 0;
48}
49
50int rtc_set(struct rtc_time *time)
51{
52 uint32_t secs;
53
71420983 54 secs = rtc_mktime(time);
aa711b11
MV
55
56 return mxs_rtc_set_time(secs);
57}
58
59void rtc_reset(void)
60{
9c471142 61 struct mxs_rtc_regs *rtc_regs = (struct mxs_rtc_regs *)MXS_RTC_BASE;
aa711b11
MV
62 int ret;
63
64 /* Set time to 1970-01-01 */
65 mxs_rtc_set_time(0);
66
67 /* Reset the RTC block */
fa7a51cb 68 ret = mxs_reset_block(&rtc_regs->hw_rtc_ctrl_reg);
aa711b11
MV
69 if (ret)
70 printf("MXS RTC: Block reset timeout\n");
71}
This page took 0.407533 seconds and 4 git commands to generate.