Try to fix the case where Ipods would spuriously wake up even though no alarm had been set.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14885 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thom Johansen 2007-09-28 15:09:54 +00:00
parent 49a9e1ef35
commit 1ef5dadec5
3 changed files with 11 additions and 5 deletions

View file

@ -69,6 +69,7 @@
#define D2REGC1 0x25
#define D3REGC1 0x26
unsigned char pcf50605_wakeup_flags = 0;
int pcf50605_read(int address)
{
@ -101,8 +102,7 @@ int pcf50605_write_multiple(int address, const unsigned char* buf, int count)
power on your iPod again. */
void pcf50605_standby_mode(void)
{
const char mask = pcf50605_read(OOCC1) | GOSTDBY | CHGWAK | EXTONWAK;
pcf50605_write(OOCC1, mask);
pcf50605_write(OOCC1, GOSTDBY | CHGWAK | EXTONWAK | pcf50605_wakeup_flags);
}
void pcf50605_init(void)

View file

@ -25,7 +25,9 @@
#include <stdbool.h>
/* Values which each disable one alarm time register */
static char alarm_disable[] = { 0x7f, 0x7f, 0x3f, 0x07, 0x3f, 0x1f, 0xff };
static const char alarm_disable[] = {
0x7f, 0x7f, 0x3f, 0x07, 0x3f, 0x1f, 0xff
};
void rtc_init(void)
{
@ -68,14 +70,16 @@ bool rtc_enable_alarm(bool enable)
pcf50605_write_multiple(0x14, alarm_disable + 3, 4);
/* Unmask the alarm interrupt (might be unneeded) */
pcf50605_write(0x5, pcf50605_read(0x5) & ~0x80);
/* Make sure wake on RTC is set */
pcf50605_write(0x8, pcf50605_read(0x8) | 0x10);
/* Make sure wake on RTC is set when shutting down */
pcf50605_wakeup_flags |= 0x10;
} else {
/* We use this year to indicate a disabled alarm. If you happen to live
* around this time and are annoyed by this, feel free to seek out my
* grave and do something nasty to it.
*/
pcf50605_write(0x17, 0x99);
/* Make sure we don't wake on RTC after shutting down */
pcf50605_wakeup_flags &= ~0x10;
}
return false;
}

View file

@ -20,6 +20,8 @@
#ifndef PCF50605_H
#define PCF50605_H
extern unsigned char pcf50605_wakeup_flags;
int pcf50605_read(int address);
int pcf50605_read_multiple(int address, unsigned char* buf, int count);
int pcf50605_write(int address, unsigned char val);