All of lore.kernel.org
 help / color / mirror / Atom feed
* Fix for Asus G75 notebook subwoofer
@ 2012-10-31 16:49 Massimo Del Fedele
  2012-11-01  8:11 ` Raymond Yau
  2012-11-06  8:36 ` Takashi Iwai
  0 siblings, 2 replies; 24+ messages in thread
From: Massimo Del Fedele @ 2012-10-31 16:49 UTC (permalink / raw)
  To: alsa-devel

This code fixes surround path of asus G75; i'll drop here as a function to be called
before codec initialization (I did it in static int patch_vt2002P() ) because I don't
know how to detect the notebook and apply it only when needed (I'm new to alsa code).

/* Fixes for Asus G75 subwoofer
    pin 24 is marked as speaker by bios -- should mark as line
    pin 33 has a wrong connection to out-of-range nid #3e
*/
  static int fix_asus_g75_subwoofer(struct hda_codec *codec)
  {
	/* right connection to pin widget #33 */
	hda_nid_t conn[8] = {0x1c};
	unsigned int conf;
	
	/* Fix connection of pin widget #33 on VT1802p
	 * reported connection (33-1e) refers to non-existent widget #1e which in turn
	 * reports a connection to #1c; we skip nonexistent 1e widget landing directly
	 * on 1c one
	 */
  	snd_hda_override_conn_list(codec, 0x33, 1, conn);

	// pin 24 should be marked as line out pin (not speaker as in bios)
	// and as AC_JACK_PORT_COMPLEX connection to avoid to be taken by autoparser as a speaker
	conf = snd_hda_codec_get_pincfg(codec, 0x24);
	conf = conf & ~AC_DEFCFG_DEVICE;
	conf = (conf & ~AC_DEFCFG_PORT_CONN) | (AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT);
	snd_hda_codec_set_pincfg(codec, 0x24, conf);
	
	// pin 33 should be marked as line out pin (not speaker as in bios)
	// and as AC_JACK_PORT_COMPLEX, not AC_JACK_PORT_NONE as in bios
	conf = snd_hda_codec_get_pincfg(codec, 0x33);
	conf = conf & ~AC_DEFCFG_DEVICE;
	conf = (conf & ~AC_DEFCFG_PORT_CONN) | (AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT);
	snd_hda_codec_set_pincfg(codec, 0x33, conf);

	return 0;
}

I guess that the fix on NID #33 should be applied anyways on VT1802p, because by now it connects to a non-existing widget
(well, it does exist but is not documented and out of NID range; it should be a stereo-to-mono mixer).
BTW, also NID #34, which has 2 connections, has one of them to non-existing nid above; in my case it does no harm :

Widget #24 -- ANALOG STEREO PIN COMPLEX
	Input from widgets :  14 3e       <-- widget 3e is out of range, but connects to 1c widget
	Connection type : JACK
	Device          : LINE OUT
	Does NOT support unsolicited response
	Out amp  present
	In amp NOT present

Ciao

Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-10-31 16:49 Fix for Asus G75 notebook subwoofer Massimo Del Fedele
@ 2012-11-01  8:11 ` Raymond Yau
  2012-11-01 11:15   ` Massimo Del Fedele
  2012-11-06  8:36 ` Takashi Iwai
  1 sibling, 1 reply; 24+ messages in thread
From: Raymond Yau @ 2012-11-01  8:11 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

>
> This code fixes surround path of asus G75; i'll drop here as a function
to be called
> before codec initialization (I did it in static int patch_vt2002P() )
because I don't
> know how to detect the notebook and apply it only when needed (I'm new to
alsa code).
>
> /* Fixes for Asus G75 subwoofer
>    pin 24 is marked as speaker by bios -- should mark as line
>    pin 33 has a wrong connection to out-of-range nid #3e
> */

can you post the output of alsa-info.sh ?

http://git.kernel.org/?p=linux/kernel/git/tiwai/hda-emu.git;a=blob_plain;f=codecs/vt1802-asus-u30s;hb=HEAD

   9.337454] ALSA hda_codec.c:4877 autoconfig: line_outs=1
(0x24/0x0/0x0/0x0/0x0) type:speaker
[    9.337458] ALSA hda_codec.c:4881    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    9.337460] ALSA hda_codec.c:4885    hp_outs=1 (0x25/0x0/0x0/0x0/0x0)
[    9.337462] ALSA hda_codec.c:4886    mono: mono_out=0x0
[    9.337464] ALSA hda_codec.c:4889    dig-out=0x2d/0x0
[    9.337465] ALSA hda_codec.c:4890    inputs:
[    9.337467] ALSA hda_codec.c:4894  Internal Mic=0x29
[    9.337469] ALSA hda_codec.c:4894  Mic=0x2b

it is the auto parser put the speaker to autocfg->lineout

vt1802 also has connection to 0x3e in node 0x24 and 0x33

you cannot change the pin default from speaker of 0x24 to lineout if node
0x33 only support mono

should the auto parser put it into autocfg->mono_out?

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-01  8:11 ` Raymond Yau
@ 2012-11-01 11:15   ` Massimo Del Fedele
  2012-11-02  1:44     ` Raymond Yau
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-01 11:15 UTC (permalink / raw)
  To: alsa-devel

Il 01/11/2012 09:11, Raymond Yau ha scritto:

>
> can you post the output of alsa-info.sh ?

Where can I find the script ? I've not it on my machine
>
> http://git.kernel.org/?p=linux/kernel/git/tiwai/hda-emu.git;a=blob_plain;f=codecs/vt1802-asus-u30s;hb=HEAD
>
>     9.337454] ALSA hda_codec.c:4877 autoconfig: line_outs=1
> (0x24/0x0/0x0/0x0/0x0) type:speaker
> [    9.337458] ALSA hda_codec.c:4881    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
> [    9.337460] ALSA hda_codec.c:4885    hp_outs=1 (0x25/0x0/0x0/0x0/0x0)
> [    9.337462] ALSA hda_codec.c:4886    mono: mono_out=0x0
> [    9.337464] ALSA hda_codec.c:4889    dig-out=0x2d/0x0
> [    9.337465] ALSA hda_codec.c:4890    inputs:
> [    9.337467] ALSA hda_codec.c:4894  Internal Mic=0x29
> [    9.337469] ALSA hda_codec.c:4894  Mic=0x2b
>
> it is the auto parser put the speaker to autocfg->lineout

Yep, if you look at above, this one was exactly the output before my 2 patches; the only difference
was line 24, marked as type=SPEAKER; no trace of mono pin 0x33.
I guess the 0x33 is skipped because the parser don't find a path from it, as it have a connection to
widget 0x3e with is out of range (widgets are reported to be from 0x08 to 0x0c).
We could also patch the returned widget number to be 2 widgets more, even id 0x3d is NOT there.
>
> vt1802 also has connection to 0x3e in node 0x24 and 0x33

The 0x3e is a stereo to mono mixer, connecting to 0x1c.
As above, VT1802p reports to have widgets up to 0x3c.
>
> you cannot change the pin default from speaker of 0x24 to lineout if node
> 0x33 only support mono
>
> should the auto parser put it into autocfg->mono_out?
>

maybe.... I didn't try that one.
With both patches the stuffs appears like a 4 channel one; the correct would be 2+1, but
I didn't manage to get it right.

Anyways, I did all this without datasheet... I've tried to get it from VIA, with usual (null) results.
Maybe the 2 exceeding widgets are reported there, I don't know.

Resuming, without patches, the auto_parser report for asus :

0x24 Line out, type speaker
0x25 Hp out
0x33 is missing

Forcing the connection from 0x33 to 0x1c (skipping so 0x3e) the pin 0x33 don't appear
because bios marks it at none-connection.
Forcing the connection to JACK, it puts as a mono speaker, so no sound from it either.
Forcing to be a line out, sound only from it because then 0x24 takes the speaker place (marked as speaker in bios).
Forcing both 0x24 and 0x33 to be line out gives 4 channel sound (with 2 rear channels output to 0x33 mono).

