pc80/i8254: Add speaker beep function
Some platforms have an onboard speaker which could be used as an indicator of successful boot or critical error, e.g. in die_notify function. The function assumes that SPKR GPIO is properly configured by the platform code. Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com> Change-Id: I8189b3462bb5140af352fa786db3a6a2a45076f2 Reviewed-on: https://review.coreboot.org/c/coreboot/+/68100 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Krystian Hebel <krystian.hebel@3mdeb.com>
This commit is contained in:
parent
53ee1bba72
commit
23b7948355
|
@ -3,6 +3,7 @@
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <commonlib/helpers.h>
|
#include <commonlib/helpers.h>
|
||||||
#include <cpu/x86/tsc.h>
|
#include <cpu/x86/tsc.h>
|
||||||
|
#include <delay.h>
|
||||||
#include <pc80/i8254.h>
|
#include <pc80/i8254.h>
|
||||||
|
|
||||||
/* Initialize i8254 timers */
|
/* Initialize i8254 timers */
|
||||||
|
@ -110,3 +111,24 @@ unsigned long tsc_freq_mhz(void)
|
||||||
return timer_tsc;
|
return timer_tsc;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void beep(unsigned int frequency_hz, unsigned int duration_msec)
|
||||||
|
{
|
||||||
|
unsigned int count = CLOCK_TICK_RATE / frequency_hz;
|
||||||
|
|
||||||
|
/* Set command for counter 2, 2 byte write, mode 3 */
|
||||||
|
outb(TIMER2_SEL | WORD_ACCESS | MODE3, TIMER_MODE_PORT);
|
||||||
|
|
||||||
|
/* Select desired Hz */
|
||||||
|
outb(count & 0xff, TIMER2_PORT);
|
||||||
|
outb((count >> 8) & 0xff, TIMER2_PORT);
|
||||||
|
|
||||||
|
/* Switch on the speaker */
|
||||||
|
outb(inb(PPC_PORTB) | (PPCB_T2GATE | PPCB_SPKR), PPC_PORTB);
|
||||||
|
|
||||||
|
/* Block for specified milliseconds */
|
||||||
|
mdelay(duration_msec);
|
||||||
|
|
||||||
|
/* Switch off the speaker */
|
||||||
|
outb(inb(PPC_PORTB) & ~(PPCB_T2GATE | PPCB_SPKR), PPC_PORTB);
|
||||||
|
}
|
||||||
|
|
|
@ -43,5 +43,6 @@
|
||||||
|
|
||||||
void setup_i8254(void);
|
void setup_i8254(void);
|
||||||
unsigned long calibrate_tsc_with_pit(void);
|
unsigned long calibrate_tsc_with_pit(void);
|
||||||
|
void beep(unsigned int frequency_hz, unsigned int duration_msec);
|
||||||
|
|
||||||
#endif /* PC80_I8254_H */
|
#endif /* PC80_I8254_H */
|
||||||
|
|
Loading…
Reference in New Issue