The sound story

OpenBSD rocks! Secure by default .. thats what i liked about it. Installation was a breeze. Got all hardware and X running. But audio did not seem to work! I have a Intel 865 mother board and dmesg showed that the on board audio device was detected.

"Intel 82801EB/ER SMBus" rev 0x02 at pci0 dev 31 function 3 not configured
auich0 at pci0 dev 31 function 5 "Intel 82801EB/ER AC97" rev 0x02: apic 2 int 17 (irq 3), ICH5 AC97
ac97: codec id 0x41445375 (Analog Devices AD1985)
ac97: codec features headphone, 20 bit DAC, No 3D Stereo
audio0 at auich0

mpg123, xmms all players seemed to play songs but there was no sound. I tried unmuting the ouput master and a few other with mixerctl but yet there was no audio.

Googling too did not gimme any solution until i found this link Patch for broken ICH5 audio on 865PERL board.

To cut the long story short, the register reads in /usr/src/sys/dev/ic/ac97.c needs to be reorderd. Its just about replacing 1 line. For this, u will need the kernel source which can be found on the CDROM or openbsd ftp sites as src.tar.gz and sys.tar.gz.

Assuming that u are root and your kernel sources are in /usr/src, depending on your platform (i386,alpha,macppc etc), do the following

vinay$ cd /usr/src/sys/arch/i386/conf
vinay$ config GENERIC

If u check from line 745 of ac97.c u will see something like

vinay$ less +745 /usr/src/sys/dev/ic/ac97.c

        ac97_read(as, AC97_REG_VENDOR_ID1, &id1);
        ac97_read(as, AC97_REG_VENDOR_ID2, &id2);
        ac97_read(as, AC97_REG_RESET, &as->caps);   //<------ this line

The last line AC97_REG_RESET needs to be the first of the ac97_read(s). So, change the above to

        ac97_read(as, AC97_REG_RESET, &as->caps);
        ac97_read(as, AC97_REG_VENDOR_ID1, &id1);
        ac97_read(as, AC97_REG_VENDOR_ID2, &id2);

Now recompile the kernel

vinay$ cd /usr/src/sys/arch/i386/compile/GENERIC && make clean && make depend && make
#Backup old kernel and install new kernel
vinay$ cp /bsd /bsd.old; cp /usr/src/sys/arch/i386/compile/GENERIC/bsd /bsd

Reboot, and u will have to do

vinay$ mixerctl -w outputs.surround.mute=off 

Thats it! Audio works.