diff options
| author | Barry Wardell <rockbox@barrywardell.net> | 2007-11-14 16:13:39 +0000 |
|---|---|---|
| committer | Barry Wardell <rockbox@barrywardell.net> | 2007-11-14 16:13:39 +0000 |
| commit | e18125eec2bc4d48cb8857313b52d458bc352075 (patch) | |
| tree | 4da7d448d68109cca4d63d3dd9b9dc10f1dc15da /firmware/drivers/rtc/rtc_e8564.c | |
| parent | 2bb48eb8edc62072e3ac026e0c26f7dd38a91a9a (diff) | |
| download | rockbox-e18125eec2bc4d48cb8857313b52d458bc352075.zip rockbox-e18125eec2bc4d48cb8857313b52d458bc352075.tar.gz rockbox-e18125eec2bc4d48cb8857313b52d458bc352075.tar.bz2 rockbox-e18125eec2bc4d48cb8857313b52d458bc352075.tar.xz | |
FS#8155: Proper initialization of E8564 RTC (used in H10). Also fixes FS#8154 - Shutting down fails when RTC alarm is active. Thanks to Przemyslaw Holubowski for the bug report and fix.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15619 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/rtc/rtc_e8564.c')
| -rw-r--r-- | firmware/drivers/rtc/rtc_e8564.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/firmware/drivers/rtc/rtc_e8564.c b/firmware/drivers/rtc/rtc_e8564.c index c0209e9..c3ae934 100644 --- a/firmware/drivers/rtc/rtc_e8564.c +++ b/firmware/drivers/rtc/rtc_e8564.c @@ -24,8 +24,28 @@ #include "i2c-pp.h" #include <stdbool.h> +/* RTC registers */ +#define RTC_CTRL1 0x00 +#define RTC_CTRL2 0x01 + +/* Control 2 register flags */ +#define RTC_TF 0x04 +#define RTC_AF 0x08 + void rtc_init(void) { + unsigned char tmp; + int rv; + + /* initialize Control 1 register */ + tmp = 0; + pp_i2c_send(0x51, RTC_CTRL1,tmp); + + /* read value of the Control 2 register - we'll need it to preserve alarm and timer interrupt assertion flags */ + rv = i2c_readbytes(0x51,RTC_CTRL2,1,&tmp); + /* clear alarm and timer interrupts */ + tmp &= (RTC_TF | RTC_AF); + pp_i2c_send(0x51, RTC_CTRL2,tmp); } int rtc_read_datetime(unsigned char* buf) |