ALSA: hda - Fix the cmd cache keys for amp verbs
authorTakashi Iwai <tiwai@suse.de>
Wed, 15 Apr 2009 17:25:03 +0000 (17:25 +0000)
committerChris Wright <chrisw@sous-sol.org>
Mon, 27 Apr 2009 17:37:01 +0000 (10:37 -0700)
upstream commit: fcad94a4c71c36a05f4d5c6dcb174534b4e0b136

Fix the key value generation for get/set amp verbs.  The upper bits of
the parameter have to be combined with the verb value to be unique for
each direction/index of amp access.

This fixes the resume problem on some hardwares like Macbook after
the channel mode is changed.

Tested-by: Johannes Berg <johannes@sipsolutions.net>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
sound/pci/hda/hda_codec.c

index d03f99298be95eb64856288f71f957e4c63d2e8e..cef1ce05b18d62c0cc805c710cee4c934a832092 100644 (file)
@@ -2003,7 +2003,11 @@ int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
        err = bus->ops.command(bus, res);
        if (!err) {
                struct hda_cache_head *c;
-               u32 key = build_cmd_cache_key(nid, verb);
+               u32 key;
+               /* parm may contain the verb stuff for get/set amp */
+               verb = verb | (parm >> 8);
+               parm &= 0xff;
+               key = build_cmd_cache_key(nid, verb);
                c = get_alloc_hash(&codec->cmd_cache, key);
                if (c)
                        c->val = parm;