Stefan Reinauer (stefan.reinauer@coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/337
-gerrit
commit 4fa81f7cbcce03bb8679a69f073cd9317fde4412 Author: Stefan Reinauer reinauer@chromium.org Date: Tue Oct 25 14:15:57 2011 -0700
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 --- payloads/libpayload/drivers/speaker.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/payloads/libpayload/drivers/speaker.c b/payloads/libpayload/drivers/speaker.c index 3b3a750..3a561bc 100644 --- a/payloads/libpayload/drivers/speaker.c +++ b/payloads/libpayload/drivers/speaker.c @@ -60,13 +60,15 @@ */ void speaker_enable(u16 freq) { + u16 reg16 = 1193180 / freq; + /* Select counter 2. Read/write LSB first, then MSB. Use mode 3 (square wave generator). Use a 16bit binary counter. */ outb(0xb6, I82C54_CONTROL_WORD_REGISTER);
/* Set the desired tone frequency. */ - outb((u8)(freq & 0x00ff), I82C54_COUNTER2); /* LSB. */ - outb((u8)(freq >> 8), I82C54_COUNTER2); /* MSB. */ + outb((u8)(reg16 & 0x00ff), I82C54_COUNTER2); /* LSB. */ + outb((u8)(reg16 >> 8), I82C54_COUNTER2); /* MSB. */
/* Enable the PC speaker (set bits 0 and 1). */ outb(inb(PC_SPEAKER_PORT) | 0x03, PC_SPEAKER_PORT);