Re: [Bisected regression] Microphone no longer works on Toshiba Satellite A100

From: Takashi Iwai
Date: Mon May 25 2009 - 01:57:33 EST

At Sun, 24 May 2009 14:06:37 -0400,
M. Vefa Bicakci wrote:
> Takashi Iwai wrote:
> > At Sun, 24 May 2009 11:51:17 -0400,
> > M. Vefa Bicakci wrote:
> >> Dear Takashi Iwai,
> >>
> >> I am sorry for sending this e-mail to you directly. I was going to
> >> CC you with linux-kernel@xxxxxxxxxxxxxxxxxxxx but forgot to do so.
> >
> > Thanks for report.
> > Your post doesn't appear on LKML yet, at least it didn't reach to
> > me. Anyway, could you run with --no-upload option and
> > attach the generated file? The script is found at
> >
> Attached are two outputs from this script. Please read below to learn
> why there are two different outputs.

Thanks. Does the patch below work?

> When one first boots this laptop, alsamixer does not show PCM playback and
> Digital Input capture channels. However, if I run a ALSA-compatible program
> which uses the PCM playback (such as mpg321) or the Digital Input capture
> channel (such as arecord), then the respective channels appear in alsamixer.
> Does this mean that a new "model=..." quirk needs to be written for this
> this laptop? ("model=toshiba" does not work properly.)

The PCM and Digital Capture Volume are implemented in alsa-lib softvol
plugin and is irrelevant with the driver model. They appear either
when you first use PCM via alsa-lib with that configuration, or when
you restore the previous volume setting via alsactl.

Usually distro udev or init script restores the previous volume via
alsactl, so this will appear after the very first use after the



diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index bcbb736..0fd258e 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -776,6 +776,12 @@ static void alc_set_input_pin(struct hda_codec *codec, hda_nid_t nid,
pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
if (pincap & AC_PINCAP_VREF_80)
val = PIN_VREF80;
+ else if (pincap & AC_PINCAP_VREF_50)
+ val = PIN_VREF50;
+ else if (pincap & AC_PINCAP_VREF_100)
+ val = PIN_VREF100;
+ else if (pincap & AC_PINCAP_VREF_GRD)
+ val = PIN_VREFGRD;
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, val);

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at