diff mbox

Intel HDA / ALC662 analog surround problem

Message ID 54f889c7.33f7fe8f.bm001@wupperonline.de (mailing list archive)
State New, archived
Headers show

Commit Message

Ingo Brueckl March 5, 2015, 4:52 p.m. UTC
Raymond Yau wrote on Fri, 27 Feb 2015 10:11:20 +0800:

> Try [...] to change node 0x15 Speaker as not connected

This is exactly what I did now:


It gives me the multi-io config without side effects and without the
hp_lo_shared and spk_lo_shared issue in get_line_out_pfx().

I'd like to make this configurable for people suffering from the same problem
with their ALC662, but I don't know how to identify when it would occur.

Ingo

Comments

Raymond Yau March 6, 2015, 1:49 a.m. UTC | #1
>
> > Try [...] to change node 0x15 Speaker as not connected
>
> This is exactly what I did now:
>
> diff -Nur a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> --- a/sound/pci/hda/patch_realtek.c     2015-02-27 02:49:36.000000000
+0100
> +++ b/sound/pci/hda/patch_realtek.c     2015-03-05 17:09:15.305016021
+0100
> @@ -5665,9 +5665,10 @@
>
>  static int alc662_parse_auto_config(struct hda_codec *codec)
>  {
> -       static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
> +       /* ignore internal speaker (0x15) in order to get a multi-io
config */
> +       static const hda_nid_t alc662_ignore[] = { 0x15, 0x1d, 0 };
>         static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21
};
> -       static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
> +       static const hda_nid_t alc662_ssids[] = { 0x1b, 0x14, 0 };
>         const hda_nid_t *ssids;
>
>         if (codec->vendor_id == 0x10ec0272 || codec->vendor_id ==
0x10ec0663 ||
>
> It gives me the multi-io config without side effects and without the
> hp_lo_shared and spk_lo_shared issue in get_line_out_pfx().
>
> I'd like to make this configurable for people suffering from the same
problem
> with their ALC662, but I don't know how to identify when it would occur.
>

you need pin fixup by removing internal speaker and snd_pci_quirk of your
pci sbsystem id

In theory, user can get back the internal speaker by specify model=nofixup

+ [ALC662_FIXUP_NO_SPEAKER] = {
+ .type = ALC_FIXUP_PINS,
+ .v.pins = (const struct alc_pincfg[]) {
+ { 0x15, 0x4000000 }, /* remove internal speaker */
+ { }
+ }
+ },
Takashi Iwai March 6, 2015, 9:24 a.m. UTC | #2
At Thu, 05 Mar 2015 17:52:19 +0100,
Ingo Brückl wrote:
> 
> Raymond Yau wrote on Fri, 27 Feb 2015 10:11:20 +0800:
> 
> > Try [...] to change node 0x15 Speaker as not connected
> 
> This is exactly what I did now:
> 
> diff -Nur a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> --- a/sound/pci/hda/patch_realtek.c	2015-02-27 02:49:36.000000000 +0100
> +++ b/sound/pci/hda/patch_realtek.c	2015-03-05 17:09:15.305016021 +0100
> @@ -5665,9 +5665,10 @@
> 
>  static int alc662_parse_auto_config(struct hda_codec *codec)
>  {
> -	static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
> +	/* ignore internal speaker (0x15) in order to get a multi-io config */
> +	static const hda_nid_t alc662_ignore[] = { 0x15, 0x1d, 0 };
>  	static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 };
> -	static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
> +	static const hda_nid_t alc662_ssids[] = { 0x1b, 0x14, 0 };
>  	const hda_nid_t *ssids;
> 
>  	if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
> 
> It gives me the multi-io config without side effects and without the
> hp_lo_shared and spk_lo_shared issue in get_line_out_pfx().

Well, the starting point is wrong.  You cannot ignore pins if you
really use them.  It might look as if something is working casually,
but this isn't supposed to work at all.


Takashi
Ingo Brueckl March 6, 2015, 10:03 a.m. UTC | #3
Takashi Iwai wrote on Fri, 06 Mar 2015 10:24:20 +0100:

> At Thu, 05 Mar 2015 17:52:19 +0100,
> Ingo Brückl wrote:
>>
>> Raymond Yau wrote on Fri, 27 Feb 2015 10:11:20 +0800:
>>
>> > Try [...] to change node 0x15 Speaker as not connected
>>
>> This is exactly what I did now:
>>
>> diff -Nur a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
>> --- a/sound/pci/hda/patch_realtek.c   2015-02-27 02:49:36.000000000 +0100
>> +++ b/sound/pci/hda/patch_realtek.c   2015-03-05 17:09:15.305016021 +0100
>> @@ -5665,9 +5665,10 @@
>>
>>  static int alc662_parse_auto_config(struct hda_codec *codec)
>>  {
>> -     static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
>> +     /* ignore internal speaker (0x15) in order to get a multi-io config */
>> +     static const hda_nid_t alc662_ignore[] = { 0x15, 0x1d, 0 };
>>       static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 };
>> -     static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
>> +     static const hda_nid_t alc662_ssids[] = { 0x1b, 0x14, 0 };
>>       const hda_nid_t *ssids;
>>
>>       if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
>>
>> It gives me the multi-io config without side effects and without the
>> hp_lo_shared and spk_lo_shared issue in get_line_out_pfx().

> Well, the starting point is wrong.  You cannot ignore pins if you
> really use them.  It might look as if something is working casually,
> but this isn't supposed to work at all.

I'm not using it.

Since it seems impossible to use it in addition to have a multi-io 6ch
config, I've decided to "cut" it off.

Ingo
Takashi Iwai March 6, 2015, 10:48 a.m. UTC | #4
At Fri, 06 Mar 2015 11:03:14 +0100,
Ingo Brückl wrote:
> 
> Takashi Iwai wrote on Fri, 06 Mar 2015 10:24:20 +0100:
> 
> > At Thu, 05 Mar 2015 17:52:19 +0100,
> > Ingo Brückl wrote:
> >>
> >> Raymond Yau wrote on Fri, 27 Feb 2015 10:11:20 +0800:
> >>
> >> > Try [...] to change node 0x15 Speaker as not connected
> >>
> >> This is exactly what I did now:
> >>
> >> diff -Nur a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> >> --- a/sound/pci/hda/patch_realtek.c   2015-02-27 02:49:36.000000000 +0100
> >> +++ b/sound/pci/hda/patch_realtek.c   2015-03-05 17:09:15.305016021 +0100
> >> @@ -5665,9 +5665,10 @@
> >>
> >>  static int alc662_parse_auto_config(struct hda_codec *codec)
> >>  {
> >> -     static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
> >> +     /* ignore internal speaker (0x15) in order to get a multi-io config */
> >> +     static const hda_nid_t alc662_ignore[] = { 0x15, 0x1d, 0 };
> >>       static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 };
> >> -     static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
> >> +     static const hda_nid_t alc662_ssids[] = { 0x1b, 0x14, 0 };
> >>       const hda_nid_t *ssids;
> >>
> >>       if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
> >>
> >> It gives me the multi-io config without side effects and without the
> >> hp_lo_shared and spk_lo_shared issue in get_line_out_pfx().
> 
> > Well, the starting point is wrong.  You cannot ignore pins if you
> > really use them.  It might look as if something is working casually,
> > but this isn't supposed to work at all.
> 
> I'm not using it.
> 
> Since it seems impossible to use it in addition to have a multi-io 6ch
> config, I've decided to "cut" it off.

Then why not just disabling the speaker pin via the pin config?


Takashi
diff mbox

Patch

diff -Nur a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
--- a/sound/pci/hda/patch_realtek.c	2015-02-27 02:49:36.000000000 +0100
+++ b/sound/pci/hda/patch_realtek.c	2015-03-05 17:09:15.305016021 +0100
@@ -5665,9 +5665,10 @@ 

 static int alc662_parse_auto_config(struct hda_codec *codec)
 {
-	static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
+	/* ignore internal speaker (0x15) in order to get a multi-io config */
+	static const hda_nid_t alc662_ignore[] = { 0x15, 0x1d, 0 };
 	static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 };
-	static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
+	static const hda_nid_t alc662_ssids[] = { 0x1b, 0x14, 0 };
 	const hda_nid_t *ssids;

 	if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||