[alsa-devel] EeePC 1005PE microphone is "stereo only", silent in mono
Takashi Iwai
tiwai at suse.de
Tue Aug 2 09:58:43 CEST 2011
At Mon, 01 Aug 2011 13:12:29 -0400,
Pavel Roskin wrote:
>
> Hello!
>
> Quoting Takashi Iwai <tiwai at suse.de>:
>
> > At Sun, 31 Jul 2011 23:39:45 -0400,
> > Pavel Roskin wrote:
>
> >> My laptop has ALC269, bit it also used the DMIC quirk:
> >> SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005HA", ALC269_DMIC),
> >
> > It might be that ALC269 has a same or similar COEF like ALC271 or
> > ALC889. For ALC271, the following verbs do the mono-mixing of d-mic,
> >
> > {0x20, AC_VERB_SET_COEF_INDEX, 0x0d},
> > {0x20, AC_VERB_SET_PROC_COEF, 0x4000},
> >
> > while for ALC889, the following do:
> >
> > {0x20, AC_VERB_SET_COEF_INDEX, 0x0b},
> > {0x20, AC_VERB_SET_PROC_COEF, 0x0003},
> >
> > Try the above via hda-verb once whether it has any effect on your
> > machine.
>
> I tried both using hda-verb 0.3 but didn't have any effect. I tied
> playing with hda-verb a little bit. For COEF_INDEX 0xb, the initial
> value returned by GET_PROC_COEF is 0x5cc0. The lowest value (after
> writing 0) is 0x5c00. The highest value (after writing 0xffff) is
> 0x5dff. Writing 0x0003 results in 0x5c03, quite predictably.
>
> For COEF_INDEX 0xd, the initial value is 0xf000. The range is from 0
> to 0xffc0. Setting 0x4000 succeeds, 0x4000 is read back.
>
> Maybe I could run some script looking for acoustic feedback?
>
> This gives feedback:
>
> arecord -f cd --channels 2 | aplay -
>
> This gives no feedback (pulse audio is used, output volume is maximal):
>
> arecord -f cd --channels 1 | aplay -
Kailang at Realtek suggested that the verb above is only for ALC269vb,
but he found out another workaround (coef idx 7 bit 7).
Could you try the patch below?
thanks,
Takashi
---
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index e125c60..d3f67ef 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4484,6 +4484,17 @@ static void alc269_fixup_pcm_44k(struct hda_codec *codec,
spec->stream_analog_capture = &alc269_44k_pcm_analog_capture;
}
+static void alc269_fixup_dmic(struct hda_codec *codec,
+ const struct alc_fixup *fix, int action)
+{
+ int coef;
+
+ if (action != ALC_FIXUP_ACT_INIT)
+ return;
+ coef = alc_read_coef_idx(codec, 0x07);
+ alc_write_coef_idx(codec, 0x07, coef | 0x80);
+}
+
enum {
ALC269_FIXUP_SONY_VAIO,
ALC275_FIXUP_SONY_VAIO_GPIO2,
@@ -4494,6 +4505,7 @@ enum {
ALC275_FIXUP_SONY_HWEQ,
ALC271_FIXUP_DMIC,
ALC269_FIXUP_PCM_44K,
+ ALC269_FIXUP_DMIC,
};
static const struct alc_fixup alc269_fixups[] = {
@@ -4556,10 +4568,15 @@ static const struct alc_fixup alc269_fixups[] = {
.type = ALC_FIXUP_FUNC,
.v.func = alc269_fixup_pcm_44k,
},
+ [ALC269_FIXUP_DMIC] = {
+ .type = ALC_FIXUP_FUNC,
+ .v.func = alc269_fixup_dmic,
+ },
};
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
+ SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005HA", ALC269_FIXUP_DMIC),
SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
More information about the Alsa-devel
mailing list