From 9454ad4c9780230667a7f32d2b8b201342509d91 Mon Sep 17 00:00:00 2001 From: Cástor Muñoz Date: Mon, 1 Dec 2014 03:47:41 +0100 Subject: iPod Classic: configure piezo GPIO ports Configures piezo GPIO ports for the lowest power consumption when not in use. Change-Id: If80b0c947f197277972fd9319b8ab283cca96d3c --- firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'firmware/target') 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) /* clear interrupt */ TACON = TACON; if (!(--duration)) - { - beeping = 0; - TACMD = (1 << 1); /* TA_CLR */ - } + piezo_stop(); } static void piezo_start(unsigned short cycles, unsigned short periods) @@ -42,14 +39,16 @@ static void piezo_start(unsigned short cycles, unsigned short periods) #ifndef SIMULATOR duration = periods; beeping = 1; - /* configure timer for 100 kHz */ + /* select TA_OUT function on GPIO ports */ + PCON0 = (PCON0 & 0x00ffffff) | 0x53000000; + /* configure timer for 100 kHz (12 MHz / 4 / 30) */ TACMD = (1 << 1); /* TA_CLR */ - TAPRE = 30 - 1; /* prescaler */ /* 12 MHz / 4 / 30 = 100 kHz */ + TAPRE = 30 - 1; /* prescaler */ TACON = (1 << 13) | /* TA_INT1_EN */ (0 << 12) | /* TA_INT0_EN */ (0 << 11) | /* TA_START */ - (1 << 8) | /* TA_CS = PCLK / 4 */ - (1 << 6) | /* UNKNOWN bit */ /* external 12 MHz clock ??? */ + (1 << 8) | /* TA_CS = ECLK / 4 */ + (1 << 6) | /* select ECLK (12 MHz) */ (1 << 4); /* TA_MODE_SEL = PWM mode */ TADATA0 = cycles; /* set interval period */ TADATA1 = cycles << 1; /* set interval period */ @@ -60,7 +59,10 @@ static void piezo_start(unsigned short cycles, unsigned short periods) void piezo_stop(void) { #ifndef SIMULATOR + beeping = 0; TACMD = (1 << 1); /* TA_CLR */ + /* configure GPIO for the lowest power consumption */ + PCON0 = (PCON0 & 0x00ffffff) | 0xee000000; #endif } @@ -76,7 +78,7 @@ bool piezo_busy(void) void piezo_init(void) { - beeping = 0; + piezo_stop(); } void piezo_button_beep(bool beep, bool force) -- cgit v1.2.3