xref: /linux/Documentation/sound/cards/cmipci.rst (revision 44f57d78)
1=================================================
2Brief Notes on C-Media 8338/8738/8768/8770 Driver
3=================================================
4
5Takashi Iwai <tiwai@suse.de>
6
7
8Front/Rear Multi-channel Playback
9---------------------------------
10
11CM8x38 chip can use ADC as the second DAC so that two different stereo
12channels can be used for front/rear playbacks.  Since there are two
13DACs, both streams are handled independently unlike the 4/6ch multi-
14channel playbacks in the section below.
15
16As default, ALSA driver assigns the first PCM device (i.e. hw:0,0 for
17card#0) for front and 4/6ch playbacks, while the second PCM device
18(hw:0,1) is assigned to the second DAC for rear playback.
19
20There are slight differences between the two DACs:
21
22- The first DAC supports U8 and S16LE formats, while the second DAC
23  supports only S16LE.
24- The second DAC supports only two channel stereo.
25
26Please note that the CM8x38 DAC doesn't support continuous playback
27rate but only fixed rates: 5512, 8000, 11025, 16000, 22050, 32000,
2844100 and 48000 Hz.
29
30The rear output can be heard only when "Four Channel Mode" switch is
31disabled.  Otherwise no signal will be routed to the rear speakers.
32As default it's turned on.
33
34.. WARNING::
35  When "Four Channel Mode" switch is off, the output from rear speakers
36  will be FULL VOLUME regardless of Master and PCM volumes [#]_.
37  This might damage your audio equipment.  Please disconnect speakers
38  before your turn off this switch.
39
40
41.. [#]
42  Well.. I once got the output with correct volume (i.e. same with the
43  front one) and was so excited.  It was even with "Four Channel" bit
44  on and "double DAC" mode.  Actually I could hear separate 4 channels
45  from front and rear speakers!  But.. after reboot, all was gone.
46  It's a very pity that I didn't save the register dump at that
47  time..  Maybe there is an unknown register to achieve this...
48
49If your card has an extra output jack for the rear output, the rear
50playback should be routed there as default.  If not, there is a
51control switch in the driver "Line-In As Rear", which you can change
52via alsamixer or somewhat else.  When this switch is on, line-in jack
53is used as rear output.
54
55There are two more controls regarding to the rear output.
56The "Exchange DAC" switch is used to exchange front and rear playback
57routes, i.e. the 2nd DAC is output from front output.
58
59
604/6 Multi-Channel Playback
61--------------------------
62
63The recent CM8738 chips support for the 4/6 multi-channel playback
64function.  This is useful especially for AC3 decoding.
65
66When the multi-channel is supported, the driver name has a suffix
67"-MC" such like "CMI8738-MC6".  You can check this name from
68/proc/asound/cards.
69
70When the 4/6-ch output is enabled, the second DAC accepts up to 6 (or
714) channels.  While the dual DAC supports two different rates or
72formats, the 4/6-ch playback supports only the same condition for all
73channels.  Since the multi-channel playback mode uses both DACs, you
74cannot operate with full-duplex.
75
76The 4.0 and 5.1 modes are defined as the pcm "surround40" and "surround51"
77in alsa-lib.  For example, you can play a WAV file with 6 channels like
78::
79
80	% aplay -Dsurround51 sixchannels.wav
81
82For programming the 4/6 channel playback, you need to specify the PCM
83channels as you like and set the format S16LE.  For example, for playback
84with 4 channels,
85::
86
87	snd_pcm_hw_params_set_access(pcm, hw, SND_PCM_ACCESS_RW_INTERLEAVED);
88	    // or mmap if you like
89	snd_pcm_hw_params_set_format(pcm, hw, SND_PCM_FORMAT_S16_LE);
90	snd_pcm_hw_params_set_channels(pcm, hw, 4);
91
92and use the interleaved 4 channel data.
93
94There are some control switches affecting to the speaker connections:
95
96Line-In Mode
97	an enum control to change the behavior of line-in
98	jack.  Either "Line-In", "Rear Output" or "Bass Output" can
99	be selected.  The last item is available only with model 039
100	or newer.
101	When "Rear Output" is chosen, the surround channels 3 and 4
102	are output to line-in jack.
103Mic-In Mode
104	an enum control to change the behavior of mic-in
105	jack.  Either "Mic-In" or "Center/LFE Output" can be
106	selected.
107	When "Center/LFE Output" is chosen, the center and bass
108	channels (channels 5 and 6) are output to mic-in jack.
109
110Digital I/O
111-----------
112
113The CM8x38 provides the excellent SPDIF capability with very cheap
114price (yes, that's the reason I bought the card :)
115
116The SPDIF playback and capture are done via the third PCM device
117(hw:0,2).  Usually this is assigned to the PCM device "spdif".
118The available rates are 44100 and 48000 Hz.
119For playback with aplay, you can run like below:
120::
121
122	% aplay -Dhw:0,2 foo.wav
123
124or
125
126::
127
128	% aplay -Dspdif foo.wav
129
13024bit format is also supported experimentally.
131
132The playback and capture over SPDIF use normal DAC and ADC,
133respectively, so you cannot playback both analog and digital streams
134simultaneously.
135
136To enable SPDIF output, you need to turn on "IEC958 Output Switch"
137control via mixer or alsactl ("IEC958" is the official name of
138so-called S/PDIF).  Then you'll see the red light on from the card so
139you know that's working obviously :)
140The SPDIF input is always enabled, so you can hear SPDIF input data
141from line-out with "IEC958 In Monitor" switch at any time (see
142below).
143
144You can play via SPDIF even with the first device (hw:0,0),
145but SPDIF is enabled only when the proper format (S16LE), sample rate
146(441100 or 48000) and channels (2) are used.  Otherwise it's turned
147off.  (Also don't forget to turn on "IEC958 Output Switch", too.)
148
149
150Additionally there are relevant control switches:
151
152IEC958 Mix Analog
153	Mix analog PCM playback and FM-OPL/3 streams and
154	output through SPDIF.  This switch appears only on old chip
155	models (CM8738 033 and 037).
156
157	Note: without this control you can output PCM to SPDIF.
158	This is "mixing" of streams, so e.g. it's not for AC3 output
159	(see the next section).
160
161IEC958 In Select
162	Select SPDIF input, the internal CD-in (false)
163	and the external input (true).
164
165IEC958 Loop
166	SPDIF input data is loop back into SPDIF
167	output (aka bypass)
168
169IEC958 Copyright
170	Set the copyright bit.
171
172IEC958 5V
173	Select 0.5V (coax) or 5V (optical) interface.
174	On some cards this doesn't work and you need to change the
175	configuration with hardware dip-switch.
176
177IEC958 In Monitor
178	SPDIF input is routed to DAC.
179
180IEC958 In Phase Inverse
181	Set SPDIF input format as inverse.
182	[FIXME: this doesn't work on all chips..]
183
184IEC958 In Valid
185	Set input validity flag detection.
186
187Note: When "PCM Playback Switch" is on, you'll hear the digital output
188stream through analog line-out.
189
190
191The AC3 (RAW DIGITAL) OUTPUT
192----------------------------
193
194The driver supports raw digital (typically AC3) i/o over SPDIF.  This
195can be toggled via IEC958 playback control, but usually you need to
196access it via alsa-lib.  See alsa-lib documents for more details.
197
198On the raw digital mode, the "PCM Playback Switch" is automatically
199turned off so that non-audio data is heard from the analog line-out.
200Similarly the following switches are off: "IEC958 Mix Analog" and
201"IEC958 Loop".  The switches are resumed after closing the SPDIF PCM
202device automatically to the previous state.
203
204On the model 033, AC3 is implemented by the software conversion in
205the alsa-lib.  If you need to bypass the software conversion of IEC958
206subframes, pass the "soft_ac3=0" module option.  This doesn't matter
207on the newer models.
208
209
210ANALOG MIXER INTERFACE
211----------------------
212
213The mixer interface on CM8x38 is similar to SB16.
214There are Master, PCM, Synth, CD, Line, Mic and PC Speaker playback
215volumes.  Synth, CD, Line and Mic have playback and capture switches,
216too, as well as SB16.
217
218In addition to the standard SB mixer, CM8x38 provides more functions.
219- PCM playback switch
220- PCM capture switch (to capture the data sent to DAC)
221- Mic Boost switch
222- Mic capture volume
223- Aux playback volume/switch and capture switch
224- 3D control switch
225
226
227MIDI CONTROLLER
228---------------
229
230With CMI8338 chips, the MPU401-UART interface is disabled as default.
231You need to set the module option "mpu_port" to a valid I/O port address
232to enable MIDI support.  Valid I/O ports are 0x300, 0x310, 0x320 and
2330x330.  Choose a value that doesn't conflict with other cards.
234
235With CMI8738 and newer chips, the MIDI interface is enabled by default
236and the driver automatically chooses a port address.
237
238There is *no* hardware wavetable function on this chip (except for
239OPL3 synth below).
240What's said as MIDI synth on Windows is a software synthesizer
241emulation.  On Linux use TiMidity or other softsynth program for
242playing MIDI music.
243
244
245FM OPL/3 Synth
246--------------
247
248The FM OPL/3 is also enabled as default only for the first card.
249Set "fm_port" module option for more cards.
250
251The output quality of FM OPL/3 is, however, very weird.
252I don't know why..
253
254CMI8768 and newer chips do not have the FM synth.
255
256
257Joystick and Modem
258------------------
259
260The legacy joystick is supported.  To enable the joystick support, pass
261joystick_port=1 module option.  The value 1 means the auto-detection.
262If the auto-detection fails, try to pass the exact I/O address.
263
264The modem is enabled dynamically via a card control switch "Modem".
265
266
267Debugging Information
268---------------------
269
270The registers are shown in /proc/asound/cardX/cmipci.  If you have any
271problem (especially unexpected behavior of mixer), please attach the
272output of this proc file together with the bug report.
273