No idea on how to get the 2+1 behaviour, but at least now it sounds.

Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-01 11:15   ` Massimo Del Fedele
@ 2012-11-02  1:44     ` Raymond Yau
  2012-11-02 14:57       ` Massimo Del Fedele
  0 siblings, 1 reply; 24+ messages in thread
From: Raymond Yau @ 2012-11-02  1:44 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: tiwai, alsa-devel, 1045981

>
>>
>> can you post the output of alsa-info.sh ?
>
>
> Where can I find the script ? I've not it on my machine
>

http://git.alsa-project.org/?p=alsa-driver.git;a=history;hb=refs/heads/build;f=alsa/utils/alsa-info.sh

>>
>>     9.337454] ALSA hda_codec.c:4877 autoconfig: line_outs=1
>> (0x24/0x0/0x0/0x0/0x0) type:speaker
>> [    9.337458] ALSA hda_codec.c:4881    speaker_outs=0
(0x0/0x0/0x0/0x0/0x0)
>> [    9.337460] ALSA hda_codec.c:4885    hp_outs=1 (0x25/0x0/0x0/0x0/0x0)
>> [    9.337462] ALSA hda_codec.c:4886    mono: mono_out=0x0
>> [    9.337464] ALSA hda_codec.c:4889    dig-out=0x2d/0x0
>> [    9.337465] ALSA hda_codec.c:4890    inputs:
>> [    9.337467] ALSA hda_codec.c:4894  Internal Mic=0x29
>> [    9.337469] ALSA hda_codec.c:4894  Mic=0x2b
>>
>> it is the auto parser put the speaker to autocfg->lineout

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commit;h=90da78bf6aaabd4d31c6663b7c1d1b9c5a8c023f

mono pin complex are usually [Fixed] Speaker instead of [Jack] Line Out

>
>
> Yep, if you look at above, this one was exactly the output before my 2
patches; the only difference
> was line 24, marked as type=SPEAKER; no trace of mono pin 0x33.
> I guess the 0x33 is skipped because the parser don't find a path from it,
as it have a connection to
> widget 0x3e with is out of range (widgets are reported to be from 0x08 to
0x0c).

https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1045981

Node 0x33 [Pin Complex] wcaps 0x40050c: Mono Amp-Out
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00]
  Pincap 0x00000010: OUT
  Pin Default 0x501701f0: [N/A] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00:
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x3e

it is ignored by the auto parser because [N/A] instead of [Fixed]

> We could also patch the returned widget number to be 2 widgets more, even
id 0x3d is NOT there.
>
> The 0x3e is a stereo to mono mixer, connecting to 0x1c.
> As above, VT1802p reports to have widgets up to 0x3c.
>

do widge 0x3e has amp-out for subwoofer volume control ?

>>
>> should the auto parser put it into autocfg->mono_out?
>>
>
> maybe.... I didn't try that one.
> With both patches the stuffs appears like a 4 channel one; the correct
would be 2+1, but
> I didn't manage to get it right.

Node 0x2b [Pin Complex] wcaps 0x400481: Stereo
  Control: name="Mic Boost Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="Mic Jack", index=0, device=0
  Pincap 0x00002324: IN Detect
    Vref caps: HIZ 50 100
  Pin Default 0x01a1903e: [Jack] Mic at Ext Rear
    Conn = 1/8, Color = Pink
    DefAssociation = 0x3, Sequence = 0xe

as the mic jack cannot be retasked as output , No need to put hp in lineout

>
> Resuming, without patches, the auto_parser report for asus :
>
> 0x24 Line out, type speaker
> 0x25 Hp out
> 0x33 is missing
>
> Forcing the connection from 0x33 to 0x1c (skipping so 0x3e) the pin 0x33
don't appear
> because bios marks it at none-connection.
> Forcing the connection to JACK, it puts as a mono speaker, so no sound
from it either.
> Forcing to be a line out, sound only from it because then 0x24 takes the
speaker place (marked as speaker in bios).
> Forcing both 0x24 and 0x33 to be line out gives 4 channel sound (with 2
rear channels output to 0x33 mono).
>
> No idea on how to get the 2+1 behaviour, but at least now it sounds.

multiout.extra_out seem support multi stereo streams in
snd_hda_multi_out_analog_prepare()

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);

how to put those internal speakers into multiout->extra_out in
via_auto_create_speaker_ctls() when the auto parser put the speaker into
autocfg->lineout ?

only two volume controls at 0x08 and 0x09,
there are three pin complexes 0x24, 0x25 and 0x33

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-02  1:44     ` Raymond Yau
@ 2012-11-02 14:57       ` Massimo Del Fedele
  2012-11-03  0:37         ` Raymond Yau
  2012-11-04  6:27         ` Raymond Yau
  0 siblings, 2 replies; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-02 14:57 UTC (permalink / raw)
  To: alsa-devel

Il 02/11/2012 02:44, Raymond Yau ha scritto:
>>

>
> it is ignored by the auto parser because [N/A] instead of [Fixed]

I guess it's ignored for 2 reasons :

1) N/Aconnection
2) Input from non-reported 0x3e widget
>
> do widge 0x3e has amp-out for subwoofer volume control ?

Nope. The sound path I got finally are :
08/34/14/24/00
08/21/14/24/00
09/3c/1c/33/00
08/35/15/25/00
08/21/15/25/00

So, front on 0x08, shared with HP, and subwoofer on 0x09. Volumes are on 0x08 and 0x09 controls,
afaik there are no more volume controls there.

>
>>>
>>> should the auto parser put it into autocfg->mono_out?
>>>
>>
>> maybe.... I didn't try that one.
>> With both patches the stuffs appears like a 4 channel one; the correct
> would be 2+1, but
>> I didn't manage to get it right.
>
> Node 0x2b [Pin Complex] wcaps 0x400481: Stereo
>    Control: name="Mic Boost Volume", index=0, device=0
>      ControlAmp: chs=3, dir=In, idx=0, ofs=0
>    Control: name="Mic Jack", index=0, device=0
>    Pincap 0x00002324: IN Detect
>      Vref caps: HIZ 50 100
>    Pin Default 0x01a1903e: [Jack] Mic at Ext Rear
>      Conn = 1/8, Color = Pink
>      DefAssociation = 0x3, Sequence = 0xe
>
> as the mic jack cannot be retasked as output , No need to put hp in lineout
>
I didn't retask the mic (0x2b)... just the 24 and 33.

> multiout.extra_out seem support multi stereo streams in
> snd_hda_multi_out_analog_prepare()
>
> 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);
>
> how to put those internal speakers into multiout->extra_out in
> via_auto_create_speaker_ctls() when the auto parser put the speaker into
> autocfg->lineout ?

Don't know.... if I let 0x33 and/or 0x24 as speaker, they're put as speaker out but not taken
in multiout paths.
>
> only two volume controls at 0x08 and 0x09,
> there are three pin complexes 0x24, 0x25 and 0x33
>

As above, a volume control is shared between front (24) and HP (25) pins, I guess.
Volumes are present just at DAC level, not pins.

Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-02 14:57       ` Massimo Del Fedele
@ 2012-11-03  0:37         ` Raymond Yau
  2012-11-03  9:04           ` Massimo Del Fedele
  2012-11-04  6:27         ` Raymond Yau
  1 sibling, 1 reply; 24+ messages in thread
From: Raymond Yau @ 2012-11-03  0:37 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: tiwai, alsa-devel

https://launchpadlibrarian.net/121871263/alsainfo.txt

>>
>> do widge 0x3e has amp-out for subwoofer volume control ?
>
>
> Nope. The sound path I got finally are :
> 08/34/14/24/00
> 08/21/14/24/00
> 09/3c/1c/33/00
> 08/35/15/25/00
> 08/21/15/25/00
>
> So, front on 0x08, shared with HP, and subwoofer on 0x09. Volumes are on
0x08 and 0x09 controls,
> afaik there are no more volume controls there.

how about the channel map ?

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=be84bbcccc757b86449daaf924e72f95c95dc00e;hp=2d3391ec0ecca37efb6bc995906292f47522b471

do your patched driver really work with pulseaudio 2.0 if there is no
headphone playback volume controls ?

Simple mixer control 'Independent HP',0
  Capabilities: enum
  Items: 'OFF' 'ON'
  Item0: 'OFF'

Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 42
  Mono:
  Front Left: Playback 42 [100%] [0.00dB] [on]
  Front Right: Playback 42 [100%] [0.00dB] [on]
Simple mixer control 'Speaker',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 42
  Mono:
  Front Left: Playback 42 [100%] [0.00dB] [on]
  Front Right: Playback 42 [100%] [0.00dB] [on]

if independent headphone is ON, two different audio stereo streams can play
using device 0 (speaker) and device 2 (headphone)

dac 0x08 cannot be shared beween headphone 0x25 and speaker 0x24

do a notebook really need independent headphone ?

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=a2a870c82797e47884b2736e95e9d9c89a51c219;hp=5c9a5615dedec19196b1217e864616a2ce9e392a

0: PCH [HDA Intel PCH], device 0: VT1802 Analog [VT1802 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: VT1802 Digital [VT1802 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: VT1802 HP [VT1802 HP]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-03  0:37         ` Raymond Yau
@ 2012-11-03  9:04           ` Massimo Del Fedele
  0 siblings, 0 replies; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-03  9:04 UTC (permalink / raw)
  To: alsa-devel

Il 03/11/2012 01:37, Raymond Yau ha scritto:
> https://launchpadlibrarian.net/121871263/alsainfo.txt
>
> do your patched driver really work with pulseaudio 2.0 if there is no
> headphone playback volume controls ?
>
Yep... behaviour is following :

if NO headphone plugged in, I can choose between stereo and 4 channel surround.
With pulse I can then balance left/right and front/rear channels, and set the
overall sound volume.
The output selector of pulseaudio shows just "analog output".

if headset is plugged in, output audio selector shows both "analog output" and "headphone output",
but no matters what I select, output of front channelsgoes to HP, and rear channels are disabled.
I guess the output selector switch should work, but it doesn't and audio goes always to HP when plugged.

>
> if independent headphone is ON, two different audio stereo streams can play
> using device 0 (speaker) and device 2 (headphone)

Can't obviously have indep HP mode AND 2+1 channels, having just 2 volume controls.
Maybe it would be possible to have indep HP mode when selecting stereo mode output,
but I don't see much use for it.
>
> dac 0x08 cannot be shared beween headphone 0x25 and speaker 0x24
>
> do a notebook really need independent headphone ?

When I said "shared" I meant "alternative"; channel 8 is used for HP when plugged, for front speakers
when unplugged; I can't hear both together, and I think it's correct behaviour, having just 2 volume
widgets inside VT1802P.
Plugged HP completely disables both subwoofer and front speakers; this should be selectable by pulse
output selector, but it doesn't.... Bu I guess that one is another bug.


Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-02 14:57       ` Massimo Del Fedele
  2012-11-03  0:37         ` Raymond Yau
@ 2012-11-04  6:27         ` Raymond Yau
  2012-11-04  9:31           ` Massimo Del Fedele
  1 sibling, 1 reply; 24+ messages in thread
From: Raymond Yau @ 2012-11-04  6:27 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: tiwai, alsa-devel, lydiawang

>>> https://launchpadlibrarian.net/121871263/alsainfo.txt

>> do widge 0x3e has amp-out for subwoofer volume control ?
>
>
> Nope. The sound path I got finally are :
> 08/34/14/24/00
> 08/21/14/24/00
> 09/3c/1c/33/00
> 08/35/15/25/00
> 08/21/15/25/00
>
> So, front on 0x08, shared with HP, and subwoofer on 0x09. Volumes are on
0x08 and 0x09 controls,
> afaik there are no more volume controls there.

the driver setup 0x33 (mono pin) for vt1802

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=11890956e948e6ed1b3e4acc11b6879db6ace01b;hp=bc92df7fe55e49c616a003b0b77e7badf2736429

and some asus with vt1802 does not have any subwoofer

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=94c142a160d63edac0e1fca7848960dcf75dd2a9;hp=012e7eb1e501d0120e0383b81477f63091f5e365

do notebook with vt1802 really need independent headphone ?

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.
git;a=commitdiff;h=a2a870c82797e47884b2736e95e9d9
c89a51c219;hp=5c9a5615dedec19196b1217e864616 a2ce9e392a

>
>>>> should the auto parser put it into autocfg->mono_out?
>>>
>>> maybe.... I didn't try that one.
>>> With both patches the stuffs appears like a 4 channel one; the correct
>>
>> would be 2+1, but
>>>
>>> I didn't manage to get it right.
>>
>>

> The function should scan all paths from DACs to
> OUTS, but like it is just takes the first available DAC.
> The problem arises here :
>
>if (dac) {
>spec->private_dac_nids[i] = dac;
>dac_num++;
>}

> Which correctly adds DAC to used list, but doesn't
> update the total number of found DACs
> in spec->multiout.num_dacs; following calls to
> is_empty_dac() will always return true
> for already used DACs, making parse_output_path()
> return always the first one.

it is because

spec->multiout.num_dacs = cfg->line_outs + spec->smart51_nums;

so this may be the reason for the auto parser put internal speaker 0x24
into autocfg->lineout

are you sure that you need pulseaudio to upmix stereo to 4 channels since
the driver use copy front mode for 2 channels playback when
spec->multiout.num_dacs
= 2

/* 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);
}

this mean that the channel map may has no relationship with the number of
internal speakers of the notebook

>
>> multiout.extra_out seem support multi stereo streams in
>> snd_hda_multi_out_analog_prepare()
>>
>> 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);
>>
>> how to put those internal speakers into multiout->extra_out in
>> via_auto_create_speaker_ctls() when the auto parser put the speaker into
>> autocfg->lineout ?
>
>
> Don't know.... if I let 0x33 and/or 0x24 as speaker, they're put as
speaker out but not taken
> in multiout paths.

does this mean that spec->speaker_path and spec->speaker_mix_path  are
useless ?

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-04  6:27         ` Raymond Yau
@ 2012-11-04  9:31           ` Massimo Del Fedele
  2012-11-07  0:50             ` Raymond Yau
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-04  9:31 UTC (permalink / raw)
  To: alsa-devel

