ESS Maestro 3/Allegro
This driver is a work in progress and aims to support the ESS Maestro 3 and Allegro sound cards. It is based on Darrell Anderson's 4.2-STABLE maestro3 driver found here, which in turn is based on Zach Brown's Linux driver found here. This driver now works on 5.0-CURRENT and 4-STABLE.

Background
The Maestro3 and Allegro cards contain an AC97 compliant mixer and programmable DSP. What makes this card magic is that pcm functions are performed by firmware that is loaded into the dsp core. Unfortunately, ESS has not released any programming specs on the DSP and has only provided firmware images for the dsp kernel and a simple sample-rate-converter. The firmware images also seems to be GPL'd at this time; I hope to have them re-licensed before final release.

Fun fact: I've discovered that the Maestro3 can play up to 32 channels simulateously (the Allegro can only do 16). /dev/dsp0.[0-31] anyone?

Status
I now consider this done, with the exception of maintenance/bug fixes. Four play and one record channels are enabled and the mixer works, though I can't figure out the magic for the volume buttons found on many laptops with these chips. The headers may or may not ever be re-written/re-licensed to a BSD license. Still, good luck, have fun with this, please let me know of your success/failure, and don't blame me when your computer catches fire.

UPDATE Mar 4, 2001
A couple of weeks ago the pcm framework was fixed in -STABLE to allow sound hardware drivers to be loaded as modules (thanks Cameron). As a result, I have checked in the maestro3 driver to -STABLE in preparation for the release of FreeBSD 4.3. Thanks once again to Darrell and Cameron for everything they did to make this happen.

UPDATE Feb 9, 2001
No changes, just wanted to let people know that neither mine nor Darrell's driver will work in -STABLE right now. We are working on resolving this.

UPDATE Feb 1, 2001
The driver has made it into 5.0-CURRENT. I will put it into the 4-STABLE branch once it has had a little shake-out time. Until then, head over to Darrell's page and get his 4-STABLE version of the driver.

UPDATE Jan 31, 2001
Did some more cleanups in preparation for committing the driver.

UPDATE Jan 27, 2001
Cleanup has been done, and a few small things tweaked. I'm hoping to get this checked in to -current soon. Unfortunately, it seems that re-licensing the headers has stalled, so this driver will not be part of the GENERIC kernel.

UPDATE Jan 5, 2001
Recording seems to work. I'm not having much luck with the built-in mike on my system, but recording from the CD channel works. So I have enabled one recording channel. Yah! I am also trying to get the hardware volume control buttons to work; they appear to be fairly simple, yet there is something I'm missing. Please let me know if they work for you.

UPDATE Dec 31, 2000
I have merged with Darrell Anderson's driver and adapted it for 5.0-CURRENT. As an added bonus, this driver also suspends/resumes correctly.


Bugs
  1. Initializing the mixer funks up the level settings of the various channels.
  2. Suspend/resume doesn't re-init the mixer, due to (1).
  3. When allocating the DMA buffer, no check is made that the buffer was actually allocated. Darrell has this fixed, I've just been to lazy to do the same.
  4. Locking is desperately needed. I'm kinda scared to find out if the driver works on SMP or not.

Files
/sys/modules/sound/driver/maestro3/Makefile
/sys/dev/sound/pci/maestro3.c
/sys/gnu/dev/sound/pci/maestro3_reg.h
/sys/gnu/dev/sound/pci/maestro3_dsp.h
/sys/dev/sound/pcm/ac97.c.diff patch for existing ac97.c (optional, not needed for operation)

Authors
Scott Long
Darrel Anderson