lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090428182155.3f6eae50@dev.queued.net>
Date:	Tue, 28 Apr 2009 18:21:55 -0400
From:	Andres Salomon <dilinger@...ued.net>
To:	Takashi Iwai <tiwai@...e.de>
Cc:	Kailang Yang <kailang@...ltek.com>, alsa-devel@...a-project.org,
	linux-kernel@...r.kernel.org
Subject: Re: realtek ALC272 support

On Tue, 28 Apr 2009 15:41:08 -0400
Andres Salomon <dilinger@...ued.net> wrote:

> On Mon, 27 Apr 2009 18:08:21 +0200
> Takashi Iwai <tiwai@...e.de> wrote:
> 
[...]
> > > > > > > > At Fri, 24 Apr 2009 15:24:15 -0400,
> > > > > > > > Andres Salomon wrote:
> > > > > > > > > 
> > > > > > > > > Hi Kailang,
> > > > > > > > > 
> > > > > > > > > I noticed that your name was on the ALC272 support
> > > > > > > > > patch for ALSA intel-hda.  This patch basically sets
> > > > > > > > > ALC272 to use (mostly) the same code as ALC662.  I
> > > > > > > > > have two machines that have ALC272, and both of them
> > > > > > > > > need verb tables in order to function.  I'm wondering
> > > > > > > > > if ALC662 should really be used..
> > > > > > > > > 
> > > > > > > > > Here's one -
> > > > > > > > > 
> > > > > > > > > http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-hardy-lum.git;a=commitdiff;h=7662834bb9a78d244c6d7ee43358c14c94d249c9
> > > > > > > > > 
> > > > > > > > > This isn't the final version of the patch (there are
> > > > > > > > > further commits I made in order to support headphone
> > > > > > > > > mic stuff), but it gives you an idea of the codec
> > > > > > > > > values. The other is:
> > > > > > > > > 
> > > > > > > > > http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-hardy-lum.git;a=commitdiff;h=72ff85641a30dc7ac502e2ea01bf14a04efb4cf1
> > > > > > > > > 
> > > > > > > > > All of these leave me wonder if there's a specific
> > > > > > > > > patch_alc272 function that could be written to rid
> > > > > > > > > ourselves of these specific quirks.  Are there
> > > > > > > > > machines with ALC272 that are functional with the
> > > > > > > > > current ALSA code?
> > > > > > > > 
[...]
> > 
> > Could you try sound-unstable tree a bit later again?
> > I found a bug in my patch, and fixed and updated GIT tree now.
> > At least, the headphone plugging should work now.
> > 
> > The mic auto-detection still doesn't work with model=auto, though.
> > So, I'm going to take your patch anyway later.  But I just wanted
> > to be sure that the current tree could work somehow better...
> > 
> 
> Hi,
> 
> I just updated and tried the current tree; still no sound/headphone
> output.  :(


Ok, I believe I've made some progress on this.  The problem appears to
be related to the autoconfig handling of the line out nids.  The
current code ends up with something like the following:

ALSA sound/pci/hda/hda_codec.c:3833: autoconfig: line_outs=1
(0x17/0x0/0x0/0x0/0x0)
ALSA sound/pci/hda/hda_codec.c:3837:    speaker_outs=0
(0x0/0x0/0x0/0x0/0x0)
ALSA sound/pci/hda/hda_codec.c:3841:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
ALSA sound/pci/hda/hda_codec.c:3842:    mono: mono_out=0x0
ALSA sound/pci/hda/hda_codec.c:3853: inputs: mic=0x18, fmic=0x19,
line=0x0, fline=0x0, cd=0x0, aux=0x0

However, NID 0x17 is actually a speaker_out.  The code that checks for
line_outs in snd_hda_parse_pin_def_config() unsets the speaker_out and
uses that NID for a line_out.  For whatever reason, this breaks things
(no sound output, no headphone out).


According to the ALC272 data sheet (the block diagram on page 5),
there are actually 2 line_out NIDs; 0x14 and 0x15.  The default pin
configs for these two NIDs (0x411111f0 for both) have the Port
Connectivity field set to AC_JACK_PORT_NONE, so the auto-config skips
those NIDs.

If I provide an override to a) set Port Connectivity to
AC_JACK_PORT_COMPLEX, and b) set Default Device to AC_JACK_LINE_OUT
(from AC_JACK_SPEAKER), I get usable audio (speakers work,
headphone works, headphone plugging mutes the speaker properly, and
even the mic works).  The patch which I've used is below.

Clearly, this isn't a very nice solution, so the question is:
is there a way to provide an override/quirk for pincfgs (I see one for
HWDEP, but that's configuration-specific) within the current hda_codec
framework for this specific codec/laptop?  Alternatively, I can try and
figure out what's wrong with the code in the case where
line_out_pins[0] is set to the speaker_out_pins[0] (ie, NID 0x17 in
this case).  

I can check the other ALC272 machine tomorrow (the DELL_ZM1) to see if
the line_out hack enables it to work without the verb table.




diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index b91f6ed..5aa7a0c 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3644,6 +3644,15 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec,
 			continue;
 
 		def_conf = snd_hda_codec_get_pincfg(codec, nid);
+		snd_printd("nid %x: pincfg def_conf=%x\n", nid, def_conf);
+		if (codec->vendor_id == 0x10ec0272 &&
+				(nid == 0x14 || nid == 0x15)) {
+			def_conf &= ~(0x3 << AC_DEFCFG_PORT_CONN_SHIFT);
+			def_conf &= ~(0xf << AC_DEFCFG_DEVICE_SHIFT);
+			snd_printd("nid %x: overriding def_conf, now %x\n", nid,
+					def_conf);
+		}
+
 		if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
 			continue;
 		loc = get_defcfg_location(def_conf);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