I'm starting to feel lost.... anyways, I'll try to answer to some questions :
 >
> and some asus with vt1802 does not have any subwoofer

That's very possible, the patch should be applied only for selected machines... But I don't know how to do it.

>
> http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=94c142a160d63edac0e1fca7848960dcf75dd2a9;hp=012e7eb1e501d0120e0383b81477f63091f5e365
>
> do notebook with vt1802 really need independent headphone ?

IMHO, but that's just my opinion, an independent HP is quite useless for notebooks.
AFAIK the unpatched driver maps a DAC to front speakers (0x08) and another for HP (0x09), so
no DAC free for subwoofer. We could maybe mono mix the front channel and route it to subwoofer,
but then you'd have no separate volume control for sub, which makes it useless.

>
> http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.
> git;a=commitdiff;h=a2a870c82797e47884b2736e95e9d9
> c89a51c219;hp=5c9a5615dedec19196b1217e864616 a2ce9e392a
>
>>
>>>>> should the auto parser put it into autocfg->mono_out?
>>>>
>>>> maybe.... I didn't try that one.
>>>> With both patches the stuffs appears like a 4 channel one; the correct
>>>
>>> would be 2+1, but
>>>>
>>>> I didn't manage to get it right.
>>>
>>>
>
>> The function should scan all paths from DACs to
>> OUTS, but like it is just takes the first available DAC.
>> The problem arises here :
>>
>> if (dac) {
>> spec->private_dac_nids[i] = dac;
>> dac_num++;
>> }
>
>> Which correctly adds DAC to used list, but doesn't
>> update the total number of found DACs
>> in spec->multiout.num_dacs; following calls to
>> is_empty_dac() will always return true
>> for already used DACs, making parse_output_path()
>> return always the first one.
>
> it is because
>
> spec->multiout.num_dacs = cfg->line_outs + spec->smart51_nums;
>
> so this may be the reason for the auto parser put internal speaker 0x24
> into autocfg->lineout

Those are two unrelated things.
The code above is plain wrong (and my patch isn't correct either, but at least makes it
working...); when populating DAC nids, the scanner forgets to update the number of found
needs while scanning; I mean, in practice during the recursive scan the DACS are always free,
so only the first one is returned.

The 0x24 is marked as speaker but is put on line out by auto_parser IF no true line outs are found.
I didn't dig too deep inside it, but I guess that if it finds NO line outs (and asus G75 is the case...)
it takes first speaker channel and puts on line streams. Not the best solution,IMHO.


>
> does this mean that spec->speaker_path and spec->speaker_mix_path  are
> useless ?
>

