[alsa-devel] Smart 5.1 function not working on VIA VT1708S with *three* jacks on mainboard
Viliam Kubis
viliam.kubis at gmail.com
Mon Jul 12 12:58:54 CEST 2010
Oh my god!! It actually works!!! :) At first speaker-test was not working,
but with
[kbs1 at localhost a]$ speaker-test -c4 -twav -Dsurround40 <--------- THIS
speaker-test 1.0.23
Playback device is surround40
Stream parameters are 48000Hz, S16_LE, 4 channels
WAV file(s)
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 32 to 8192
Period size range from 16 to 4096
Using max buffer size 8192
Periods = 4
was set period_size = 2048
was set buffer_size = 8192
0 - Front Left
1 - Front Right
3 - Rear Right <-------------- THIS PLAYS
2 - Rear Left <-------------- AND THIS PLAYS!!
Time per period = 5.718945
0 - Front Left
^C
[kbs1 at localhost a]$
Finally! My audio experience is now at a whole new level. Thank you very
much, I will post this patch to alsa-bugtracker and close the bug, I was
starting to think that this is a kernel problem, but now it just works
GREAT.
Maybe you can add this patch to official alsa-driver version on next
release.
Have a nice day!
Best Regards
Viliam Kubis
On Mon, 12 Jul 2010 08:57:59 +0200, Clemens Ladisch <clemens at ladisch.de>
wrote:
> Viliam Kubis wrote:
>> I have tried the patch ..., but the surround does not work.
>
> Okay, next try:
>
> --- a/sound/pci/hda/patch_via.c
> +++ b/sound/pci/hda/patch_via.c
> @@ -552,24 +552,30 @@ static void via_auto_init_hp_out(struct
> }
> }
> +static int is_smart51_pins(struct via_spec *spec, hda_nid_t pin);
> +
> static void via_auto_init_analog_input(struct hda_codec *codec)
> {
> struct via_spec *spec = codec->spec;
> + unsigned int ctl;
> int i;
> for (i = 0; i < AUTO_PIN_LAST; i++) {
> hda_nid_t nid = spec->autocfg.input_pins[i];
> + if (!nid)
> + continue;
> + if (spec->smart51_enabled && is_smart51_pins(spec, nid))
> + ctl = PIN_OUT;
> + else if (i <= AUTO_PIN_FRONT_MIC)
> + ctl = PIN_VREF50;
> + else
> + ctl = PIN_IN;
> snd_hda_codec_write(codec, nid, 0,
> - AC_VERB_SET_PIN_WIDGET_CONTROL,
> - (i <= AUTO_PIN_FRONT_MIC ?
> - PIN_VREF50 : PIN_IN));
> -
> + AC_VERB_SET_PIN_WIDGET_CONTROL, ctl);
> }
> }
> -static int is_smart51_pins(struct via_spec *spec, hda_nid_t pin);
> -
> static void set_pin_power_state(struct hda_codec *codec, hda_nid_t nid,
> unsigned int *affected_parm)
> {
> @@ -658,6 +664,8 @@ static void set_jack_power_state(struct
> /* PW0 (19h), SW1 (18h), AOW1 (11h) */
> parm = AC_PWRST_D3;
> set_pin_power_state(codec, 0x19, &parm);
> + if (spec->smart51_enabled)
> + parm = AC_PWRST_D0;
> snd_hda_codec_write(codec, 0x18, 0, AC_VERB_SET_POWER_STATE,
> parm);
> snd_hda_codec_write(codec, 0x11, 0, AC_VERB_SET_POWER_STATE,
> @@ -667,6 +675,8 @@ static void set_jack_power_state(struct
> if (is_8ch) {
> parm = AC_PWRST_D3;
> set_pin_power_state(codec, 0x22, &parm);
> + if (spec->smart51_enabled)
> + parm = AC_PWRST_D0;
> snd_hda_codec_write(codec, 0x26, 0,
> AC_VERB_SET_POWER_STATE, parm);
> snd_hda_codec_write(codec, 0x24, 0,
> @@ -3915,6 +3925,13 @@ static int vt1708S_auto_fill_dac_nids(st
> }
> }
> + /* for Smart 5.1, line/mic inputs double as output pins */
> + if (cfg->line_outs == 1) {
> + spec->multiout.num_dacs = 3;
> + spec->multiout.dac_nids[AUTO_SEQ_SURROUND] = 0x11;
> + spec->multiout.dac_nids[AUTO_SEQ_CENLFE] = 0x24;
> + }
> +
> return 0;
> }
> @@ -3932,7 +3949,8 @@ static int vt1708S_auto_create_multi_out
> for (i = 0; i <= AUTO_SEQ_SIDE; i++) {
> nid = cfg->line_out_pins[i];
> - if (!nid)
> + /* for Smart 5.1, there are always at least six channels */
> + if (!nid && i > AUTO_SEQ_CENLFE)
> continue;
> nid_vol = nid_vols[i];
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
More information about the Alsa-devel
mailing list