Fix libpayload speaker driver
The frequency for the PC speaker has to be specified as 1193180 / frequency according to http://wiki.osdev.org/PC_Speaker Change-Id: Iaca9d45807e080efe834611e719b350680b5fb90 Signed-off-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: http://review.coreboot.org/337 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
6eb8bef25e
commit
bbfc9c449f
|
@ -60,13 +60,15 @@
|
||||||
*/
|
*/
|
||||||
void speaker_enable(u16 freq)
|
void speaker_enable(u16 freq)
|
||||||
{
|
{
|
||||||
|
u16 reg16 = 1193180 / freq;
|
||||||
|
|
||||||
/* Select counter 2. Read/write LSB first, then MSB. Use mode 3
|
/* Select counter 2. Read/write LSB first, then MSB. Use mode 3
|
||||||
(square wave generator). Use a 16bit binary counter. */
|
(square wave generator). Use a 16bit binary counter. */
|
||||||
outb(0xb6, I82C54_CONTROL_WORD_REGISTER);
|
outb(0xb6, I82C54_CONTROL_WORD_REGISTER);
|
||||||
|
|
||||||
/* Set the desired tone frequency. */
|
/* Set the desired tone frequency. */
|
||||||
outb((u8)(freq & 0x00ff), I82C54_COUNTER2); /* LSB. */
|
outb((u8)(reg16 & 0x00ff), I82C54_COUNTER2); /* LSB. */
|
||||||
outb((u8)(freq >> 8), I82C54_COUNTER2); /* MSB. */
|
outb((u8)(reg16 >> 8), I82C54_COUNTER2); /* MSB. */
|
||||||
|
|
||||||
/* Enable the PC speaker (set bits 0 and 1). */
|
/* Enable the PC speaker (set bits 0 and 1). */
|
||||||
outb(inb(PC_SPEAKER_PORT) | 0x03, PC_SPEAKER_PORT);
|
outb(inb(PC_SPEAKER_PORT) | 0x03, PC_SPEAKER_PORT);
|
||||||
|
|
Loading…
Reference in New Issue