forked from len0rd/rockbox
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 D2REGC1 0x25
|
||||||
#define D3REGC1 0x26
|
#define D3REGC1 0x26
|
||||||
|
|
||||||
|
unsigned char pcf50605_wakeup_flags = 0;
|
||||||
|
|
||||||
int pcf50605_read(int address)
|
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. */
|
power on your iPod again. */
|
||||||
void pcf50605_standby_mode(void)
|
void pcf50605_standby_mode(void)
|
||||||
{
|
{
|
||||||
const char mask = pcf50605_read(OOCC1) | GOSTDBY | CHGWAK | EXTONWAK;
|
pcf50605_write(OOCC1, GOSTDBY | CHGWAK | EXTONWAK | pcf50605_wakeup_flags);
|
||||||
pcf50605_write(OOCC1, mask);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pcf50605_init(void)
|
void pcf50605_init(void)
|
||||||
|
|
|
@ -25,7 +25,9 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
/* Values which each disable one alarm time register */
|
/* 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)
|
void rtc_init(void)
|
||||||
{
|
{
|
||||||
|
@ -68,14 +70,16 @@ bool rtc_enable_alarm(bool enable)
|
||||||
pcf50605_write_multiple(0x14, alarm_disable + 3, 4);
|
pcf50605_write_multiple(0x14, alarm_disable + 3, 4);
|
||||||
/* Unmask the alarm interrupt (might be unneeded) */
|
/* Unmask the alarm interrupt (might be unneeded) */
|
||||||
pcf50605_write(0x5, pcf50605_read(0x5) & ~0x80);
|
pcf50605_write(0x5, pcf50605_read(0x5) & ~0x80);
|
||||||
/* Make sure wake on RTC is set */
|
/* Make sure wake on RTC is set when shutting down */
|
||||||
pcf50605_write(0x8, pcf50605_read(0x8) | 0x10);
|
pcf50605_wakeup_flags |= 0x10;
|
||||||
} else {
|
} else {
|
||||||
/* We use this year to indicate a disabled alarm. If you happen to live
|
/* 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
|
* around this time and are annoyed by this, feel free to seek out my
|
||||||
* grave and do something nasty to it.
|
* grave and do something nasty to it.
|
||||||
*/
|
*/
|
||||||
pcf50605_write(0x17, 0x99);
|
pcf50605_write(0x17, 0x99);
|
||||||
|
/* Make sure we don't wake on RTC after shutting down */
|
||||||
|
pcf50605_wakeup_flags &= ~0x10;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#ifndef PCF50605_H
|
#ifndef PCF50605_H
|
||||||
#define PCF50605_H
|
#define PCF50605_H
|
||||||
|
|
||||||
|
extern unsigned char pcf50605_wakeup_flags;
|
||||||
|
|
||||||
int pcf50605_read(int address);
|
int pcf50605_read(int address);
|
||||||
int pcf50605_read_multiple(int address, unsigned char* buf, int count);
|
int pcf50605_read_multiple(int address, unsigned char* buf, int count);
|
||||||
int pcf50605_write(int address, unsigned char val);
|
int pcf50605_write(int address, unsigned char val);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue