ALSA: hda - Add support of auto-parser to cxt5047 / CX20551 Waikiki

Similarly like other Conexant codecs, now model=auto is supported for
cxt5047.

But the auto-parser mode isn't activated as default yet, since BIOS
pin-configs seem often broken on machines with this codec.  User need
to pass model=auto explicitly.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 655bd23..fc02751 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -1512,6 +1512,7 @@
 #ifdef CONFIG_SND_DEBUG
 	CXT5047_TEST,
 #endif
+	CXT5047_AUTO,
 	CXT5047_MODELS
 };
 
@@ -1522,6 +1523,7 @@
 #ifdef CONFIG_SND_DEBUG
 	[CXT5047_TEST]		= "test",
 #endif
+	[CXT5047_AUTO]		= "auto",
 };
 
 static const struct snd_pci_quirk cxt5047_cfg_tbl[] = {
@@ -1537,6 +1539,16 @@
 	struct conexant_spec *spec;
 	int board_config;
 
+	board_config = snd_hda_check_board_config(codec, CXT5047_MODELS,
+						  cxt5047_models,
+						  cxt5047_cfg_tbl);
+#if 0 /* not enabled as default, as BIOS often broken for this codec */
+	if (board_config < 0)
+		board_config = CXT5047_AUTO;
+#endif
+	if (board_config == CXT5047_AUTO)
+		return patch_conexant_auto(codec);
+
 	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
@@ -1560,9 +1572,6 @@
 
 	codec->patch_ops = conexant_patch_ops;
 
-	board_config = snd_hda_check_board_config(codec, CXT5047_MODELS,
-						  cxt5047_models,
-						  cxt5047_cfg_tbl);
 	switch (board_config) {
 	case CXT5047_LAPTOP:
 		spec->num_mixers = 2;
@@ -4062,6 +4071,12 @@
 		spec->num_adc_nids = ARRAY_SIZE(cxt5045_adc_nids);
 		spec->capsrc_nids = spec->adc_nids;
 		break;
+	case 0x14f15047:
+		codec->pin_amp_workaround = 1;
+		spec->adc_nids = cxt5047_adc_nids;
+		spec->num_adc_nids = ARRAY_SIZE(cxt5047_adc_nids);
+		spec->capsrc_nids = cxt5047_capsrc_nids;
+		break;
 	default:
 		spec->adc_nids = cx_auto_adc_nids;
 		spec->num_adc_nids = ARRAY_SIZE(cx_auto_adc_nids);