diff options
Diffstat (limited to 'firmware/target/arm/s5l8702')
-rw-r--r-- | firmware/target/arm/s5l8702/ipod6g/piezo-ipod6g.c | 28 | ||||
-rw-r--r-- | firmware/target/arm/s5l8702/ipod6g/piezo.h | 8 |
2 files changed, 36 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 | ||
100 | void 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 | |||
115 | void 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 | ||
diff --git a/firmware/target/arm/s5l8702/ipod6g/piezo.h b/firmware/target/arm/s5l8702/ipod6g/piezo.h index 987d4ffdda..063b8231a6 100644 --- a/firmware/target/arm/s5l8702/ipod6g/piezo.h +++ b/firmware/target/arm/s5l8702/ipod6g/piezo.h | |||
@@ -18,9 +18,17 @@ | |||
18 | * KIND, either express or implied. | 18 | * KIND, either express or implied. |
19 | * | 19 | * |
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #ifndef __PIEZO_H__ | ||
22 | #define __PIEZO_H__ | ||
21 | 23 | ||
22 | void piezo_init(void); | 24 | void piezo_init(void); |
23 | void piezo_stop(void); | 25 | void piezo_stop(void); |
24 | void piezo_clear(void); | 26 | void piezo_clear(void); |
25 | bool piezo_busy(void); | 27 | bool piezo_busy(void); |
26 | void piezo_button_beep(bool beep, bool force); | 28 | void piezo_button_beep(bool beep, bool force); |
29 | |||
30 | #ifdef BOOTLOADER | ||
31 | void piezo_seq(uint16_t *seq); | ||
32 | #endif | ||
33 | |||
34 | #endif /* __PIEZO_H__ */ | ||