Dont't know, but being without separate volume controls, all must be controlled
at dac level, I think... and having a speaker out without separate volume
makes no sense.
But I didn't dig much on it.

Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-10-31 16:49 Fix for Asus G75 notebook subwoofer Massimo Del Fedele
  2012-11-01  8:11 ` Raymond Yau
@ 2012-11-06  8:36 ` Takashi Iwai
  2012-11-06  8:57   ` Massimo Del Fedele
  1 sibling, 1 reply; 24+ messages in thread
From: Takashi Iwai @ 2012-11-06  8:36 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Wed, 31 Oct 2012 17:49:39 +0100,
Massimo Del Fedele wrote:
> 
> This code fixes surround path of asus G75; i'll drop here as a function to be called
> before codec initialization (I did it in static int patch_vt2002P() ) because I don't
> know how to detect the notebook and apply it only when needed (I'm new to alsa code).
> 
> /* Fixes for Asus G75 subwoofer
>     pin 24 is marked as speaker by bios -- should mark as line
>     pin 33 has a wrong connection to out-of-range nid #3e
> */
>   static int fix_asus_g75_subwoofer(struct hda_codec *codec)
>   {
> 	/* right connection to pin widget #33 */
> 	hda_nid_t conn[8] = {0x1c};
> 	unsigned int conf;
> 	
> 	/* Fix connection of pin widget #33 on VT1802p
> 	 * reported connection (33-1e) refers to non-existent widget #1e which in turn
> 	 * reports a connection to #1c; we skip nonexistent 1e widget landing directly
> 	 * on 1c one
> 	 */
>   	snd_hda_override_conn_list(codec, 0x33, 1, conn);
> 
> 	// pin 24 should be marked as line out pin (not speaker as in bios)
> 	// and as AC_JACK_PORT_COMPLEX connection to avoid to be taken by autoparser as a speaker
> 	conf = snd_hda_codec_get_pincfg(codec, 0x24);
> 	conf = conf & ~AC_DEFCFG_DEVICE;
> 	conf = (conf & ~AC_DEFCFG_PORT_CONN) | (AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT);
> 	snd_hda_codec_set_pincfg(codec, 0x24, conf);
> 	
> 	// pin 33 should be marked as line out pin (not speaker as in bios)
> 	// and as AC_JACK_PORT_COMPLEX, not AC_JACK_PORT_NONE as in bios
> 	conf = snd_hda_codec_get_pincfg(codec, 0x33);
> 	conf = conf & ~AC_DEFCFG_DEVICE;
> 	conf = (conf & ~AC_DEFCFG_PORT_CONN) | (AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT);
> 	snd_hda_codec_set_pincfg(codec, 0x33, conf);
> 
> 	return 0;
> }
> 
> I guess that the fix on NID #33 should be applied anyways on VT1802p, because by now it connects to a non-existing widget
> (well, it does exist but is not documented and out of NID range; it should be a stereo-to-mono mixer).

You meant 0x3e instead of 0x1e in the comment above, right?

> BTW, also NID #34, which has 2 connections, has one of them to non-existing nid above; in my case it does no harm :
> 
> Widget #24 -- ANALOG STEREO PIN COMPLEX
> 	Input from widgets :  14 3e       <-- widget 3e is out of range, but connects to 1c widget
> 	Connection type : JACK
> 	Device          : LINE OUT
> 	Does NOT support unsolicited response
> 	Out amp  present
> 	In amp NOT present

Yes, these two connections could be fixed statically in the driver.

Other than that, the default pin configurations could be easily
implemented via fixups.  Take a look at patch_conexant.c.

In anyway, it'd be helpful if you can attach the alsa-info.sh output
on your machine.  Even better would be results before and after the
patch.


thanks,

Takashi

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06  8:36 ` Takashi Iwai
@ 2012-11-06  8:57   ` Massimo Del Fedele
  2012-11-06  9:06     ` Takashi Iwai
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-06  8:57 UTC (permalink / raw)
  To: alsa-devel

Il 06/11/2012 09:36, Takashi Iwai ha scritto:
> At Wed, 31 Oct 2012 17:49:39 +0100,
> Massimo Del Fedele wrote:
>>

>
> You meant 0x3e instead of 0x1e in the comment above, right?

Yep, sorry, it was 0x3e of course
>
>
> Other than that, the default pin configurations could be easily
> implemented via fixups.  Take a look at patch_conexant.c.

thank you, I'll look at it. Is it possible to "connect" the fixups to the
asus g75 ?
>
> In anyway, it'd be helpful if you can attach the alsa-info.sh output
> on your machine.  Even better would be results before and after the
> patch.
>
The unpatched info is already on bug report :

https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1045981
(comment #7)

I'll add the patched one now.

BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
My patch isn't correct either (fails when the 'continue' path is taken)
but it's better than now. I guess that code should be rewritten, it's
quite weird in respect to dac numbering.
>
> thanks,
>
> Takashi
>

Thank you

Massimo

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06  8:57   ` Massimo Del Fedele
@ 2012-11-06  9:06     ` Takashi Iwai
  2012-11-06 14:18       ` Massimo Del Fedele
  0 siblings, 1 reply; 24+ messages in thread
From: Takashi Iwai @ 2012-11-06  9:06 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Tue, 06 Nov 2012 09:57:31 +0100,
Massimo Del Fedele wrote:
> 
> Il 06/11/2012 09:36, Takashi Iwai ha scritto:
> > At Wed, 31 Oct 2012 17:49:39 +0100,
> > Massimo Del Fedele wrote:
> >>
> 
> >
> > You meant 0x3e instead of 0x1e in the comment above, right?
> 
> Yep, sorry, it was 0x3e of course
> >
> >
> > Other than that, the default pin configurations could be easily
> > implemented via fixups.  Take a look at patch_conexant.c.
> 
> thank you, I'll look at it. Is it possible to "connect" the fixups to the
> asus g75 ?

Yeah, it must be easy.

> > In anyway, it'd be helpful if you can attach the alsa-info.sh output
> > on your machine.  Even better would be results before and after the
> > patch.
> >
> The unpatched info is already on bug report :
> 
> https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1045981
> (comment #7)

Could you attach to ML too?

> I'll add the patched one now.
> 
> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
> My patch isn't correct either (fails when the 'continue' path is taken)
> but it's better than now. I guess that code should be rewritten, it's
> quite weird in respect to dac numbering.

Could you elaborate a bit more?


Takashi

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06  9:06     ` Takashi Iwai
@ 2012-11-06 14:18       ` Massimo Del Fedele
  2012-11-06 14:24         ` Takashi Iwai
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-06 14:18 UTC (permalink / raw)
  To: alsa-devel

Il 06/11/2012 10:06, Takashi Iwai ha scritto:

>
> Could you attach to ML too?

I tried, but they're too big
>
>>
>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
>> My patch isn't correct either (fails when the 'continue' path is taken)
>> but it's better than now. I guess that code should be rewritten, it's
>> quite weird in respect to dac numbering.
>
> Could you elaborate a bit more?
>

Ok. here the original functions :

static bool is_empty_dac(struct hda_codec *codec, hda_nid_t dac)
{
	struct via_spec *spec = codec->spec;
	int i;

	for (i = 0; i < spec->multiout.num_dacs; i++) {     <--- uses spec->multiout.num_dacs as used DAC count
		if (spec->multiout.dac_nids[i] == dac)
			return false;
	}
	if (spec->hp_dac_nid == dac)
		return false;
	return true;
}


.....................

static bool __parse_output_path(struct hda_codec *codec, hda_nid_t nid,
				hda_nid_t target_dac, int with_aa_mix,
				struct nid_path *path, int depth)
{
	struct via_spec *spec = codec->spec;
	hda_nid_t conn[8];
	int i, nums;

	if (nid == spec->aa_mix_nid) {
		if (!with_aa_mix)
			return false;
		with_aa_mix = 2; /* mark aa-mix is included */
	}

	nums = snd_hda_get_connections(codec, nid, conn, ARRAY_SIZE(conn));
	for (i = 0; i < nums; i++) {
		if (get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT)
			continue;
		if (conn[i] == target_dac || is_empty_dac(codec, conn[i])) {       <--- calls is_empty_dac, but spec->multiout.num_dacs not set here
			/* aa-mix is requested but not included? */
			if (!(spec->aa_mix_nid && with_aa_mix == 1))
				goto found;
		}
	}
	if (depth >= MAX_NID_PATH_DEPTH)
		return false;
	for (i = 0; i < nums; i++) {
		unsigned int type;
		type = get_wcaps_type(get_wcaps(codec, conn[i]));
		if (type == AC_WID_AUD_OUT)
			continue;
		if (__parse_output_path(codec, conn[i], target_dac,
					with_aa_mix, path, depth + 1))
			goto found;
	}
	return false;

   found:
	path->path[path->depth] = conn[i];
	path->idx[path->depth] = i;
	if (nums > 1 && get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_MIX)
		path->multi[path->depth] = 1;
	path->depth++;
	return true;
}

....................

static int via_auto_fill_dac_nids(struct hda_codec *codec)
{
	struct via_spec *spec = codec->spec;
	const struct auto_pin_cfg *cfg = &spec->autocfg;
	int i, dac_num;
	hda_nid_t nid;

	spec->multiout.dac_nids = spec->private_dac_nids;
	dac_num = 0;
	for (i = 0; i < cfg->line_outs; i++) {
		hda_nid_t dac = 0;
		nid = cfg->line_out_pins[i];
		if (!nid)
			continue;
		if (parse_output_path(codec, nid, 0, 0, &spec->out_path[i]))
			dac = spec->out_path[i].path[0];
		if (!i && parse_output_path(codec, nid, dac, 1,
					    &spec->out_mix_path))
			dac = spec->out_mix_path.path[0];
		if (dac) {
			spec->private_dac_nids[i] = dac;   <---- should be, IMHO, spec->private_dac_nids[dac_num] instead
			dac_num++;
		}
	}
	if (!spec->out_path[0].depth && spec->out_mix_path.depth) {
		spec->out_path[0] = spec->out_mix_path;
		spec->out_mix_path.depth = 0;
	}
	spec->multiout.num_dacs = dac_num;     <--- sets spec->multiout.num_dacs ONLY at end of search, do is_empty_dac always returns true during search
	return 0;
}


Resuming ;

1) during scan, the spec->multiout.num_dacs is taken as the number of already used DACs, but this is updated jut at END of scan, so during scan
     the first DAC is always taken.
