]>
git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/rtc/mx27rtc.c
2 * Freescale i.MX27 RTC Driver
4 * Copyright (C) 2012 Philippe Reynes <tremyfr@yahoo.fr>
6 * SPDX-License-Identifier: GPL-2.0+
12 #include <asm/arch/imx-regs.h>
15 #define HOUR_MASK 0x1f
19 int rtc_get(struct rtc_time
*time
)
21 struct rtc_regs
*rtc_regs
= (struct rtc_regs
*)IMX_RTC_BASE
;
22 uint32_t day
, hour
, min
, sec
;
24 day
= readl(&rtc_regs
->dayr
);
25 hour
= readl(&rtc_regs
->hourmin
);
26 sec
= readl(&rtc_regs
->seconds
);
28 min
= (hour
>> MIN_SHIFT
) & MIN_MASK
;
29 hour
= (hour
>> HOUR_SHIFT
) & HOUR_MASK
;
31 sec
+= min
* 60 + hour
* 3600 + day
* 24 * 3600;
38 int rtc_set(struct rtc_time
*time
)
40 struct rtc_regs
*rtc_regs
= (struct rtc_regs
*)IMX_RTC_BASE
;
41 uint32_t day
, hour
, min
, sec
;
43 sec
= mktime(time
->tm_year
, time
->tm_mon
, time
->tm_mday
,
44 time
->tm_hour
, time
->tm_min
, time
->tm_sec
);
46 day
= sec
/ (24 * 3600);
47 sec
= sec
% (24 * 3600);
53 hour
= (hour
& HOUR_MASK
) << HOUR_SHIFT
;
54 hour
|= (min
& MIN_MASK
) << MIN_SHIFT
;
56 writel(day
, &rtc_regs
->dayr
);
57 writel(hour
, &rtc_regs
->hourmin
);
58 writel(sec
, &rtc_regs
->seconds
);
65 struct rtc_regs
*rtc_regs
= (struct rtc_regs
*)IMX_RTC_BASE
;
67 writel(0, &rtc_regs
->dayr
);
68 writel(0, &rtc_regs
->hourmin
);
69 writel(0, &rtc_regs
->seconds
);