Subject: Re: Intel sound proke in today;s next

From: Takashi Iwai <[email-masked]>
Date: Tue, 27 Jul 2010 07:41:18 +0200

At Mon, 26 Jul 2010 22:54:42 +0200,
Piotr Hosowicz wrote:
> 
> On 26.07.2010 22:17, Takashi Iwai wrote:
> 
> >>>> You need to pass the branch. In this case, pass for-next
> >>>
> >>> I passed topic/hda and rebuilt the kernel and now everything is working.
> >>
> >> I have just git pulled for-next and saw many files downloaded so I
> >> wonder how synced with topic/hda it's working.
> >
> > It contains other two branches, topic/misc and topic/asoc.
> > (Also sometimes missing fix/asoc and fix/misc merges).
> >
> > topic/asoc branch is specific to ASoC, so very likely irrelevant.
> > If any, some changes in the sound core code in topic/misc might
> > influence in your case...
> 
> Ok, so I'll use for-next then. Thank you again, you taught me a lot.

I guess you hit the regression fixed right now, so slipped from
today's linux-next.  The patch is below.

(The reason why topic/hda branch worked is that I pulled the changes
 to  topic/misc branch from Jaroslav's tree because his branch
 contains more other changes than HD-audio specific.  And I forgot
 about this commit until today, grrr.)

thanks,

Takashi

---
>>From 1a9bbe35dd5c0d0d6322d828779c2abbdd927340 Mon Sep 17 00:00:00 2001
From: David Henningsson <[email-masked]>
Date: Tue, 27 Jul 2010 00:10:34 +0200
Subject: [PATCH] ALSA: hda: Fixup commit 79c944ad (caused codec initialization failure)

Commit 79c944ad caused codecs not to be detected in some cases,
found on several Realtek codecs.

Signed-off-by: David Henningsson <[email-masked]>
Signed-off-by: Takashi Iwai <[email-masked]>
---
 sound/pci/hda/hda_codec.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 6e0de65..88f26e2 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -724,23 +724,24 @@ static int get_codec_name(struct hda_codec *codec)
  */
 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
 {
-	int i, total_nodes, function_id;
+	int i, total_nodes, function_id, param_val;
 	hda_nid_t nid;
 
 	total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
 	for (i = 0; i < total_nodes; i++, nid++) {
-		function_id = snd_hda_param_read(codec, nid,
+		param_val = snd_hda_param_read(codec, nid,
 						AC_PAR_FUNCTION_TYPE);
+		function_id = param_val & 0xff;
 		switch (function_id) {
 		case AC_GRP_AUDIO_FUNCTION:
 			codec->afg = nid;
-			codec->afg_function_id = function_id & 0xff;
-			codec->afg_unsol = (function_id >> 8) & 1;
+			codec->afg_function_id = function_id;
+			codec->afg_unsol = (param_val >> 8) & 1;
 			break;
 		case AC_GRP_MODEM_FUNCTION:
 			codec->mfg = nid;
-			codec->mfg_function_id = function_id & 0xff;
-			codec->mfg_unsol = (function_id >> 8) & 1;
+			codec->mfg_function_id = function_id;
+			codec->mfg_unsol = (param_val >> 8) & 1;
 			break;
 		default:
 			break;
-- 
1.7.2