[alsa-devel] Via VT2020: issues with kernel 2.6.38.{2, 3} (alsa 1.0.23) - working with 2.6.33.2 (alsa 1.0.21)
Raymond Yau
superquad.vortex2 at gmail.com
Mon Jun 20 09:13:02 CEST 2011
2011/6/20 alex dot baldacchino dot alsasub at gmail dot com
>>
>> Can your hear the same signal from black and orange jack when you
>> playing stereo to hw:0,0,0 ?
>>
>> if you look at snd_hda_multi_out_analog_prepare() in hda_codec.c,
>>
>> if mout->no_share_stream=0 ,it seem that there is "upmix" feature when
>> mout->num_dacs is 4 for those 5 jacks/6 jacks motherboard
>>
>> i.e. the black and orange jacks can have the same signal as the green jack
>>
>> /* front */
>> snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
>> 0, format);
>> if (!mout->no_share_stream &&
>> mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
>> /* headphone out will just decode front left/right (stereo) */
>> snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
>> 0, format);
>> /* extra outputs copied from front */
>> for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
>> if (!mout->no_share_stream && mout->extra_out_nid[i])
>> snd_hda_codec_setup_stream(codec,
>> mout->extra_out_nid[i],
>> stream_tag, 0, format);
>>
>> /* surrounds */
>> for (i = 1; i < mout->num_dacs; i++) {
>> if (chs >= (i + 1) * 2) /* independent out */
>> snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
>> i * 2, format);
>> else if (!mout->no_share_stream) /* copy front */
>> snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
>> 0, format);
>> }
>> return 0;
>> }
>>
>
>
> I fear I cannot test it the best way (I've got a 5.1 system, but have
> some 'logistic' problems using it). I've made an attempt by using two
> headphones, connected as follows:
>
> 1) one to (rear) green jack, one to orange,
> 2) one to green, one to black,
> 3) one to orange, one to black,
>
> and played a short two-channels file with aplay -Dhw:0,0,0 stereo.wav
> a few times, in each case I was able to here (same) sound from both
> headsets.
>
> However, it would seem to me that snd_hda_multi_out_analog_prepare()
> is not used by VIA Codecs, instead, some pcm operations are defined
> within patch_via.c and used by each codec, e.g.
>
Take a look at playback_multi_pcm_prep_0() in patch_via.c , it seem
this "copy front" mode is enabled by default in via codecs
/* front */
snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
0, format);
if (mout->hp_nid && mout->hp_nid != nids[HDA_FRONT]
&& !spec->hp_independent_mode)
/* headphone out will just decode front left/right (stereo) */
snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
0, format);
/* extra outputs copied from front */
for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
if (mout->extra_out_nid[i])
snd_hda_codec_setup_stream(codec,
mout->extra_out_nid[i],
stream_tag, 0, format);
/* surrounds */
for (i = 1; i < mout->num_dacs; i++) {
if (chs >= (i + 1) * 2) /* independent out */
snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
i * 2, format);
else /* copy front */
snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
0, format);
}
More information about the Alsa-devel
mailing list