summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2011-11-16 10:25:43 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2011-11-16 10:25:43 +0000
commitbe716c0be80e3f64a81a3f19b683db40489f47a1 (patch)
treebc461ad1de8b5fda6c3c14d0cfd737bdc69ddc83 /firmware/target/arm/s5l8700
parentb7508a766df991539bec5e10fd7739001c1fdb99 (diff)
downloadrockbox-be716c0be80e3f64a81a3f19b683db40489f47a1.tar.gz
rockbox-be716c0be80e3f64a81a3f19b683db40489f47a1.zip
Finally commit FS#5111 - piezo clicker for ipods!
Origional implementation by Robert Keevil with contributions from Frederik Vestre, Stoyan Stratev, Craig Elliott, Michael Sparmann, Thomas Schott, Rosso Maltese, and syncs from a bunch of other people! git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30995 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s5l8700')
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/piezo-nano2g.c95
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/piezo.h24
2 files changed, 119 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/piezo-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/piezo-nano2g.c
new file mode 100644
index 0000000000..d555b7232f
--- /dev/null
+++ b/firmware/target/arm/s5l8700/ipodnano2g/piezo-nano2g.c
@@ -0,0 +1,95 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006-2007 Robert Keevil
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "system.h"
21#include "kernel.h"
22#include "piezo.h"
23
24static unsigned int duration;
25static bool beeping;
26
27void INT_TIMERD(void)
28{
29 /* clear interrupt */
30 TDCON = TDCON;
31 if (!(--duration))
32 {
33 beeping = 0;
34 TDCMD = (1 << 1); /* TD_CLR */
35 }
36}
37
38void piezo_start(unsigned short cycles, unsigned short periods)
39{
40#ifndef SIMULATOR
41 duration = periods;
42 beeping = 1;
43 /* configure timer for 100 kHz */
44 TDCMD = (1 << 1); /* TD_CLR */
45 TDPRE = 30 - 1; /* prescaler */
46 TDCON = (1 << 13) | /* TD_INT1_EN */
47 (0 << 12) | /* TD_INT0_EN */
48 (0 << 11) | /* TD_START */
49 (2 << 8) | /* TD_CS = PCLK / 16 */
50 (1 << 4); /* TD_MODE_SEL = PWM mode */
51 TDDATA0 = cycles; /* set interval period */
52 TDDATA1 = cycles << 1; /* set interval period */
53 TDCMD = (1 << 0); /* TD_EN */
54
55 /* enable timer interrupt */
56 INTMSK |= INTMSK_TIMERD;
57#endif
58}
59
60void piezo_stop(void)
61{
62#ifndef SIMULATOR
63 TDCMD = (1 << 1); /* TD_CLR */
64#endif
65}
66
67void piezo_clear(void)
68{
69 piezo_stop();
70}
71
72bool piezo_busy(void)
73{
74 return beeping;
75}
76
77void piezo_init(void)
78{
79 beeping = 0;
80}
81
82void piezo_button_beep(bool beep, bool force)
83{
84 if (force)
85 while (beeping)
86 yield();
87
88 if (!beeping)
89 {
90 if (beep)
91 piezo_start(22, 457);
92 else
93 piezo_start(40, 4);
94 }
95}
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/piezo.h b/firmware/target/arm/s5l8700/ipodnano2g/piezo.h
new file mode 100644
index 0000000000..b8eae0943d
--- /dev/null
+++ b/firmware/target/arm/s5l8700/ipodnano2g/piezo.h
@@ -0,0 +1,24 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006-2007 Robert Keevil
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20void piezo_init(void);
21void piezo_stop(void);
22void piezo_clear(void);
23bool piezo_busy(void);
24void piezo_button_beep(bool beep, bool force);