2) spec->private_dac_nids[i] = dac; should be spec->private_dac_nids[dac_num++] = dac; the 'continue' statement above can leave some holes of
     uninitializad data in spec->private_dac_nids.
3) spec->multiout.num_dacs sould be updated on EACH dac found, not just at end, otherwise you've got the problem at point 1

The patch I posted on former post is incomplete (don't solve the 'holes' due to continue statement), so it should be rewritten.
If you mean, I can do it correctly on next days.

Ciao

Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06 14:18       ` Massimo Del Fedele
@ 2012-11-06 14:24         ` Takashi Iwai
  2012-11-06 17:23           ` Massimo Del Fedele
  0 siblings, 1 reply; 24+ messages in thread
From: Takashi Iwai @ 2012-11-06 14:24 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Tue, 06 Nov 2012 15:18:58 +0100,
Massimo Del Fedele wrote:
> 
> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
> 
> >
> > Could you attach to ML too?
> 
> I tried, but they're too big

Did you compress it?

> >> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
> >> My patch isn't correct either (fails when the 'continue' path is taken)
> >> but it's better than now. I guess that code should be rewritten, it's
> >> quite weird in respect to dac numbering.
> >
> > Could you elaborate a bit more?
> >
> 
> Ok. here the original functions :

Hmm... could you give a "diff -up" output instead?

In anyway, mail me directly and add Cc to ML.  This is the standard
way to reach developers.  People (including me) don't read ML often
but check the inbox more frequently.


Takashi

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06 14:24         ` Takashi Iwai
@ 2012-11-06 17:23           ` Massimo Del Fedele
  2012-11-07  8:56             ` Takashi Iwai
  2012-11-07  8:56             ` Takashi Iwai
  0 siblings, 2 replies; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-06 17:23 UTC (permalink / raw)
  To: alsa-devel

[-- Attachment #1: Type: text/plain, Size: 1102 bytes --]


Il 06/11/2012 15:24, Takashi Iwai ha scritto:
> At Tue, 06 Nov 2012 15:18:58 +0100,
> Massimo Del Fedele wrote:
>> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
>>
>>> Could you attach to ML too?
>> I tried, but they're too big
> Did you compress it?
No, but I'm doing now... in compressed file are both info
>
>>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
>>>> My patch isn't correct either (fails when the 'continue' path is taken)
>>>> but it's better than now. I guess that code should be rewritten, it's
>>>> quite weird in respect to dac numbering.
>>> Could you elaborate a bit more?
>>>
>> Ok. here the original functions :
> Hmm... could you give a "diff -up" output instead?

Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
it should be correct now in all parts, even for skipped nids.
>
> In anyway, mail me directly and add Cc to ML.  This is the standard
> way to reach developers.  People (including me) don't read ML often
> but check the inbox more frequently.
Ok, thank you for telling
>
> Takashi
>
Massimo

[-- Attachment #2: alsa-info.tar.bz2 --]
[-- Type: application/x-bzip, Size: 40960 bytes --]

[-- Attachment #3: asusG75.diff --]
[-- Type: text/x-patch, Size: 3285 bytes --]

--- ../../../../patch_via.c	2012-09-24 14:33:19.000000000 +0200
+++ patch_via.c	2012-11-06 18:07:02.069073574 +0100
@@ -1868,31 +1868,28 @@ static int via_auto_fill_dac_nids(struct
 {
 	struct via_spec *spec = codec->spec;
 	const struct auto_pin_cfg *cfg = &spec->autocfg;
-	int i, dac_num;
+	int i;
 	hda_nid_t nid;
 
 	spec->multiout.dac_nids = spec->private_dac_nids;
-	dac_num = 0;
+	spec->multiout.num_dacs = 0;
 	for (i = 0; i < cfg->line_outs; i++) {
 		hda_nid_t dac = 0;
 		nid = cfg->line_out_pins[i];
 		if (!nid)
 			continue;
-		if (parse_output_path(codec, nid, 0, 0, &spec->out_path[i]))
-			dac = spec->out_path[i].path[0];
+		if (parse_output_path(codec, nid, 0, 0, &spec->out_path[spec->multiout.num_dacs]))
+			dac = spec->out_path[spec->multiout.num_dacs].path[0];
 		if (!i && parse_output_path(codec, nid, dac, 1,
 					    &spec->out_mix_path))
 			dac = spec->out_mix_path.path[0];
-		if (dac) {
-			spec->private_dac_nids[i] = dac;
-			dac_num++;
-		}
+		if (dac)
+			spec->private_dac_nids[spec->multiout.num_dacs++] = dac;
 	}
 	if (!spec->out_path[0].depth && spec->out_mix_path.depth) {
 		spec->out_path[0] = spec->out_mix_path;
 		spec->out_mix_path.depth = 0;
 	}
-	spec->multiout.num_dacs = dac_num;
 	return 0;
 }
 
@@ -3326,7 +3323,6 @@ static int add_secret_dac_path(struct hd
 	return 0;
 }
 
-
 static int patch_vt1718S(struct hda_codec *codec)
 {
 	struct via_spec *spec;
@@ -3692,6 +3688,40 @@ static const struct snd_pci_quirk vt2002
 	{}
 };
 
+/* Fixes for Asus G75 subwoofer
+   pin 24 is marked as speaker by bios -- should mark as line
+   pin 33 has a wrong connection to out-of-range nid #3e
+*/
+ static int fix_asus_g75_subwoofer(struct hda_codec *codec)
+ {
+	/* right connection to pin widget #33 */
+	hda_nid_t conn[8] = {0x1c};
+	unsigned int conf;
+	
+	/* Fix connection of pin widget #33 on VT1802p
+	 * reported connection (33-1e) refers to non-existent widget #1e which in turn
+	 * reports a connection to #1c; we skip nonexistent 1e widget landing directly
+	 * on 1c one
+	 */
+ 	snd_hda_override_conn_list(codec, 0x33, 1, conn);
+
+	// pin 24 should be marked as line out pin (not speaker as in bios)
+	// and as AC_JACK_PORT_COMPLEX connection to avoid to be taken by autoparser as a speaker 
+	conf = snd_hda_codec_get_pincfg(codec, 0x24);
+	conf = conf & ~AC_DEFCFG_DEVICE;
+	conf = (conf & ~AC_DEFCFG_PORT_CONN) | (AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT);
+	snd_hda_codec_set_pincfg(codec, 0x24, conf);
+	
+	// pin 33 should be marked as line out pin (not speaker as in bios)
+	// and as AC_JACK_PORT_COMPLEX, not AC_JACK_PORT_NONE as in bios
+	conf = snd_hda_codec_get_pincfg(codec, 0x33);
+	conf = conf & ~AC_DEFCFG_DEVICE;
+	conf = (conf & ~AC_DEFCFG_PORT_CONN) | (AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT);
+	snd_hda_codec_set_pincfg(codec, 0x33, conf);
+
+	return 0;
+}
+
 /* patch for vt2002P */
 static int patch_vt2002P(struct hda_codec *codec)
 {
@@ -3703,6 +3733,10 @@ static int patch_vt2002P(struct hda_code
 	if (spec == NULL)
 		return -ENOMEM;
 
+	/* should check for asus g75 model instead...*/
+	if (spec->codec_type == VT1802)
+		fix_asus_g75_subwoofer(codec);
+
 	spec->aa_mix_nid = 0x21;
 	override_mic_boost(codec, 0x2b, 0, 3, 40);
 	override_mic_boost(codec, 0x29, 0, 3, 40);

[-- Attachment #4: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-04  9:31           ` Massimo Del Fedele
@ 2012-11-07  0:50             ` Raymond Yau
  0 siblings, 0 replies; 24+ messages in thread
From: Raymond Yau @ 2012-11-07  0:50 UTC (permalink / raw)
  To: Massimo Del Fedele, tiwai, lydiawang; +Cc: alsa-devel

>> https://launchpadlibrarian.net/121871263/alsainfo.txt
>
>>
>>
http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=94c142a160d63edac0e1fca7848960dcf75dd2a9;hp=012e7eb1e501d0120e0383b81477f63091f5e365
>>
>> do notebook with vt1802 really need independent headphone ?
>
>
> IMHO, but that's just my opinion, an independent HP is quite useless for
notebooks.

/* Mono Out */
         present = snd_hda_jack_detect(codec, 0x26);

         parm = present ? AC_PWRST_D3 : AC_PWRST_D0;
         if (spec->codec_type == VT1802) {
                 /* PW15 (33h), MW8(1ch), MUX8(3ch) */
                 update_power_state(codec, 0x33, parm);
                 update_power_state(codec, 0x1c, parm);
                 update_power_state(codec, 0x3c, parm);

http://git.kernel.org/?p=linux/kernel/git/tiwai/sound.git;a=commitdiff;h=11890956e948e6ed1b3e4acc11b6879db6ace01b;hp=bc92df7fe55e49c616a003b0b77e7badf2736429

if you look carefully, you should notice that 0x26 is not any detectable
pin complex in vt1802

Node 0x26 [Vendor Defined Widget] wcaps 0xf00000: Mono

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06 17:23           ` Massimo Del Fedele
@ 2012-11-07  8:56             ` Takashi Iwai
  2012-11-07  8:56             ` Takashi Iwai
  1 sibling, 0 replies; 24+ messages in thread
From: Takashi Iwai @ 2012-11-07  8:56 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Tue, 06 Nov 2012 18:23:51 +0100,
Massimo Del Fedele wrote:
> 
> 
> Il 06/11/2012 15:24, Takashi Iwai ha scritto:
> > At Tue, 06 Nov 2012 15:18:58 +0100,
> > Massimo Del Fedele wrote:
> >> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
> >>
> >>> Could you attach to ML too?
> >> I tried, but they're too big
> > Did you compress it?
> No, but I'm doing now... in compressed file are both info

Could you post also alsa-info.sh output before applying your patch,
too?

> >>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
> >>>> My patch isn't correct either (fails when the 'continue' path is taken)
> >>>> but it's better than now. I guess that code should be rewritten, it's
> >>>> quite weird in respect to dac numbering.
> >>> Could you elaborate a bit more?
> >>>
> >> Ok. here the original functions :
> > Hmm... could you give a "diff -up" output instead?
> 
> Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
> it should be correct now in all parts, even for skipped nids.

Actually the only place to be fixed is the assignment of
spec->private_dac_nids[].  spec->out_path[] should correspond to
cfg->line_out_pins[].  That is, the patch below should suffice (in
addition to pin default changes and connection overrides for VT1802).


thanks,

Takashi

---
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 72a2f60..1c1367b 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -1825,7 +1825,7 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
 					    &spec->out_mix_path))
 			dac = spec->out_mix_path.path[0];
 		if (dac) {
-			spec->private_dac_nids[i] = dac;
+			spec->private_dac_nids[dac_num] = dac;
 			dac_num++;
 		}
 	}

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-06 17:23           ` Massimo Del Fedele
  2012-11-07  8:56             ` Takashi Iwai
