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:
parent
49a9e1ef35
commit
1ef5dadec5
3 changed files with 11 additions and 5 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue