              Brief Notes on C-Media 8738/8338 Driver
              =======================================

                   Takashi Iwai <tiwai@suse.de>


Front/Rear Multi-channel Playback
---------------------------------

CM8x38 chip can use ADC as the second DAC so that two different stereo
channels can be used for front/rear playbacks.  Since there are two
DACs, both streams are handled independently unlike the 4/6ch multi-
channel playbacks in the section below.

As default, ALSA driver assigns the first PCM device (i.e. hw:0,0 for
card#0) for front and 4/6ch playbacks, while the second PCM device
(hw:0,1) is assigned to the second DAC for rear playback.

There are slight difference between two DACs.

- The first DAC supports U8 and S16LE formats, while the second DAC
  supports only S16LE.
- The second DAC supports only two channel stereo.

Please note that the CM8x38 DAC doesn't support continuous playback
rate but only fixed rates: 5512, 8000, 11025, 16000, 22050, 32000,
44100 and 48000 Hz.

*** WARNING ***
The biggest problem of 2nd DAC is that it has _NO_ mixer control.
It outputs always LOUDEST volume.  I don't know whether really a
hardware volume exists or not.  Anyway, so far, no info about it.
Please let me know if you have any info!!
*** WARNING ***

If your card has an extra output jack for the rear output, the rear
playback should be routed there as default.  If not, there is a
control switch in the driver "Line-In As Rear", which you can change
via alsamixer or somewhat else.  When this switch is on, line-in jack
is used as rear output.

There are two more controls regarding to the rear output.
The "Exchange DAC" switch is used to exchange front and rear playback
routes, i.e. the 2nd DAC is output from front output.
The "Analog For Channel" switch means that the front stereo channel is
duplicated to both front and rear outputs.


4/6 Multi-Channel Playback
--------------------------

The recent CM8738 chips support for the 4/6 multi-channel playback
function.  This is useful especially for AC3 decoding.

When the multi-channel is supported, the driver name has a suffix
"-MC" such like "CMI8738-MC6".  You can check this name from
/proc/asound/cards.

When the 4/6-ch output is enabled, the front DAC accepts up to 6 (or
4) channels.  This is different from the dual DACs described in the
previous section.  While the dual DAC supports two different rates or
formats, the 4/6-ch playback supports only the same condition for all
channels.

For using 4/6 channel playback, you need to specify the PCM channels
as you like and set the format S16LE.  For example, for playback with
4 channels,

	snd_pcm_hw_params_set_access(pcm, hw, SND_PCM_ACCESS_RW_INTERLEAVED);
	    // or mmap if you like
	snd_pcm_hw_params_set_format(pcm, hw, SND_PCM_FORMAT_S16_LE);
	snd_pcm_hw_params_set_channels(pcm, hw, 4);

and use the interleaved 4 channel data.

There is a control switch, "Line-In As Bass".  As you can imagine from
its name, the line-in jack is used for the bass (5th and 6th channels)
output.


Digital I/O
-----------

The CM8x38 provides the excellent SPDIF capability with very chip
price (yes, that's the reason I bought the card :)

The SPDIF playback and capture are done via the third PCM device
(hw:0,2).  The available rate is 44100 and 48000 Hz.
So far, only S16LE format is supported.  Still no 24bit.  Sorry, not
enough info for this.

The playback and capture over SPDIF use normal DAC and ADC,
respectively, so you cannot playback both analog and digital streams
simultaneously.

To enable SPDIF output, you need to turn on "IEC958 Output Switch"
control via mixer or alsactl.  Then you'll see the red light on from
the card so you know that's working obviously :)
The SPDIF input is always enabled, so you can hear SPDIF input data
from line-out with "IEC958 In Monitor" switch at any time (see
below).

Additionally there are relevant control switches:

"IEC958 DAC To Out" - Mix all analog streams including PCM playback,
	analog input loops, and FM-OPL/3, are output through SPDIF. 
	Note: without this control you can output PCM to SPDIF.
	This is "mixing" of streams, so e.g. it's not for AC3 output
	(see the next section).

"IEC958 Out To DAC" - SPDIF output can be heard from internal DAC.
	(what's for??)

"IEC958 Loop"       - SPDIF input data is loop back into SPDIF
	output (bypass)

"IEC958 Copyright"  - Set the copyright bit.

"IEC958 5V"         - Select 0.5V (coax) or 5V (optical) interface.
	On some cards this doesn't work and you need to change the
	configuration with hardware dip-switch.

"IEC958 In Monitor" - SPDIF input is routed to DAC.

"IEC958 In Phase Inverse" - Set SPDIF input format as inverse.

"IEC958 In Valid"   - Set input validity flag detection.

Note: When "PCM Playback Switch" is on, you'll hear the digital output
stream through analog line-out.


The AC3 (RAW DIGITAL) OUTPUT
----------------------------

The driver supports raw digital (typically AC3) i/o over SPDIF.  This
can be toggled via IEC958 playback control, but usually you need to
access it via alsa-lib.  See alsa-lib documents for more details.

On the raw digital mode, the "PCM Playback Switch" is automatically
turned off so that non-audio data is heard from the analog line-out.
Similarly the following switches are off: "IEC958 DAC to Out", "Out To
DAC" and "IEC958 Loop".  The switches are resumed after closing the
SPDIF PCM device automatically to the previous state.


ANALOG MIXER INTERFACE
----------------------

The mixer interface on CM8x38 is similar to SB16.
There are Master, PCM, Synth, CD, Line, Mic and PC Speaker playback
volumes.  Synth, CD, Line and Mic have playback and capture switches,
too, as well as SB16.

In addition to the standard SB mixer, CM8x38 provides more functions.
- PCM playback switch
- PCM capture switch (to capture the data sent to DAC)
- Mic Boost switch
- Mic capture volume
- Aux playback volume/switch and capture switch
- 3D control switch


MIDI CONTROLLER
---------------

The MPU401-UART interface is not enabled as default.
You need to pass a module option "snd_enable_midi=1" to
snd-card-cmipci module.

There is _no_ hardware wavetable function on this chip (except for
OPL3 synth below).
What's said as MIDI synth on Windows is a software synthesizer
emulation.  On Linux use TiMidity or other softsynth program for
playing MIDI music.


FM OPL/3 Synth
--------------

The FM OPL/3 is also not enabled as default.
Pass "snd_enable_fm=1" module option.

The output quality of FM OPL/3 is, however, very weird.
I don't know why..


Joystick and Modem
------------------

The joystick and modem should be available by enabling the control
switch "Joystick" and "Modem" respectively.  But I myself have never
tested them yet.


Debugging Information
---------------------

The registers are shown in /proc/asound/cardX/cmipci.  If you have any
problem (especially unexpected behavior of mixer), please attach the
output of this proc file together with the bug report.