@ 2012-11-07  8:56             ` Takashi Iwai
  2012-11-07 13:37               ` Massimo Del Fedele
  1 sibling, 1 reply; 24+ messages in thread
From: Takashi Iwai @ 2012-11-07  8:56 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Tue, 06 Nov 2012 18:23:51 +0100,
Massimo Del Fedele wrote:
> 
> 
> Il 06/11/2012 15:24, Takashi Iwai ha scritto:
> > At Tue, 06 Nov 2012 15:18:58 +0100,
> > Massimo Del Fedele wrote:
> >> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
> >>
> >>> Could you attach to ML too?
> >> I tried, but they're too big
> > Did you compress it?
> No, but I'm doing now... in compressed file are both info

Could you post also alsa-info.sh output before applying your patch,
too?

> >>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
> >>>> My patch isn't correct either (fails when the 'continue' path is taken)
> >>>> but it's better than now. I guess that code should be rewritten, it's
> >>>> quite weird in respect to dac numbering.
> >>> Could you elaborate a bit more?
> >>>
> >> Ok. here the original functions :
> > Hmm... could you give a "diff -up" output instead?
> 
> Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
> it should be correct now in all parts, even for skipped nids.

Actually the only place to be fixed is the assignment of
spec->private_dac_nids[].  spec->out_path[] should correspond to
cfg->line_out_pins[].  That is, the patch below should suffice (in
addition to pin default changes and connection overrides for VT1802).


thanks,

Takashi

---
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 72a2f60..1c1367b 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -1825,7 +1825,7 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
 					    &spec->out_mix_path))
 			dac = spec->out_mix_path.path[0];
 		if (dac) {
-			spec->private_dac_nids[i] = dac;
+			spec->private_dac_nids[dac_num] = dac;
 			dac_num++;
 		}
 	}

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-07  8:56             ` Takashi Iwai
@ 2012-11-07 13:37               ` Massimo Del Fedele
  2012-11-07 13:45                 ` Takashi Iwai
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-07 13:37 UTC (permalink / raw)
  To: alsa-devel


Il 07/11/2012 09:56, Takashi Iwai ha scritto:
> At Tue, 06 Nov 2012 18:23:51 +0100,
> Massimo Del Fedele wrote:
>>
>> Il 06/11/2012 15:24, Takashi Iwai ha scritto:
>>> At Tue, 06 Nov 2012 15:18:58 +0100,
>>> Massimo Del Fedele wrote:
>>>> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
>>>>
>>>>> Could you attach to ML too?
>>>> I tried, but they're too big
>>> Did you compress it?
>> No, but I'm doing now... in compressed file are both info
> Could you post also alsa-info.sh output before applying your patch,
> too?
>
>>>>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
>>>>>> My patch isn't correct either (fails when the 'continue' path is taken)
>>>>>> but it's better than now. I guess that code should be rewritten, it's
>>>>>> quite weird in respect to dac numbering.
>>>>> Could you elaborate a bit more?
>>>>>
>>>> Ok. here the original functions :
>>> Hmm... could you give a "diff -up" output instead?
>> Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
>> it should be correct now in all parts, even for skipped nids.
> Actually the only place to be fixed is the assignment of
> spec->private_dac_nids[].  spec->out_path[] should correspond to
> cfg->line_out_pins[].  That is, the patch below should suffice (in
> addition to pin default changes and connection overrides for VT1802).
>
>
> thanks,
>
> Takashi
>
> ---
> diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
> index 72a2f60..1c1367b 100644
> --- a/sound/pci/hda/patch_via.c
> +++ b/sound/pci/hda/patch_via.c
> @@ -1825,7 +1825,7 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
>   					    &spec->out_mix_path))
>   			dac = spec->out_mix_path.path[0];
>   		if (dac) {
> -			spec->private_dac_nids[i] = dac;
> +			spec->private_dac_nids[dac_num] = dac;
>   			dac_num++;
>   		}
>   	}
>
>
>
Hi...  not tested, but IMHO your patch won't  be enough; you're not updating the spec->multiout.num_dacs inside the loop,
which means that is_empty_dac(codec, conn[i]) inside __parse_output_path() will not detect used DACs as used :

static bool is_empty_dac(struct hda_codec *codec, hda_nid_t dac)
{
     struct via_spec *spec = codec->spec;
     int i;

     for (i = 0; i < spec->multiout.num_dacs; i++) { <---- HERE, using spec->multiout.num_dacs as loop end
         if (spec->multiout.dac_nids[i] == dac)
             return false;
     }
     if (spec->hp_dac_nid == dac)
         return false;
     return true;
}

You need to update spec->multiout.num_dacs INSIDE scan loop, NOT at end.

Ciao

Max

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-07 13:37               ` Massimo Del Fedele
@ 2012-11-07 13:45                 ` Takashi Iwai
  2012-11-07 15:51                   ` Massimo Del Fedele
  0 siblings, 1 reply; 24+ messages in thread
