| 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. |