From: David Henningsson <david.henningsson@canonical.com>
Date: Wed, 1 Apr 2015 10:43:00 +0000 (+0200)
Subject: ALSA: hda - Fix subsystem ID read regression
X-Git-Tag: firefly_0821_release~176^2~1862^2~19^2~29
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ffda568e8b4979c6a04bbdd92acfd93b5dc5e163;p=firefly-linux-kernel-4.4.55.git

ALSA: hda - Fix subsystem ID read regression

A regression was introduced in 7639a06c23c7d4cda3: if AC_PAR_SUBSYSTEM_ID
reads as zero, one should retry using AC_VERB_GET_SUBSYSTEM_ID.

This seems to hit many codecs (my own laptop included), and causes
quirks for some machines not to apply correctly.

Reported-by: TienFu Chen <tienfu.chen@canonical.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---

diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
index 6e8ee1d6974a..53b6b95ff8cd 100644
--- a/sound/hda/hdac_device.c
+++ b/sound/hda/hdac_device.c
@@ -91,7 +91,7 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
 
 	codec->power_caps = snd_hdac_read_parm(codec, fg, AC_PAR_POWER_STATE);
 	/* reread ssid if not set by parameter */
-	if (codec->subsystem_id == -1)
+	if (codec->subsystem_id == -1 || codec->subsystem_id == 0)
 		snd_hdac_read(codec, fg, AC_VERB_GET_SUBSYSTEM_ID, 0,
 			      &codec->subsystem_id);