]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ALSA: hda/ca0132 - Add ZxR quirks + new quirk check function
authorConnor McAdams <conmanx360@gmail.com>
Sun, 30 Sep 2018 03:03:18 +0000 (23:03 -0400)
committerTakashi Iwai <tiwai@suse.de>
Tue, 2 Oct 2018 15:20:17 +0000 (17:20 +0200)
This patch adds quirk ID's for the ZxR and it's daughter board, the
DBPro. It also adds a function for determining the quirk for each board
through HDA subsytem ID's instead of PCI subsystem ID's.

Signed-off-by: Connor McAdams <conmanx360@gmail.com>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_ca0132.c

index 5a3fb56404dbc395be4166b205b6b0784055eded..08dd85db29539b6c89c85d265cd61df9c7fbdfae 100644 (file)
@@ -1071,6 +1071,8 @@ enum {
        QUIRK_ALIENWARE,
        QUIRK_ALIENWARE_M17XR4,
        QUIRK_SBZ,
+       QUIRK_ZXR,
+       QUIRK_ZXR_DBPRO,
        QUIRK_R3DI,
        QUIRK_R3D,
        QUIRK_AE5,
@@ -8376,6 +8378,29 @@ static int ca0132_prepare_verbs(struct hda_codec *codec)
        return 0;
 }
 
+/*
+ * The Sound Blaster ZxR shares the same PCI subsystem ID as some regular
+ * Sound Blaster Z cards. However, they have different HDA codec subsystem
+ * ID's. So, we check for the ZxR's subsystem ID, as well as the DBPro
+ * daughter boards ID.
+ */
+static void sbz_detect_quirk(struct hda_codec *codec)
+{
+       struct ca0132_spec *spec = codec->spec;
+
+       switch (codec->core.subsystem_id) {
+       case 0x11020033:
+               spec->quirk = QUIRK_ZXR;
+               break;
+       case 0x1102003f:
+               spec->quirk = QUIRK_ZXR_DBPRO;
+               break;
+       default:
+               spec->quirk = QUIRK_SBZ;
+               break;
+       }
+}
+
 static int patch_ca0132(struct hda_codec *codec)
 {
        struct ca0132_spec *spec;
@@ -8401,6 +8426,9 @@ static int patch_ca0132(struct hda_codec *codec)
        else
                spec->quirk = QUIRK_NONE;
 
+       if (spec->quirk == QUIRK_SBZ)
+               sbz_detect_quirk(codec);
+
        spec->dsp_state = DSP_DOWNLOAD_INIT;
        spec->num_mixers = 1;