From: Takashi Iwai @ 2012-11-07 13:45 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Wed, 07 Nov 2012 14:37:33 +0100,
Massimo Del Fedele wrote:
> 
> 
> Il 07/11/2012 09:56, Takashi Iwai ha scritto:
> > At Tue, 06 Nov 2012 18:23:51 +0100,
> > Massimo Del Fedele wrote:
> >>
> >> Il 06/11/2012 15:24, Takashi Iwai ha scritto:
> >>> At Tue, 06 Nov 2012 15:18:58 +0100,
> >>> Massimo Del Fedele wrote:
> >>>> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
> >>>>
> >>>>> Could you attach to ML too?
> >>>> I tried, but they're too big
> >>> Did you compress it?
> >> No, but I'm doing now... in compressed file are both info
> > Could you post also alsa-info.sh output before applying your patch,
> > too?
> >
> >>>>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
> >>>>>> My patch isn't correct either (fails when the 'continue' path is taken)
> >>>>>> but it's better than now. I guess that code should be rewritten, it's
> >>>>>> quite weird in respect to dac numbering.
> >>>>> Could you elaborate a bit more?
> >>>>>
> >>>> Ok. here the original functions :
> >>> Hmm... could you give a "diff -up" output instead?
> >> Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
> >> it should be correct now in all parts, even for skipped nids.
> > Actually the only place to be fixed is the assignment of
> > spec->private_dac_nids[].  spec->out_path[] should correspond to
> > cfg->line_out_pins[].  That is, the patch below should suffice (in
> > addition to pin default changes and connection overrides for VT1802).
> >
> >
> > thanks,
> >
> > Takashi
> >
> > ---
> > diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
> > index 72a2f60..1c1367b 100644
> > --- a/sound/pci/hda/patch_via.c
> > +++ b/sound/pci/hda/patch_via.c
> > @@ -1825,7 +1825,7 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
> >   					    &spec->out_mix_path))
> >   			dac = spec->out_mix_path.path[0];
> >   		if (dac) {
> > -			spec->private_dac_nids[i] = dac;
> > +			spec->private_dac_nids[dac_num] = dac;
> >   			dac_num++;
> >   		}
> >   	}
> >
> >
> >
> Hi...  not tested, but IMHO your patch won't  be enough; you're not updating the spec->multiout.num_dacs inside the loop,
> which means that is_empty_dac(codec, conn[i]) inside __parse_output_path() wil
l not detect used DACs as used :

Ah, good point.  Fixed now.


Takashi

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-07 13:45                 ` Takashi Iwai
@ 2012-11-07 15:51                   ` Massimo Del Fedele
  2012-11-07 15:54                     ` Takashi Iwai
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-07 15:51 UTC (permalink / raw)
  To: alsa-devel

Il 07/11/2012 14:45, Takashi Iwai ha scritto:
> At Wed, 07 Nov 2012 14:37:33 +0100,
> Massimo Del Fedele wrote:
>>
>>
>> Il 07/11/2012 09:56, Takashi Iwai ha scritto:
>>> At Tue, 06 Nov 2012 18:23:51 +0100,
>>> Massimo Del Fedele wrote:
>>>>
>>>> Il 06/11/2012 15:24, Takashi Iwai ha scritto:
>>>>> At Tue, 06 Nov 2012 15:18:58 +0100,
>>>>> Massimo Del Fedele wrote:
>>>>>> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
>>>>>>
>>>>>>> Could you attach to ML too?
>>>>>> I tried, but they're too big
>>>>> Did you compress it?
>>>> No, but I'm doing now... in compressed file are both info
>>> Could you post also alsa-info.sh output before applying your patch,
>>> too?
>>>
>>>>>>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
>>>>>>>> My patch isn't correct either (fails when the 'continue' path is taken)
>>>>>>>> but it's better than now. I guess that code should be rewritten, it's
>>>>>>>> quite weird in respect to dac numbering.
>>>>>>> Could you elaborate a bit more?
>>>>>>>
>>>>>> Ok. here the original functions :
>>>>> Hmm... could you give a "diff -up" output instead?
>>>> Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
>>>> it should be correct now in all parts, even for skipped nids.
>>> Actually the only place to be fixed is the assignment of
>>> spec->private_dac_nids[].  spec->out_path[] should correspond to
>>> cfg->line_out_pins[].  That is, the patch below should suffice (in
>>> addition to pin default changes and connection overrides for VT1802).
>>>
>>>
>>> thanks,
>>>
>>> Takashi
>>>
>>> ---
>>> diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
>>> index 72a2f60..1c1367b 100644
>>> --- a/sound/pci/hda/patch_via.c
>>> +++ b/sound/pci/hda/patch_via.c
>>> @@ -1825,7 +1825,7 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
>>>    					    &spec->out_mix_path))
>>>    			dac = spec->out_mix_path.path[0];
>>>    		if (dac) {
>>> -			spec->private_dac_nids[i] = dac;
>>> +			spec->private_dac_nids[dac_num] = dac;
>>>    			dac_num++;
>>>    		}
>>>    	}
>>>
>>>
>>>
>> Hi...  not tested, but IMHO your patch won't  be enough; you're not updating the spec->multiout.num_dacs inside the loop,
>> which means that is_empty_dac(codec, conn[i]) inside __parse_output_path() wil
> l not detect used DACs as used :
>
> Ah, good point.  Fixed now.
>
>
> Takashi
>

Working well now; this is the verbose dmesg output :

[  920.868350] ALSA hda_auto_parser.c:664 >hda_codec: VT1802: Apply pincfg for Asus G75
[  920.868367] ALSA hda_auto_parser.c:318 autoconfig: line_outs=2 (0x24/0x33/0x0/0x0/0x0) type:speaker
[  920.868371] ALSA hda_auto_parser.c:322    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[  920.868374] ALSA hda_auto_parser.c:326    hp_outs=1 (0x25/0x0/0x0/0x0/0x0)
[  920.868376] ALSA hda_auto_parser.c:327    mono: mono_out=0x0
[  920.868378] ALSA hda_auto_parser.c:330    dig-out=0x2d/0x0
[  920.868380] ALSA hda_auto_parser.c:331    inputs:
[  920.868384] ALSA hda_auto_parser.c:335      Internal Mic=0x29
[  920.868387] ALSA hda_auto_parser.c:335      Mic=0x2b
[  920.868631] ALSA patch_via.c:1861 output-path: depth=4, 08/34/14/24/00
[  920.868647] ALSA patch_via.c:1861 output-path: depth=4, 08/21/14/24/00
[  920.868861] ALSA patch_via.c:1861 output-path: depth=4, 09/3c/1c/33/00
[  920.869321] ALSA patch_via.c:1861 output-path: depth=4, 08/35/15/25/00
[  920.869325] ALSA patch_via.c:1861 output-path: depth=4, 08/21/15/25/00

Which seems ok to me.
As before, I now have 2 front speakers (correctly) and 2 rear speakers, going to mono subwoofer.
I don't know if it's a correct behaviour or not.

Thank you

Massimo

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-07 15:51                   ` Massimo Del Fedele
@ 2012-11-07 15:54                     ` Takashi Iwai
  2012-11-07 17:02                       ` Massimo Del Fedele
  0 siblings, 1 reply; 24+ messages in thread
