haswell/lynxpoint/broadwell: Use `azalia_codec_init()`

Use the functionally-equivalent common Azalia code to get rid of
redundant code.

Change-Id: I83cf1a3a1a3854c9283ccac5e254357a32638dda
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/59118
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/northbridge/intel/haswell/minihd.c b/src/northbridge/intel/haswell/minihd.c
index 6896464..558f41f 100644
--- a/src/northbridge/intel/haswell/minihd.c
+++ b/src/northbridge/intel/haswell/minihd.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 
 #include <console/console.h>
+#include <device/azalia_device.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -78,8 +79,8 @@
 	if (codec_mask) {
 		for (i = 3; i >= 0; i--) {
 			if (codec_mask & (1 << i))
-				hda_codec_init(base, i, sizeof(minihd_verb_table),
-					       minihd_verb_table);
+				azalia_codec_init(base, i, minihd_verb_table,
+						  sizeof(minihd_verb_table));
 		}
 	}
 }
diff --git a/src/soc/intel/broadwell/minihd.c b/src/soc/intel/broadwell/minihd.c
index a07d9b1..396c283 100644
--- a/src/soc/intel/broadwell/minihd.c
+++ b/src/soc/intel/broadwell/minihd.c
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 
 #include <console/console.h>
+#include <device/azalia_device.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
@@ -79,8 +80,8 @@
 	if (codec_mask) {
 		for (i = 3; i >= 0; i--) {
 			if (codec_mask & (1 << i))
-				hda_codec_init(base, i, sizeof(minihd_verb_table),
-					       minihd_verb_table);
+				azalia_codec_init(base, i, minihd_verb_table,
+						  sizeof(minihd_verb_table));
 		}
 	}
 
diff --git a/src/soc/intel/broadwell/pch/hda.c b/src/soc/intel/broadwell/pch/hda.c
index 2230614..5c5e08f 100644
--- a/src/soc/intel/broadwell/pch/hda.c
+++ b/src/soc/intel/broadwell/pch/hda.c
@@ -18,9 +18,7 @@
 	/* Can support up to 4 codecs */
 	for (i = 3; i >= 0; i--) {
 		if (codec_mask & (1 << i))
-			hda_codec_init(base, i,
-				       cim_verb_data_size,
-				       cim_verb_data);
+			azalia_codec_init(base, i, cim_verb_data, cim_verb_data_size);
 	}
 
 	if (pc_beep_verbs_size)
diff --git a/src/southbridge/intel/lynxpoint/azalia.c b/src/southbridge/intel/lynxpoint/azalia.c
index 8e138f1..9201caa 100644
--- a/src/southbridge/intel/lynxpoint/azalia.c
+++ b/src/southbridge/intel/lynxpoint/azalia.c
@@ -18,9 +18,7 @@
 	/* Can support up to 4 codecs */
 	for (i = 3; i >= 0; i--) {
 		if (codec_mask & (1 << i))
-			hda_codec_init(base, i,
-				       cim_verb_data_size,
-				       cim_verb_data);
+			azalia_codec_init(base, i, cim_verb_data, cim_verb_data_size);
 	}
 
 	if (pc_beep_verbs_size)
diff --git a/src/southbridge/intel/lynxpoint/hda_verb.c b/src/southbridge/intel/lynxpoint/hda_verb.c
index ba30f1d..809ab3b 100644
--- a/src/southbridge/intel/lynxpoint/hda_verb.c
+++ b/src/southbridge/intel/lynxpoint/hda_verb.c
@@ -46,95 +46,3 @@
 	printk(BIOS_DEBUG, "HDA: No codec!\n");
 	return 0;
 }
-
-/*
- * Wait 50usec for the codec to indicate it is ready.
- * No response would imply that the codec is non-operative.
- */
-static int hda_wait_for_ready(u8 *base)
-{
-	/* Use a 50 usec timeout - the Linux kernel uses the same duration */
-	int timeout = 50;
-
-	while (timeout--) {
-		u32 reg32 = read32(base + HDA_ICII_REG);
-		if (!(reg32 & HDA_ICII_BUSY))
-			return 0;
-		udelay(1);
-	}
-
-	return -1;
-}
-
-/*
- * Wait 50usec for the codec to indicate that it accepted the previous command.
- * No response would imply that the code is non-operative.
- */
-static int hda_wait_for_valid(u8 *base)
-{
-	u32 reg32;
-	/* Use a 50 usec timeout - the Linux kernel uses the same duration */
-	int timeout = 50;
-
-	/* Send the verb to the codec */
-	reg32 = read32(base + HDA_ICII_REG);
-	reg32 |= HDA_ICII_BUSY | HDA_ICII_VALID;
-	write32(base + HDA_ICII_REG, reg32);
-
-	while (timeout--) {
-		reg32 = read32(base + HDA_ICII_REG);
-		if ((reg32 & (HDA_ICII_VALID | HDA_ICII_BUSY)) == HDA_ICII_VALID)
-			return 0;
-		udelay(1);
-	}
-
-	return -1;
-}
-
-int hda_codec_init(u8 *base, int addr, int verb_size, const u32 *verb_data)
-{
-	const u32 *verb;
-	u32 reg32, size;
-	int rc;
-
-	printk(BIOS_DEBUG, "HDA: Initializing codec #%d\n", addr);
-
-	if (!verb_size || !verb_data) {
-		printk(BIOS_DEBUG, "HDA: No verb list!\n");
-		return -1;
-	}
-
-	/* 1 */
-	if (hda_wait_for_ready(base) < 0) {
-		printk(BIOS_DEBUG, "  codec not ready.\n");
-		return -1;
-	}
-
-	reg32 = (addr << 28) | 0x000f0000;
-	write32(base + HDA_IC_REG, reg32);
-
-	if (hda_wait_for_valid(base) < 0) {
-		printk(BIOS_DEBUG, "  codec not valid.\n");
-		return -1;
-	}
-
-	/* 2 */
-	reg32 = read32(base + HDA_IR_REG);
-	printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32);
-
-	size = azalia_find_verb(verb_data, verb_size, reg32, &verb);
-	if (!size) {
-		printk(BIOS_DEBUG, "HDA: No verb table entry found\n");
-		return -1;
-	}
-
-	/* 3 */
-	rc = azalia_program_verb_table(base, verb, size);
-
-	if (rc < 0)
-		printk(BIOS_DEBUG, "HDA: verb not loaded\n");
-	else
-		printk(BIOS_DEBUG, "HDA: verb loaded.\n");
-
-	return rc;
-}
diff --git a/src/southbridge/intel/lynxpoint/hda_verb.h b/src/southbridge/intel/lynxpoint/hda_verb.h
index 327811f..1d6ef39 100644
--- a/src/southbridge/intel/lynxpoint/hda_verb.h
+++ b/src/southbridge/intel/lynxpoint/hda_verb.h
@@ -6,6 +6,5 @@
 #include <stdint.h>
 
 int hda_codec_detect(u8 *base);
-int hda_codec_init(u8 *base, int addr, int verb_size, const u32 *verb_data);
 
 #endif