Blame view
drivers/rtc/pcf8563.c
2.84 KB
fe8c2806c Initial revision |
1 2 3 4 |
/* * (C) Copyright 2001 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * |
1a4596601 Add GPL-2.0+ SPDX... |
5 |
* SPDX-License-Identifier: GPL-2.0+ |
fe8c2806c Initial revision |
6 7 8 9 10 11 12 13 14 15 16 17 |
*/ /* * Date & Time support for Philips PCF8563 RTC */ /* #define DEBUG */ #include <common.h> #include <command.h> #include <rtc.h> #include <i2c.h> |
871c18dd3 rtc: Clean driver... |
18 |
#if defined(CONFIG_CMD_DATE) |
fe8c2806c Initial revision |
19 20 21 |
static uchar rtc_read (uchar reg); static void rtc_write (uchar reg, uchar val); |
fe8c2806c Initial revision |
22 23 |
/* ------------------------------------------------------------------------- */ |
b73a19e16 LWMON5: POST RTC fix |
24 |
int rtc_get (struct rtc_time *tmp) |
fe8c2806c Initial revision |
25 |
{ |
b73a19e16 LWMON5: POST RTC fix |
26 |
int rel = 0; |
fe8c2806c Initial revision |
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
uchar sec, min, hour, mday, wday, mon_cent, year; sec = rtc_read (0x02); min = rtc_read (0x03); hour = rtc_read (0x04); mday = rtc_read (0x05); wday = rtc_read (0x06); mon_cent= rtc_read (0x07); year = rtc_read (0x08); debug ( "Get RTC year: %02x mon/cent: %02x mday: %02x wday: %02x " "hr: %02x min: %02x sec: %02x ", year, mon_cent, mday, wday, hour, min, sec ); debug ( "Alarms: wday: %02x day: %02x hour: %02x min: %02x ", rtc_read (0x0C), rtc_read (0x0B), rtc_read (0x0A), rtc_read (0x09) ); if (sec & 0x80) { |
4b9206ed5 * Patches by Thom... |
50 51 |
puts ("### Warning: RTC Low Voltage - date/time not reliable "); |
b73a19e16 LWMON5: POST RTC fix |
52 |
rel = -1; |
fe8c2806c Initial revision |
53 54 55 56 57 58 59 |
} tmp->tm_sec = bcd2bin (sec & 0x7F); tmp->tm_min = bcd2bin (min & 0x7F); tmp->tm_hour = bcd2bin (hour & 0x3F); tmp->tm_mday = bcd2bin (mday & 0x3F); tmp->tm_mon = bcd2bin (mon_cent & 0x1F); |
df930e9b3 rtc: pcf8563: Mak... |
60 |
tmp->tm_year = bcd2bin (year) + ((mon_cent & 0x80) ? 1900 : 2000); |
fe8c2806c Initial revision |
61 62 63 64 65 66 67 68 |
tmp->tm_wday = bcd2bin (wday & 0x07); tmp->tm_yday = 0; tmp->tm_isdst= 0; debug ( "Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d ", tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, tmp->tm_hour, tmp->tm_min, tmp->tm_sec); |
b73a19e16 LWMON5: POST RTC fix |
69 70 |
return rel; |
fe8c2806c Initial revision |
71 |
} |
d1e231941 rtc: allow rtc_se... |
72 |
int rtc_set (struct rtc_time *tmp) |
fe8c2806c Initial revision |
73 74 75 76 77 78 79 80 81 |
{ uchar century; debug ( "Set DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d ", tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, tmp->tm_hour, tmp->tm_min, tmp->tm_sec); rtc_write (0x08, bin2bcd(tmp->tm_year % 100)); |
df930e9b3 rtc: pcf8563: Mak... |
82 |
century = (tmp->tm_year >= 2000) ? 0 : 0x80; |
fe8c2806c Initial revision |
83 84 85 86 87 88 89 |
rtc_write (0x07, bin2bcd(tmp->tm_mon) | century); rtc_write (0x06, bin2bcd(tmp->tm_wday)); rtc_write (0x05, bin2bcd(tmp->tm_mday)); rtc_write (0x04, bin2bcd(tmp->tm_hour)); rtc_write (0x03, bin2bcd(tmp->tm_min )); rtc_write (0x02, bin2bcd(tmp->tm_sec )); |
d1e231941 rtc: allow rtc_se... |
90 91 |
return 0; |
fe8c2806c Initial revision |
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
} void rtc_reset (void) { /* clear all control & status registers */ rtc_write (0x00, 0x00); rtc_write (0x01, 0x00); rtc_write (0x0D, 0x00); /* clear Voltage Low bit */ rtc_write (0x02, rtc_read (0x02) & 0x7F); /* reset all alarms */ rtc_write (0x09, 0x00); rtc_write (0x0A, 0x00); rtc_write (0x0B, 0x00); rtc_write (0x0C, 0x00); } /* ------------------------------------------------------------------------- */ static uchar rtc_read (uchar reg) { |
6d0f6bcf3 rename CFG_ macro... |
115 |
return (i2c_reg_read (CONFIG_SYS_I2C_RTC_ADDR, reg)); |
fe8c2806c Initial revision |
116 117 118 119 |
} static void rtc_write (uchar reg, uchar val) { |
6d0f6bcf3 rename CFG_ macro... |
120 |
i2c_reg_write (CONFIG_SYS_I2C_RTC_ADDR, reg, val); |
fe8c2806c Initial revision |
121 |
} |
068b60a0e cpu/ rtc/ include... |
122 |
#endif |