iPod Classic: piezo support for bootloader

Low level functions that do not depend on Rockbox kernel,
intended to be used by the bootloader, dualboot-installer,
RB drivers or other .dfu tools.

Change-Id: If80214d26e505265ace19d9704f1e1300f98b2f4
This commit is contained in:
Cástor Muñoz 2016-02-05 01:12:02 +01:00
parent 9c032ba61a
commit e863f9a0ce
3 changed files with 37 additions and 1 deletions

View file

@ -95,3 +95,31 @@ void piezo_button_beep(bool beep, bool force)
piezo_start(40, 4);
}
}
#ifdef BOOTLOADER
void piezo_tone(uint32_t period /*uS*/, int32_t duration /*ms*/)
{
int32_t stop = USEC_TIMER + duration*1000;
uint32_t level = 0;
while ((int32_t)USEC_TIMER - stop < 0)
{
level ^= 1;
GPIOCMD = 0x0060e | level;
udelay(period >> 1);
}
GPIOCMD = 0x0060e;
}
void piezo_seq(uint16_t *seq)
{
uint16_t period;
while ((period = *seq++) != 0)
{
piezo_tone(period, *seq++);
udelay(*seq++ * 1000);
}
}
#endif

View file

@ -18,9 +18,17 @@
* KIND, either express or implied.
*
****************************************************************************/
#ifndef __PIEZO_H__
#define __PIEZO_H__
void piezo_init(void);
void piezo_stop(void);
void piezo_clear(void);
bool piezo_busy(void);
void piezo_button_beep(bool beep, bool force);
#ifdef BOOTLOADER
void piezo_seq(uint16_t *seq);
#endif
#endif /* __PIEZO_H__ */