summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c')
-rw-r--r--firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c b/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
index f3c00e34c5..06735673be 100644
--- a/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
+++ b/firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c
@@ -95,3 +95,31 @@ void piezo_button_beep(bool beep, bool force)
95 piezo_start(40, 4); 95 piezo_start(40, 4);
96 } 96 }
97} 97}
98
99#ifdef BOOTLOADER
100void piezo_tone(uint32_t period /*uS*/, int32_t duration /*ms*/)
101{
102 int32_t stop = USEC_TIMER + duration*1000;
103 uint32_t level = 0;
104
105 while ((int32_t)USEC_TIMER - stop < 0)
106 {
107 level ^= 1;
108 GPIOCMD = 0x0060e | level;
109 udelay(period >> 1);
110 }
111
112 GPIOCMD = 0x0060e;
113}
114
115void piezo_seq(uint16_t *seq)
116{
117 uint16_t period;
118
119 while ((period = *seq++) != 0)
120 {
121 piezo_tone(period, *seq++);
122 udelay(*seq++ * 1000);
123 }
124}
125#endif