All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops
@ 2013-10-30 16:44 Takashi Iwai
  2013-10-31  8:32 ` David Henningsson
  0 siblings, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2013-10-30 16:44 UTC (permalink / raw)
  To: alsa-devel

ASUS N56VZ and N76VZ laptops have a bass speaker but its output comes
only from the right channel.  This patch adds the extra chmap specific
to these models.

Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=846531
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/pci/hda/patch_realtek.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 13ad49ca9357..2d7c86d81196 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4426,6 +4426,25 @@ static void alc272_fixup_mario(struct hda_codec *codec,
 		       "hda_codec: failed to override amp caps for NID 0x2\n");
 }
 
+static const struct snd_pcm_chmap_elem asus_pcm_2_1_chmaps[] = {
+	{ .channels = 2,
+	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
+	{ .channels = 4,
+	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
+		   SNDRV_CHMAP_NA, SNDRV_CHMAP_LFE } }, /* LFE only on right */
+	{ }
+};
+
+/* override the 2.1 chmap */
+static void alc662_fixup_bass_chmap(struct hda_codec *codec,
+				    const struct hda_fixup *fix, int action)
+{
+	if (action == HDA_FIXUP_ACT_BUILD) {
+		struct alc_spec *spec = codec->spec;
+		spec->gen.pcm_rec[0].stream[0].chmap = asus_pcm_2_1_chmaps;
+	}
+}
+
 enum {
 	ALC662_FIXUP_ASPIRE,
 	ALC662_FIXUP_IDEAPAD,
@@ -4446,6 +4465,7 @@ enum {
 	ALC662_FIXUP_INV_DMIC,
 	ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
 	ALC668_FIXUP_HEADSET_MODE,
+	ALC662_FIXUP_BASS_CHMAP,
 };
 
 static const struct hda_fixup alc662_fixups[] = {
@@ -4620,6 +4640,12 @@ static const struct hda_fixup alc662_fixups[] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc_fixup_headset_mode_alc668,
 	},
+	[ALC662_FIXUP_BASS_CHMAP] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc662_fixup_bass_chmap,
+		.chained = true,
+		.chain_id = ALC662_FIXUP_ASUS_MODE4
+	},
 };
 
 static const struct snd_pci_quirk alc662_fixup_tbl[] = {
@@ -4633,8 +4659,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
-	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
-	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
+	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
+	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_CHMAP),
 	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
 	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
 	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
-- 
1.8.4.1

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

* Re: [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops
  2013-10-30 16:44 [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops Takashi Iwai
@ 2013-10-31  8:32 ` David Henningsson
  2013-10-31  8:55   ` Takashi Iwai
  0 siblings, 1 reply; 5+ messages in thread
From: David Henningsson @ 2013-10-31  8:32 UTC (permalink / raw)
  To: Takashi Iwai, alsa-devel

On 10/30/2013 05:44 PM, Takashi Iwai wrote:
> ASUS N56VZ and N76VZ laptops have a bass speaker but its output comes
> only from the right channel.  This patch adds the extra chmap specific
> to these models.
> 
> Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=846531

Hmm, according to the bug report, the chmap (before this patch) was FL,
FR, RL, RR.

I thought this was already fixed; but if it isn't, it should probably be
fixed on a more generic level: e g, whenever there is a "Bass Speaker"
control, the chmap should also be changed.

> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>  sound/pci/hda/patch_realtek.c | 30 ++++++++++++++++++++++++++++--
>  1 file changed, 28 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 13ad49ca9357..2d7c86d81196 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -4426,6 +4426,25 @@ static void alc272_fixup_mario(struct hda_codec *codec,
>  		       "hda_codec: failed to override amp caps for NID 0x2\n");
>  }
>  
> +static const struct snd_pcm_chmap_elem asus_pcm_2_1_chmaps[] = {
> +	{ .channels = 2,
> +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
> +	{ .channels = 4,
> +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
> +		   SNDRV_CHMAP_NA, SNDRV_CHMAP_LFE } }, /* LFE only on right */
> +	{ }
> +};
> +
> +/* override the 2.1 chmap */
> +static void alc662_fixup_bass_chmap(struct hda_codec *codec,
> +				    const struct hda_fixup *fix, int action)
> +{
> +	if (action == HDA_FIXUP_ACT_BUILD) {
> +		struct alc_spec *spec = codec->spec;
> +		spec->gen.pcm_rec[0].stream[0].chmap = asus_pcm_2_1_chmaps;
> +	}
> +}
> +
>  enum {
>  	ALC662_FIXUP_ASPIRE,
>  	ALC662_FIXUP_IDEAPAD,
> @@ -4446,6 +4465,7 @@ enum {
>  	ALC662_FIXUP_INV_DMIC,
>  	ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
>  	ALC668_FIXUP_HEADSET_MODE,
> +	ALC662_FIXUP_BASS_CHMAP,
>  };
>  
>  static const struct hda_fixup alc662_fixups[] = {
> @@ -4620,6 +4640,12 @@ static const struct hda_fixup alc662_fixups[] = {
>  		.type = HDA_FIXUP_FUNC,
>  		.v.func = alc_fixup_headset_mode_alc668,
>  	},
> +	[ALC662_FIXUP_BASS_CHMAP] = {
> +		.type = HDA_FIXUP_FUNC,
> +		.v.func = alc662_fixup_bass_chmap,
> +		.chained = true,
> +		.chain_id = ALC662_FIXUP_ASUS_MODE4
> +	},
>  };
>  
>  static const struct snd_pci_quirk alc662_fixup_tbl[] = {
> @@ -4633,8 +4659,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
>  	SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
>  	SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
>  	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
> -	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
> -	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
> +	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
> +	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_CHMAP),
>  	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
>  	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
>  	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
> 



-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic

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

* Re: [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops
  2013-10-31  8:32 ` David Henningsson
@ 2013-10-31  8:55   ` Takashi Iwai
  2013-10-31  9:14     ` David Henningsson
  0 siblings, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2013-10-31  8:55 UTC (permalink / raw)
  To: David Henningsson; +Cc: alsa-devel

At Thu, 31 Oct 2013 09:32:53 +0100,
David Henningsson wrote:
> 
> On 10/30/2013 05:44 PM, Takashi Iwai wrote:
> > ASUS N56VZ and N76VZ laptops have a bass speaker but its output comes
> > only from the right channel.  This patch adds the extra chmap specific
> > to these models.
> > 
> > Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=846531
> 
> Hmm, according to the bug report, the chmap (before this patch) was FL,
> FR, RL, RR.

Well, the bug report isn't clear enough, but it's the output of the
current driver, i.e. the wrong output.

> I thought this was already fixed; but if it isn't, it should probably be
> fixed on a more generic level: e g, whenever there is a "Bass Speaker"
> control, the chmap should also be changed.

Yeah, if there are more such right-channel-only bass speaker, we
should move it into the generic parser.


Takashi


> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> > ---
> >  sound/pci/hda/patch_realtek.c | 30 ++++++++++++++++++++++++++++--
> >  1 file changed, 28 insertions(+), 2 deletions(-)
> > 
> > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> > index 13ad49ca9357..2d7c86d81196 100644
> > --- a/sound/pci/hda/patch_realtek.c
> > +++ b/sound/pci/hda/patch_realtek.c
> > @@ -4426,6 +4426,25 @@ static void alc272_fixup_mario(struct hda_codec *codec,
> >  		       "hda_codec: failed to override amp caps for NID 0x2\n");
> >  }
> >  
> > +static const struct snd_pcm_chmap_elem asus_pcm_2_1_chmaps[] = {
> > +	{ .channels = 2,
> > +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
> > +	{ .channels = 4,
> > +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
> > +		   SNDRV_CHMAP_NA, SNDRV_CHMAP_LFE } }, /* LFE only on right */
> > +	{ }
> > +};
> > +
> > +/* override the 2.1 chmap */
> > +static void alc662_fixup_bass_chmap(struct hda_codec *codec,
> > +				    const struct hda_fixup *fix, int action)
> > +{
> > +	if (action == HDA_FIXUP_ACT_BUILD) {
> > +		struct alc_spec *spec = codec->spec;
> > +		spec->gen.pcm_rec[0].stream[0].chmap = asus_pcm_2_1_chmaps;
> > +	}
> > +}
> > +
> >  enum {
> >  	ALC662_FIXUP_ASPIRE,
> >  	ALC662_FIXUP_IDEAPAD,
> > @@ -4446,6 +4465,7 @@ enum {
> >  	ALC662_FIXUP_INV_DMIC,
> >  	ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
> >  	ALC668_FIXUP_HEADSET_MODE,
> > +	ALC662_FIXUP_BASS_CHMAP,
> >  };
> >  
> >  static const struct hda_fixup alc662_fixups[] = {
> > @@ -4620,6 +4640,12 @@ static const struct hda_fixup alc662_fixups[] = {
> >  		.type = HDA_FIXUP_FUNC,
> >  		.v.func = alc_fixup_headset_mode_alc668,
> >  	},
> > +	[ALC662_FIXUP_BASS_CHMAP] = {
> > +		.type = HDA_FIXUP_FUNC,
> > +		.v.func = alc662_fixup_bass_chmap,
> > +		.chained = true,
> > +		.chain_id = ALC662_FIXUP_ASUS_MODE4
> > +	},
> >  };
> >  
> >  static const struct snd_pci_quirk alc662_fixup_tbl[] = {
> > @@ -4633,8 +4659,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
> >  	SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
> >  	SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
> >  	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
> > -	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
> > -	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
> > +	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
> > +	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_CHMAP),
> >  	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
> >  	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
> >  	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
> > 
> 
> 
> 
> -- 
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic
> 

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

* Re: [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops
  2013-10-31  8:55   ` Takashi Iwai
@ 2013-10-31  9:14     ` David Henningsson
  2013-10-31  9:19       ` Takashi Iwai
  0 siblings, 1 reply; 5+ messages in thread
From: David Henningsson @ 2013-10-31  9:14 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

On 10/31/2013 09:55 AM, Takashi Iwai wrote:
> At Thu, 31 Oct 2013 09:32:53 +0100,
> David Henningsson wrote:
>>
>> On 10/30/2013 05:44 PM, Takashi Iwai wrote:
>>> ASUS N56VZ and N76VZ laptops have a bass speaker but its output comes
>>> only from the right channel.  This patch adds the extra chmap specific
>>> to these models.
>>>
>>> Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=846531
>>
>> Hmm, according to the bug report, the chmap (before this patch) was FL,
>> FR, RL, RR.
> 
> Well, the bug report isn't clear enough, but it's the output of the
> current driver, i.e. the wrong output.
> 
>> I thought this was already fixed; but if it isn't, it should probably be
>> fixed on a more generic level: e g, whenever there is a "Bass Speaker"
>> control, the chmap should also be changed.
> 
> Yeah, if there are more such right-channel-only bass speaker, we
> should move it into the generic parser.

Looking at the code, I'm referring to snd_pcm_2_1_chmaps, which would be
the original. I admit FL FR NA LFE is a slight improvement over FL FR
LFE LFE, if that is what the hardware does.

The strange thing is why the original was FL FR RL RR, not FL FR LFE LFE...

> 
> 
> Takashi
> 
> 
>>> Signed-off-by: Takashi Iwai <tiwai@suse.de>
>>> ---
>>>  sound/pci/hda/patch_realtek.c | 30 ++++++++++++++++++++++++++++--
>>>  1 file changed, 28 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
>>> index 13ad49ca9357..2d7c86d81196 100644
>>> --- a/sound/pci/hda/patch_realtek.c
>>> +++ b/sound/pci/hda/patch_realtek.c
>>> @@ -4426,6 +4426,25 @@ static void alc272_fixup_mario(struct hda_codec *codec,
>>>  		       "hda_codec: failed to override amp caps for NID 0x2\n");
>>>  }
>>>  
>>> +static const struct snd_pcm_chmap_elem asus_pcm_2_1_chmaps[] = {
>>> +	{ .channels = 2,
>>> +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
>>> +	{ .channels = 4,
>>> +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
>>> +		   SNDRV_CHMAP_NA, SNDRV_CHMAP_LFE } }, /* LFE only on right */
>>> +	{ }
>>> +};
>>> +
>>> +/* override the 2.1 chmap */
>>> +static void alc662_fixup_bass_chmap(struct hda_codec *codec,
>>> +				    const struct hda_fixup *fix, int action)
>>> +{
>>> +	if (action == HDA_FIXUP_ACT_BUILD) {
>>> +		struct alc_spec *spec = codec->spec;
>>> +		spec->gen.pcm_rec[0].stream[0].chmap = asus_pcm_2_1_chmaps;

Nitpick: maybe want to use an enum here instead of referring to index 0.

>>> +	}
>>> +}
>>> +
>>>  enum {
>>>  	ALC662_FIXUP_ASPIRE,
>>>  	ALC662_FIXUP_IDEAPAD,
>>> @@ -4446,6 +4465,7 @@ enum {
>>>  	ALC662_FIXUP_INV_DMIC,
>>>  	ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
>>>  	ALC668_FIXUP_HEADSET_MODE,
>>> +	ALC662_FIXUP_BASS_CHMAP,
>>>  };
>>>  
>>>  static const struct hda_fixup alc662_fixups[] = {
>>> @@ -4620,6 +4640,12 @@ static const struct hda_fixup alc662_fixups[] = {
>>>  		.type = HDA_FIXUP_FUNC,
>>>  		.v.func = alc_fixup_headset_mode_alc668,
>>>  	},
>>> +	[ALC662_FIXUP_BASS_CHMAP] = {
>>> +		.type = HDA_FIXUP_FUNC,
>>> +		.v.func = alc662_fixup_bass_chmap,
>>> +		.chained = true,
>>> +		.chain_id = ALC662_FIXUP_ASUS_MODE4
>>> +	},
>>>  };
>>>  
>>>  static const struct snd_pci_quirk alc662_fixup_tbl[] = {
>>> @@ -4633,8 +4659,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
>>>  	SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
>>>  	SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
>>>  	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
>>> -	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
>>> -	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
>>> +	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
>>> +	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_CHMAP),
>>>  	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
>>>  	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
>>>  	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
>>>
>>
>>
>>
>> -- 
>> David Henningsson, Canonical Ltd.
>> https://launchpad.net/~diwic
>>
> 



-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic

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

* Re: [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops
  2013-10-31  9:14     ` David Henningsson
@ 2013-10-31  9:19       ` Takashi Iwai
  0 siblings, 0 replies; 5+ messages in thread
From: Takashi Iwai @ 2013-10-31  9:19 UTC (permalink / raw)
  To: David Henningsson; +Cc: alsa-devel

At Thu, 31 Oct 2013 10:14:37 +0100,
David Henningsson wrote:
> 
> On 10/31/2013 09:55 AM, Takashi Iwai wrote:
> > At Thu, 31 Oct 2013 09:32:53 +0100,
> > David Henningsson wrote:
> >>
> >> On 10/30/2013 05:44 PM, Takashi Iwai wrote:
> >>> ASUS N56VZ and N76VZ laptops have a bass speaker but its output comes
> >>> only from the right channel.  This patch adds the extra chmap specific
> >>> to these models.
> >>>
> >>> Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=846531
> >>
> >> Hmm, according to the bug report, the chmap (before this patch) was FL,
> >> FR, RL, RR.
> > 
> > Well, the bug report isn't clear enough, but it's the output of the
> > current driver, i.e. the wrong output.
> > 
> >> I thought this was already fixed; but if it isn't, it should probably be
> >> fixed on a more generic level: e g, whenever there is a "Bass Speaker"
> >> control, the chmap should also be changed.
> > 
> > Yeah, if there are more such right-channel-only bass speaker, we
> > should move it into the generic parser.
> 
> Looking at the code, I'm referring to snd_pcm_2_1_chmaps, which would be
> the original. I admit FL FR NA LFE is a slight improvement over FL FR
> LFE LFE, if that is what the hardware does.
>
> The strange thing is why the original was FL FR RL RR, not FL FR LFE LFE...

Yeah, it's likely a result from some older version.


Takashi

> > 
> > Takashi
> > 
> > 
> >>> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> >>> ---
> >>>  sound/pci/hda/patch_realtek.c | 30 ++++++++++++++++++++++++++++--
> >>>  1 file changed, 28 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> >>> index 13ad49ca9357..2d7c86d81196 100644
> >>> --- a/sound/pci/hda/patch_realtek.c
> >>> +++ b/sound/pci/hda/patch_realtek.c
> >>> @@ -4426,6 +4426,25 @@ static void alc272_fixup_mario(struct hda_codec *codec,
> >>>  		       "hda_codec: failed to override amp caps for NID 0x2\n");
> >>>  }
> >>>  
> >>> +static const struct snd_pcm_chmap_elem asus_pcm_2_1_chmaps[] = {
> >>> +	{ .channels = 2,
> >>> +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
> >>> +	{ .channels = 4,
> >>> +	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
> >>> +		   SNDRV_CHMAP_NA, SNDRV_CHMAP_LFE } }, /* LFE only on right */
> >>> +	{ }
> >>> +};
> >>> +
> >>> +/* override the 2.1 chmap */
> >>> +static void alc662_fixup_bass_chmap(struct hda_codec *codec,
> >>> +				    const struct hda_fixup *fix, int action)
> >>> +{
> >>> +	if (action == HDA_FIXUP_ACT_BUILD) {
> >>> +		struct alc_spec *spec = codec->spec;
> >>> +		spec->gen.pcm_rec[0].stream[0].chmap = asus_pcm_2_1_chmaps;
> 
> Nitpick: maybe want to use an enum here instead of referring to index 0.
> 
> >>> +	}
> >>> +}
> >>> +
> >>>  enum {
> >>>  	ALC662_FIXUP_ASPIRE,
> >>>  	ALC662_FIXUP_IDEAPAD,
> >>> @@ -4446,6 +4465,7 @@ enum {
> >>>  	ALC662_FIXUP_INV_DMIC,
> >>>  	ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
> >>>  	ALC668_FIXUP_HEADSET_MODE,
> >>> +	ALC662_FIXUP_BASS_CHMAP,
> >>>  };
> >>>  
> >>>  static const struct hda_fixup alc662_fixups[] = {
> >>> @@ -4620,6 +4640,12 @@ static const struct hda_fixup alc662_fixups[] = {
> >>>  		.type = HDA_FIXUP_FUNC,
> >>>  		.v.func = alc_fixup_headset_mode_alc668,
> >>>  	},
> >>> +	[ALC662_FIXUP_BASS_CHMAP] = {
> >>> +		.type = HDA_FIXUP_FUNC,
> >>> +		.v.func = alc662_fixup_bass_chmap,
> >>> +		.chained = true,
> >>> +		.chain_id = ALC662_FIXUP_ASUS_MODE4
> >>> +	},
> >>>  };
> >>>  
> >>>  static const struct snd_pci_quirk alc662_fixup_tbl[] = {
> >>> @@ -4633,8 +4659,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
> >>>  	SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
> >>>  	SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
> >>>  	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
> >>> -	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
> >>> -	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
> >>> +	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
> >>> +	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_CHMAP),
> >>>  	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
> >>>  	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
> >>>  	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
> >>>
> >>
> >>
> >>
> >> -- 
> >> David Henningsson, Canonical Ltd.
> >> https://launchpad.net/~diwic
> >>
> > 
> 
> 
> 
> -- 
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic
> 

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

end of thread, other threads:[~2013-10-31  9:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-30 16:44 [PATCH] ALSA: hda - Add extra chmap for 2.1 outputs on ASUS laptops Takashi Iwai
2013-10-31  8:32 ` David Henningsson
2013-10-31  8:55   ` Takashi Iwai
2013-10-31  9:14     ` David Henningsson
2013-10-31  9:19       ` 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.