From: Takashi Iwai @ 2012-11-07 15:54 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Wed, 07 Nov 2012 16:51:01 +0100,
Massimo Del Fedele wrote:
> 
> Il 07/11/2012 14:45, Takashi Iwai ha scritto:
> > At Wed, 07 Nov 2012 14:37:33 +0100,
> > Massimo Del Fedele wrote:
> >>
> >>
> >> Il 07/11/2012 09:56, Takashi Iwai ha scritto:
> >>> At Tue, 06 Nov 2012 18:23:51 +0100,
> >>> Massimo Del Fedele wrote:
> >>>>
> >>>> Il 06/11/2012 15:24, Takashi Iwai ha scritto:
> >>>>> At Tue, 06 Nov 2012 15:18:58 +0100,
> >>>>> Massimo Del Fedele wrote:
> >>>>>> Il 06/11/2012 10:06, Takashi Iwai ha scritto:
> >>>>>>
> >>>>>>> Could you attach to ML too?
> >>>>>> I tried, but they're too big
> >>>>> Did you compress it?
> >>>> No, but I'm doing now... in compressed file are both info
> >>> Could you post also alsa-info.sh output before applying your patch,
> >>> too?
> >>>
> >>>>>>>> BTW, did you see the above patch (error in via_auto_fill_dac_nids) ?
> >>>>>>>> My patch isn't correct either (fails when the 'continue' path is taken)
> >>>>>>>> but it's better than now. I guess that code should be rewritten, it's
> >>>>>>>> quite weird in respect to dac numbering.
> >>>>>>> Could you elaborate a bit more?
> >>>>>>>
> >>>>>> Ok. here the original functions :
> >>>>> Hmm... could you give a "diff -up" output instead?
> >>>> Ok... here is te diff (with whole asus patch). I cleaned up the part of via_auto_fill_dac_nids,
> >>>> it should be correct now in all parts, even for skipped nids.
> >>> Actually the only place to be fixed is the assignment of
> >>> spec->private_dac_nids[].  spec->out_path[] should correspond to
> >>> cfg->line_out_pins[].  That is, the patch below should suffice (in
> >>> addition to pin default changes and connection overrides for VT1802).
> >>>
> >>>
> >>> thanks,
> >>>
> >>> Takashi
> >>>
> >>> ---
> >>> diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
> >>> index 72a2f60..1c1367b 100644
> >>> --- a/sound/pci/hda/patch_via.c
> >>> +++ b/sound/pci/hda/patch_via.c
> >>> @@ -1825,7 +1825,7 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
> >>>    					    &spec->out_mix_path))
> >>>    			dac = spec->out_mix_path.path[0];
> >>>    		if (dac) {
> >>> -			spec->private_dac_nids[i] = dac;
> >>> +			spec->private_dac_nids[dac_num] = dac;
> >>>    			dac_num++;
> >>>    		}
> >>>    	}
> >>>
> >>>
> >>>
> >> Hi...  not tested, but IMHO your patch won't  be enough; you're not updating the spec->multiout.num_dacs inside the loop,
> >> which means that is_empty_dac(codec, conn[i]) inside __parse_output_path() wil
> > l not detect used DACs as used :
> >
> > Ah, good point.  Fixed now.
> >
> >
> > Takashi
> >
> 
> Working well now; this is the verbose dmesg output :
> 
> [  920.868350] ALSA hda_auto_parser.c:664 >hda_codec: VT1802: Apply pincfg for Asus G75
> [  920.868367] ALSA hda_auto_parser.c:318 autoconfig: line_outs=2 (0x24/0x33/0x0/0x0/0x0) type:speaker
> [  920.868371] ALSA hda_auto_parser.c:322    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
> [  920.868374] ALSA hda_auto_parser.c:326    hp_outs=1 (0x25/0x0/0x0/0x0/0x0)
> [  920.868376] ALSA hda_auto_parser.c:327    mono: mono_out=0x0
> [  920.868378] ALSA hda_auto_parser.c:330    dig-out=0x2d/0x0
> [  920.868380] ALSA hda_auto_parser.c:331    inputs:
> [  920.868384] ALSA hda_auto_parser.c:335      Internal Mic=0x29
> [  920.868387] ALSA hda_auto_parser.c:335      Mic=0x2b
> [  920.868631] ALSA patch_via.c:1861 output-path: depth=4, 08/34/14/24/00
> [  920.868647] ALSA patch_via.c:1861 output-path: depth=4, 08/21/14/24/00
> [  920.868861] ALSA patch_via.c:1861 output-path: depth=4, 09/3c/1c/33/00
> [  920.869321] ALSA patch_via.c:1861 output-path: depth=4, 08/35/15/25/00
> [  920.869325] ALSA patch_via.c:1861 output-path: depth=4, 08/21/15/25/00
> 
> Which seems ok to me.
> As before, I now have 2 front speakers (correctly) and 2 rear speakers, going to mono subwoofer.
> I don't know if it's a correct behaviour or not.

It's OK, just missing the stereo capability check in the mixer code,
but almost harmless.  Which channel (left or right) of "surround"
mixer actually controls the volume of subwoofer on your machine?


Takashi

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-07 15:54                     ` Takashi Iwai
@ 2012-11-07 17:02                       ` Massimo Del Fedele
  2012-11-07 17:13                         ` Takashi Iwai
  0 siblings, 1 reply; 24+ messages in thread
From: Massimo Del Fedele @ 2012-11-07 17:02 UTC (permalink / raw)
  To: alsa-devel


Il 07/11/2012 16:54, Takashi Iwai ha scritto:
>
> It's OK, just missing the stereo capability check in the mixer code,
> but almost harmless.  Which channel (left or right) of "surround"
> mixer actually controls the volume of subwoofer on your machine?

Both, as the volume control is at DAC level and not at pin one.
aplay with channel test sound shows a 4 channels audio, driving
subwoofer with both rear left and rear right data.
If I lower left or right volume, just opposite channel goes to
subwoofer.
I guess that mono mixing is done at widget 0x3e (the hidden one).

Massimo

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Fix for Asus G75 notebook subwoofer
  2012-11-07 17:02                       ` Massimo Del Fedele
@ 2012-11-07 17:13                         ` Takashi Iwai
  0 siblings, 0 replies; 24+ messages in thread
From: Takashi Iwai @ 2012-11-07 17:13 UTC (permalink / raw)
  To: Massimo Del Fedele; +Cc: alsa-devel

At Wed, 07 Nov 2012 18:02:20 +0100,
Massimo Del Fedele wrote:
> 
> 
> Il 07/11/2012 16:54, Takashi Iwai ha scritto:
> >
> > It's OK, just missing the stereo capability check in the mixer code,
> > but almost harmless.  Which channel (left or right) of "surround"
> > mixer actually controls the volume of subwoofer on your machine?
> 
> Both, as the volume control is at DAC level and not at pin one.

OK, it must be because of the DAC amp being stereo.

> aplay with channel test sound shows a 4 channels audio, driving
> subwoofer with both rear left and rear right data.

Yes, this is still a missing piece.  The driver needs an override to
the standard chmap.

> If I lower left or right volume, just opposite channel goes to
> subwoofer.
> I guess that mono mixing is done at widget 0x3e (the hidden one).


Takashi

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2012-11-07 17:13 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-31 16:49 Fix for Asus G75 notebook subwoofer Massimo Del Fedele
2012-11-01  8:11 ` Raymond Yau
2012-11-01 11:15   ` Massimo Del Fedele
2012-11-02  1:44     ` Raymond Yau
2012-11-02 14:57       ` Massimo Del Fedele
2012-11-03  0:37         ` Raymond Yau
2012-11-03  9:04           ` Massimo Del Fedele
2012-11-04  6:27         ` Raymond Yau
2012-11-04  9:31           ` Massimo Del Fedele
2012-11-07  0:50             ` Raymond Yau
2012-11-06  8:36 ` Takashi Iwai
2012-11-06  8:57   ` Massimo Del Fedele
2012-11-06  9:06     ` Takashi Iwai
2012-11-06 14:18       ` Massimo Del Fedele
2012-11-06 14:24         ` Takashi Iwai
2012-11-06 17:23           ` Massimo Del Fedele
2012-11-07  8:56             ` Takashi Iwai
2012-11-07  8:56             ` Takashi Iwai
2012-11-07 13:37               ` Massimo Del Fedele
2012-11-07 13:45                 ` Takashi Iwai
2012-11-07 15:51                   ` Massimo Del Fedele
2012-11-07 15:54                     ` Takashi Iwai
2012-11-07 17:02                       ` Massimo Del Fedele
2012-11-07 17:13                         ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.