About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / sound / alsa / CMIPCI.txt


Based on kernel version 4.9. Page generated on 2016-12-21 14:37 EST.

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


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog