| An OSS/Lite Driver for the ESS Maestro family of sound cards | |
| Zach Brown, December 1999 | |
| Driver Status and Availability | |
| ------------------------------ | |
| The most recent version of this driver will hopefully always be available at | |
| http://www.zabbo.net/maestro/ | |
| I will try and maintain the most recent stable version of the driver | |
| in both the stable and development kernel lines. | |
| ESS Maestro Chip Family | |
| ----------------------- | |
| There are 3 main variants of the ESS Maestro PCI sound chip. The first | |
| is the Maestro 1. It was originally produced by Platform Tech as the | |
| 'AGOGO'. It can be recognized by Platform Tech's PCI ID 0x1285 with | |
| 0x0100 as the device ID. It was put on some sound boards and a few laptops. | |
| ESS bought the design and cleaned it up as the Maestro 2. This starts | |
| their marking with the ESS vendor ID 0x125D and the 'year' device IDs. | |
| The Maestro 2 claims 0x1968 while the Maestro 2e has 0x1978. | |
| The various families of Maestro are mostly identical as far as this | |
| driver is concerned. It doesn't touch the DSP parts that differ (though | |
| it could for FM synthesis). | |
| Driver OSS Behavior | |
| -------------------- | |
| This OSS driver exports /dev/mixer and /dev/dsp to applications, which | |
| mostly adhere to the OSS spec. This driver doesn't register itself | |
| with /dev/sndstat, so don't expect information to appear there. | |
| The /dev/dsp device exported behaves almost as expected. Playback is | |
| supported in all the various lovely formats. 8/16bit stereo/mono from | |
| 8khz to 48khz, and mmap()ing for playback behaves. Capture/recording | |
| is limited due to oddities with the Maestro hardware. One can only | |
| record in 16bit stereo. For recording the maestro uses non interleaved | |
| stereo buffers so that mmap()ing the incoming data does not result in | |
| a ring buffer of LRLR data. mmap()ing of the read buffers is therefore | |
| disallowed until this can be cleaned up. | |
| /dev/mixer is an interface to the AC'97 codec on the Maestro. It is | |
| worth noting that there are a variety of AC'97s that can be wired to | |
| the Maestro. Which is used is entirely up to the hardware implementor. | |
| This should only be visible to the user by the presence, or lack, of | |
| 'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them. | |
| The driver doesn't support MIDI or FM playback at the moment. Typically | |
| the Maestro is wired to an MPU MIDI chip, but some hardware implementations | |
| don't. We need to assemble a white list of hardware implementations that | |
| have MIDI wired properly before we can claim to support it safely. | |
| Compiling and Installing | |
| ------------------------ | |
| With the drivers inclusion into the kernel, compiling and installing | |
| is the same as most OSS/Lite modular sound drivers. Compilation | |
| of the driver is enabled through the CONFIG_SOUND_MAESTRO variable | |
| in the config system. | |
| It may be modular or statically linked. If it is modular it should be | |
| installed with the rest of the modules for the kernel on the system. | |
| Typically this will be in /lib/modules/ somewhere. 'alias sound maestro' | |
| should also be added to your module configs (typically /etc/conf.modules) | |
| if you're using modular OSS/Lite sound and want to default to using a | |
| maestro chip. | |
| As this is a PCI device, the module does not need to be informed of | |
| any IO or IRQ resources it should use, it devines these from the | |
| system. Sometimes, on sucky PCs, the BIOS fails to allocated resources | |
| for the maestro. This will result in a message like: | |
| maestro: PCI subsystem reports IRQ 0, this might not be correct. | |
| from the kernel. Should this happen the sound chip most likely will | |
| not operate correctly. To solve this one has to dig through their BIOS | |
| (typically entered by hitting a hot key at boot time) and figure out | |
| what magic needs to happen so that the BIOS will reward the maestro with | |
| an IRQ. This operation is incredibly system specific, so you're on your | |
| own. Sometimes the magic lies in 'PNP Capable Operating System' settings. | |
| There are very few options to the driver. One is 'debug' which will | |
| tell the driver to print minimal debugging information as it runs. This | |
| can be collected with 'dmesg' or through the klogd daemon. | |
| The other, more interesting option, is 'dsps_order'. Typically at | |
| install time the driver will only register one available /dev/dsp device | |
| for its use. The 'dsps_order' module parameter allows for more devices | |
| to be allocated, as a power of two. Up to 4 devices can be registered | |
| ( dsps_order=2 ). These devices act as fully distinct units and use | |
| separate channels in the maestro. | |
| Power Management | |
| ---------------- | |
| As of version 0.14, this driver has a minimal understanding of PCI | |
| Power Management. If it finds a valid power management capability | |
| on the PCI device it will attempt to use the power management | |
| functions of the maestro. It will only do this on Maestro 2Es and | |
| only on machines that are known to function well. You can | |
| force the use of power management by setting the 'use_pm' module | |
| option to 1, or can disable it entirely by setting it to 0. | |
| When using power management, the driver does a few things | |
| differently. It will keep the chip in a lower power mode | |
| when the module is inserted but /dev/dsp is not open. This | |
| allows the mixer to function but turns off the clocks | |
| on other parts of the chip. When /dev/dsp is opened the chip | |
| is brought into full power mode, and brought back down | |
| when it is closed. It also powers down the chip entirely | |
| when the module is removed or the machine is shutdown. This | |
| can have nonobvious consequences. CD audio may not work | |
| after a power managing driver is removed. Also, software that | |
| doesn't understand power management may not be able to talk | |
| to the powered down chip until the machine goes through a hard | |
| reboot to bring it back. | |
| .. more details .. | |
| ------------------ | |
| drivers/sound/maestro.c contains comments that hopefully explain | |
| the maestro implementation. |