[alsa-devel] No sound on Quanta KN1 with kernel 3.4
Takashi Iwai
tiwai at suse.de
Wed Apr 18 21:25:40 CEST 2012
At Wed, 18 Apr 2012 20:43:51 +0200,
Takashi Iwai wrote:
>
> At Wed, 18 Apr 2012 19:33:35 +0200,
> Uros Vampl wrote:
> >
> > On 18.04.12 18:41, Takashi Iwai wrote:
> > > Ah, does it affect both?
> > > What happens if you change the pin 0x10? Does it affect the headphone
> > > or speaker output?
> >
> > Pin 0x0f affects both. Pin 0x10 affects neither.
> >
> > > Does the headphone output work with 3.4 kernel at all?
> >
> > No. I always tested both speakers and headphones with each patch (and
> > without patches). There was never any sound from either of the two.
>
> OK. This explains lots.
>
> > > Also, just to be sure, try the patch below in addition to another.
> > > This will disable the COEF setup, and it wasn't applied to previous
> > > models.
> >
> > This patch does the trick! First I tried it with the patch that deletes
> > two lines from hda_codec.c, worked already, but there was no Speaker
> > control. Then I instead tried with the patch that sets pin 0x0f. Sound
> > works and I have a Speaker control. Interesting thing though, the
> > Headphone control does nothing and the Speaker control affects both
> > speakers and headphones. Maybe pin 0x10 is bogus too.
> >
> > Also interesting, the Auto-Mute control does nothing. No matter what
> > it's set to, when I plug in headphones the speakers go silent. It seems
> > the machine has hardware auto-mute handling.
> >
> > Thank you for your work, I now have sound again!
>
> The patch below is the integrated fix patch.
> Try this one instead of the all previous fixes.
> Again with this patch, you'll have only "Master" volume, as both
> speaker and headphone share the same pin, thus no individual amps are
> present.
>
> Hopefully this works for you.
BTW, has the auto-mute via HP plug ever worked with your machine?
If not, try the patch below instead. It might be that your machine
needs a similar trick like some other ALC260 laptops.
Takashi
---
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 2508f81..7de3502 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -1445,6 +1445,13 @@ enum {
ALC_FIXUP_ACT_BUILD,
};
+static void alc_apply_pincfgs(struct hda_codec *codec,
+ const struct alc_pincfg *cfg)
+{
+ for (; cfg->nid; cfg++)
+ snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val);
+}
+
static void alc_apply_fixup(struct hda_codec *codec, int action)
{
struct alc_spec *spec = codec->spec;
@@ -1478,9 +1485,7 @@ static void alc_apply_fixup(struct hda_codec *codec, int action)
snd_printdd(KERN_INFO "hda_codec: %s: "
"Apply pincfg for %s\n",
codec->chip_name, modelname);
- for (; cfg->nid; cfg++)
- snd_hda_codec_set_pincfg(codec, cfg->nid,
- cfg->val);
+ alc_apply_pincfgs(codec, cfg);
break;
case ALC_FIXUP_VERBS:
if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs)
@@ -4861,6 +4866,7 @@ enum {
ALC260_FIXUP_GPIO1_TOGGLE,
ALC260_FIXUP_REPLACER,
ALC260_FIXUP_HP_B1900,
+ ALC260_FIXUP_KN1,
};
static void alc260_gpio1_automute(struct hda_codec *codec)
@@ -4888,6 +4894,36 @@ static void alc260_fixup_gpio1_toggle(struct hda_codec *codec,
}
}
+static void alc260_fixup_kn1(struct hda_codec *codec,
+ const struct alc_fixup *fix, int action)
+{
+ struct alc_spec *spec = codec->spec;
+ static const struct alc_pincfg pincfgs[] = {
+ { 0x0f, 0x02214000 }, /* HP/speaker */
+ { 0x12, 0x90a60160 }, /* int mic */
+ { 0x13, 0x02a19000 }, /* ext mic */
+ { 0x18, 0x01446000 }, /* SPDIF out */
+ /* disable bogus I/O pins */
+ { 0x10, 0x411111f0 },
+ { 0x11, 0x411111f0 },
+ { 0x14, 0x411111f0 },
+ { 0x15, 0x411111f0 },
+ { 0x16, 0x411111f0 },
+ { 0x17, 0x411111f0 },
+ { 0x19, 0x411111f0 },
+ { }
+ };
+
+ switch (action) {
+ case ALC_FIXUP_ACT_PRE_PROBE:
+ alc_apply_pincfgs(codec, pincfgs);
+ break;
+ case ALC_FIXUP_ACT_PROBE:
+ spec->init_amp = ALC_INIT_NONE;
+ break;
+ }
+}
+
static const struct alc_fixup alc260_fixups[] = {
[ALC260_FIXUP_HP_DC5750] = {
.type = ALC_FIXUP_PINS,
@@ -4938,7 +4974,13 @@ static const struct alc_fixup alc260_fixups[] = {
.v.func = alc260_fixup_gpio1_toggle,
.chained = true,
.chain_id = ALC260_FIXUP_COEF,
- }
+ },
+ [ALC260_FIXUP_KN1] = {
+ .type = ALC_FIXUP_FUNC,
+ .v.func = alc260_fixup_kn1,
+ .chained = true,
+ .chain_id = ALC260_FIXUP_GPIO1_TOGGLE,
+ },
};
static const struct snd_pci_quirk alc260_fixup_tbl[] = {
@@ -4948,6 +4990,7 @@ static const struct snd_pci_quirk alc260_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", ALC260_FIXUP_HP_DC5750),
SND_PCI_QUIRK(0x103c, 0x30ba, "HP Presario B1900", ALC260_FIXUP_HP_B1900),
SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FIXUP_GPIO1),
+ SND_PCI_QUIRK(0x152d, 0x0729, "Quanta KN1", ALC260_FIXUP_KN1),
SND_PCI_QUIRK(0x161f, 0x2057, "Replacer 672V", ALC260_FIXUP_REPLACER),
SND_PCI_QUIRK(0x1631, 0xc017, "PB V7900", ALC260_FIXUP_COEF),
{}
More information about the Alsa-devel
mailing list