summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorCástor Muñoz <cmvidal@gmail.com>2014-12-01 03:47:41 +0100
committerCástor Muñoz <cmvidal@gmail.com>2014-12-08 03:11:34 +0100
commit9454ad4c9780230667a7f32d2b8b201342509d91 (patch)
treebf6feb5198149beebba0cacbacd803ca748cae36 /firmware
parentbfb63f801707e281317789c1a63ce745d5bae6e2 (diff)
downloadrockbox-9454ad4c9780230667a7f32d2b8b201342509d91.tar.gz
rockbox-9454ad4c9780230667a7f32d2b8b201342509d91.zip
iPod Classic: configure piezo GPIO ports
Configures piezo GPIO ports for the lowest power consumption when not in use. Change-Id: If80b0c947f197277972fd9319b8ab283cca96d3c
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c b/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
index 6a50ffc43c..f3c00e34c5 100644
--- a/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
+++ b/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
@@ -31,10 +31,7 @@ void INT_TIMERA(void)
31 /* clear interrupt */ 31 /* clear interrupt */
32 TACON = TACON; 32 TACON = TACON;
33 if (!(--duration)) 33 if (!(--duration))
34 { 34 piezo_stop();
35 beeping = 0;
36 TACMD = (1 << 1); /* TA_CLR */
37 }
38} 35}
39 36
40static void piezo_start(unsigned short cycles, unsigned short periods) 37static void piezo_start(unsigned short cycles, unsigned short periods)
@@ -42,14 +39,16 @@ static void piezo_start(unsigned short cycles, unsigned short periods)
42#ifndef SIMULATOR 39#ifndef SIMULATOR
43 duration = periods; 40 duration = periods;
44 beeping = 1; 41 beeping = 1;
45 /* configure timer for 100 kHz */ 42 /* select TA_OUT function on GPIO ports */
43 PCON0 = (PCON0 & 0x00ffffff) | 0x53000000;
44 /* configure timer for 100 kHz (12 MHz / 4 / 30) */
46 TACMD = (1 << 1); /* TA_CLR */ 45 TACMD = (1 << 1); /* TA_CLR */
47 TAPRE = 30 - 1; /* prescaler */ /* 12 MHz / 4 / 30 = 100 kHz */ 46 TAPRE = 30 - 1; /* prescaler */
48 TACON = (1 << 13) | /* TA_INT1_EN */ 47 TACON = (1 << 13) | /* TA_INT1_EN */
49 (0 << 12) | /* TA_INT0_EN */ 48 (0 << 12) | /* TA_INT0_EN */
50 (0 << 11) | /* TA_START */ 49 (0 << 11) | /* TA_START */
51 (1 << 8) | /* TA_CS = PCLK / 4 */ 50 (1 << 8) | /* TA_CS = ECLK / 4 */
52 (1 << 6) | /* UNKNOWN bit */ /* external 12 MHz clock ??? */ 51 (1 << 6) | /* select ECLK (12 MHz) */
53 (1 << 4); /* TA_MODE_SEL = PWM mode */ 52 (1 << 4); /* TA_MODE_SEL = PWM mode */
54 TADATA0 = cycles; /* set interval period */ 53 TADATA0 = cycles; /* set interval period */
55 TADATA1 = cycles << 1; /* set interval period */ 54 TADATA1 = cycles << 1; /* set interval period */
@@ -60,7 +59,10 @@ static void piezo_start(unsigned short cycles, unsigned short periods)
60void piezo_stop(void) 59void piezo_stop(void)
61{ 60{
62#ifndef SIMULATOR 61#ifndef SIMULATOR
62 beeping = 0;
63 TACMD = (1 << 1); /* TA_CLR */ 63 TACMD = (1 << 1); /* TA_CLR */
64 /* configure GPIO for the lowest power consumption */
65 PCON0 = (PCON0 & 0x00ffffff) | 0xee000000;
64#endif 66#endif
65} 67}
66 68
@@ -76,7 +78,7 @@ bool piezo_busy(void)
76 78
77void piezo_init(void) 79void piezo_init(void)
78{ 80{
79 beeping = 0; 81 piezo_stop();
80} 82}
81 83
82void piezo_button_beep(bool beep, bool force) 84void piezo_button_beep(bool beep, bool force)