123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- Brief Notes on C-Media 8338/8738/8768/8770 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 differences between the 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.
- The rear output can be heard only when "Four Channel Mode" switch is
- disabled. Otherwise no signal will be routed to the rear speakers.
- As default it's turned on.
- *** WARNING ***
- When "Four Channel Mode" switch is off, the output from rear speakers
- will be FULL VOLUME regardless of Master and PCM volumes.
- This might damage your audio equipment. Please disconnect speakers
- before your turn off this switch.
- *** WARNING ***
- [ Well.. I once got the output with correct volume (i.e. same with the
- front one) and was so excited. It was even with "Four Channel" bit
- on and "double DAC" mode. Actually I could hear separate 4 channels
- from front and rear speakers! But.. after reboot, all was gone.
- It's a very pity that I didn't save the register dump at that
- time.. Maybe there is an unknown register to achieve this... ]
- 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.
- 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 second DAC accepts up to 6 (or
- 4) channels. While the dual DAC supports two different rates or
- formats, the 4/6-ch playback supports only the same condition for all
- channels. Since the multi-channel playback mode uses both DACs, you
- cannot operate with full-duplex.
- The 4.0 and 5.1 modes are defined as the pcm "surround40" and "surround51"
- in alsa-lib. For example, you can play a WAV file with 6 channels like
- % aplay -Dsurround51 sixchannels.wav
- For programming the 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 are some control switchs affecting to the speaker connections:
- "Line-In Mode" - an enum control to change the behavior of line-in
- jack. Either "Line-In", "Rear Output" or "Bass Output" can
- be selected. The last item is available only with model 039
- or newer.
- When "Rear Output" is chosen, the surround channels 3 and 4
- are output to line-in jack.
- "Mic-In Mode" - an enum control to change the behavior of mic-in
- jack. Either "Mic-In" or "Center/LFE Output" can be
- selected.
- When "Center/LFE Output" is chosen, the center and bass
- channels (channels 5 and 6) are output to mic-in jack.
- Digital I/O
- -----------
- The CM8x38 provides the excellent SPDIF capability with very cheap
- 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). Usually this is assigned to the PCM device "spdif".
- The available rates are 44100 and 48000 Hz.
- For playback with aplay, you can run like below:
- % aplay -Dhw:0,2 foo.wav
- or
- % aplay -Dspdif foo.wav
- 24bit format is also supported experimentally.
- 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 ("IEC958" is the official name of
- so-called S/PDIF). 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).
- You can play via SPDIF even with the first device (hw:0,0),
- but SPDIF is enabled only when the proper format (S16LE), sample rate
- (441100 or 48000) and channels (2) are used. Otherwise it's turned
- off. (Also don't forget to turn on "IEC958 Output Switch", too.)
- Additionally there are relevant control switches:
- "IEC958 Mix Analog" - Mix analog PCM playback and FM-OPL/3 streams and
- output through SPDIF. This switch appears only on old chip
- models (CM8738 033 and 037).
- 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 In Select" - Select SPDIF input, the internal CD-in (false)
- and the external input (true).
- "IEC958 Loop" - SPDIF input data is loop back into SPDIF
- output (aka 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.
- [FIXME: this doesn't work on all chips..]
- "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 Mix Analog" and
- "IEC958 Loop". The switches are resumed after closing the SPDIF PCM
- device automatically to the previous state.
- On the model 033, AC3 is implemented by the software conversion in
- the alsa-lib. If you need to bypass the software conversion of IEC958
- subframes, pass the "soft_ac3=0" module option. This doesn't matter
- on the newer models.
- 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
- ---------------
- With CMI8338 chips, the MPU401-UART interface is disabled as default.
- You need to set the module option "mpu_port" to a valid I/O port address
- to enable MIDI support. Valid I/O ports are 0x300, 0x310, 0x320 and
- 0x330. Choose a value that doesn't conflict with other cards.
- With CMI8738 and newer chips, the MIDI interface is enabled by default
- and the driver automatically chooses a port address.
- 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 enabled as default only for the first card.
- Set "fm_port" module option for more cards.
- The output quality of FM OPL/3 is, however, very weird.
- I don't know why..
- CMI8768 and newer chips do not have the FM synth.
- Joystick and Modem
- ------------------
- The legacy joystick is supported. To enable the joystick support, pass
- joystick_port=1 module option. The value 1 means the auto-detection.
- If the auto-detection fails, try to pass the exact I/O address.
- The modem is enabled dynamically via a card control switch "Modem".
- 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.
|