cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cmipci.rst (9337B)


      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.