Clemens Ladisch | 45c41b4 | 2007-08-22 09:45:03 +0200 | [diff] [blame] | 1 | Brief Notes on C-Media 8338/8738/8768/8770 Driver |
| 2 | ================================================= |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Matt LaPlante | 53cb472 | 2006-10-03 22:55:17 +0200 | [diff] [blame] | 19 | There are slight differences between the two DACs: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 20 | |
| 21 | - The first DAC supports U8 and S16LE formats, while the second DAC |
| 22 | supports only S16LE. |
Matt LaPlante | 53cb472 | 2006-10-03 22:55:17 +0200 | [diff] [blame] | 23 | - The second DAC supports only two channel stereo. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Matt LaPlante | 992caac | 2006-10-03 22:52:05 +0200 | [diff] [blame] | 79 | For programming the 4/6 channel playback, you need to specify the PCM |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 switchs affecting to the speaker connections: |
| 91 | |
Takashi Iwai | d6e3379 | 2005-05-24 10:40:49 +0200 | [diff] [blame] | 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. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 103 | |
| 104 | Digital I/O |
| 105 | ----------- |
| 106 | |
Takashi Iwai | d6e3379 | 2005-05-24 10:40:49 +0200 | [diff] [blame] | 107 | The CM8x38 provides the excellent SPDIF capability with very cheap |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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" |
Takashi Iwai | d6e3379 | 2005-05-24 10:40:49 +0200 | [diff] [blame] | 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 :) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Clemens Ladisch | c78c950 | 2007-09-03 09:55:49 +0200 | [diff] [blame] | 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. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Clemens Ladisch | 45c41b4 | 2007-08-22 09:45:03 +0200 | [diff] [blame] | 236 | CMI8768 and newer chips do not have the FM synth. |
| 237 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 238 | |
| 239 | Joystick and Modem |
| 240 | ------------------ |
| 241 | |
Takashi Iwai | d6e3379 | 2005-05-24 10:40:49 +0200 | [diff] [blame] | 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". |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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. |