| 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. |