ALSA: hda/ca0132 - Add ZxR quirks + new quirk check function

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>
This commit is contained in:
Connor McAdams 2018-09-29 23:03:18 -04:00 committed by Takashi Iwai
parent 8e6bc6b3aa
commit b29733db3b
1 changed files with 28 additions and 0 deletions

View 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;