3 * Copyright (C) 2007 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
4 * Copyright (C) 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
31 #define PIT_TICK_RATE 1193182UL
33 static void pcspkr_do_sound (unsigned int freq
)
35 unsigned int count
= 0;
38 count
= PIT_TICK_RATE
/freq
;
40 count
= 0; // disable sound
43 /* enable counter 2 */
44 outb_p(inb_p(0x61) | 3, 0x61);
45 /* set command for counter 2, 2 byte write */
47 /* select desired HZ */
48 outb_p(count
& 0xff, 0x42);
49 outb((count
>> 8) & 0xff, 0x42);
51 /* disable counter 2 */
52 outb(inb_p(0x61) & 0xFC, 0x61);
56 bool pcspk_acthandler (unsigned act
, unsigned freq
)
69 pcspkr_do_sound (freq
);