azalia: Shrink boilerplate

Change-Id: Ib3e09644c0ee71aacb067adaa85653d151b52078
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/6840
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
diff --git a/src/device/Makefile.inc b/src/device/Makefile.inc
index 0b87095..a7f3364 100644
--- a/src/device/Makefile.inc
+++ b/src/device/Makefile.inc
@@ -14,6 +14,10 @@
 ramstage-$(CONFIG_PCI) += pci_early.c
 ramstage-y += smbus_ops.c
 
+ifeq ($(CONFIG_AZALIA_PLUGIN_SUPPORT),y)
+ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/hda_verb.c
+endif
+
 romstage-y += device_romstage.c
 romstage-$(CONFIG_PCI) += pci_early.c
 
diff --git a/src/device/azalia_device.c b/src/device/azalia_device.c
index cbc878d9..b250f3d 100644
--- a/src/device/azalia_device.c
+++ b/src/device/azalia_device.c
@@ -110,9 +110,6 @@
 	return 0;
 }
 
-const u32 *cim_verb_data = NULL;
-u32 cim_verb_data_size = 0;
-
 static u32 find_verb(struct device *dev, u32 viddid, const u32 ** verb)
 {
 	printk(BIOS_DEBUG, "azalia_audio: dev=%s\n", dev_path(dev));
diff --git a/src/include/device/azalia_device.h b/src/include/device/azalia_device.h
index 4940cd2..0f477a3 100644
--- a/src/include/device/azalia_device.h
+++ b/src/include/device/azalia_device.h
@@ -20,15 +20,26 @@
 #ifndef DEVICE_AZALIA_H
 #define DEVICE_AZALIA_H
 
+#include <types.h>
+#include <string.h>
+#include <console/console.h>
+#include <arch/acpi.h>
+#include <arch/io.h>
+#include <arch/interrupt.h>
+#include <build.h>
+
 #include <device/device.h>
 
 void azalia_audio_init(struct device *dev);
 extern struct device_operations default_azalia_audio_ops;
 
-extern const u32 *cim_verb_data;
-extern u32 cim_verb_data_size;
-extern const u32 *pc_beep_verbs;
-extern u32 pc_beep_verbs_size;
+extern const u32 cim_verb_data[];
+extern const u32 cim_verb_data_size;
+extern const u32 pc_beep_verbs[];
+extern const u32 pc_beep_verbs_size;
+
+#define AZALIA_ARRAY_SIZES const u32 pc_beep_verbs_size = ARRAY_SIZE(pc_beep_verbs); \
+	const u32 cim_verb_data_size = sizeof(cim_verb_data)
 
 #define AZALIA_PIN_CFG(codec, pin, val)		    \
 	((codec) << 28) | ((pin) << 20) | ( 0x71c << 8) | ((val) & 0xff),	\
diff --git a/src/mainboard/apple/macbook21/hda_verb.h b/src/mainboard/apple/macbook21/hda_verb.c
similarity index 92%
rename from src/mainboard/apple/macbook21/hda_verb.h
rename to src/mainboard/apple/macbook21/hda_verb.c
index 07fa6bc..1fe188e 100644
--- a/src/mainboard/apple/macbook21/hda_verb.h
+++ b/src/mainboard/apple/macbook21/hda_verb.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x83847680,	/* Codec Vendor / Device ID: SigmaTel STAC9221 A1 */
 	0x106b2200,	/* Subsystem ID  */
@@ -58,3 +60,7 @@
 	AZALIA_PIN_CFG(0x0, 0x1B, 0x400000FB),
 
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/apple/macbook21/mainboard.c b/src/mainboard/apple/macbook21/mainboard.c
index 846914c..99527c1 100644
--- a/src/mainboard/apple/macbook21/mainboard.c
+++ b/src/mainboard/apple/macbook21/mainboard.c
@@ -34,8 +34,6 @@
 #include <arch/x86/include/arch/acpigen.h>
 #include <smbios.h>
 #include <drivers/intel/gma/int15.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 #define PANEL INT15_5F35_CL_DISPLAY_DEFAULT
 
 int get_cst_entries(acpi_cstate_t **entries)
@@ -51,8 +49,6 @@
 static void mainboard_enable(device_t dev)
 {
 	dev->ops->init = mainboard_init;
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/asus/m2n-e/hda_verb.h b/src/mainboard/asus/m2n-e/hda_verb.c
similarity index 96%
rename from src/mainboard/asus/m2n-e/hda_verb.h
rename to src/mainboard/asus/m2n-e/hda_verb.c
index 9dd3d88..2f8fe87 100644
--- a/src/mainboard/asus/m2n-e/hda_verb.h
+++ b/src/mainboard/asus/m2n-e/hda_verb.c
@@ -24,7 +24,9 @@
  * http://www.analog.com/static/imported-files/data_sheets/AD1988A_1988B.pdf
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x11d4198b,	/* Codec Vendor / Device ID: Analog Devices AD1988B */
 	0x104381f6,	/* Subsystem ID (0x1043 == ASUS) */
@@ -76,3 +78,4 @@
 	AZALIA_PIN_CFG(0x0, 0x25, 0x01012014),
 };
 
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/asus/m2n-e/mainboard.c b/src/mainboard/asus/m2n-e/mainboard.c
index 51a4419..2c18100 100644
--- a/src/mainboard/asus/m2n-e/mainboard.c
+++ b/src/mainboard/asus/m2n-e/mainboard.c
@@ -19,18 +19,10 @@
  */
 
 #include <device/device.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/dmp/vortex86ex/hda_verb.h b/src/mainboard/dmp/vortex86ex/hda_verb.c
similarity index 94%
rename from src/mainboard/dmp/vortex86ex/hda_verb.h
rename to src/mainboard/dmp/vortex86ex/hda_verb.c
index 5402b62..79ee44e 100644
--- a/src/mainboard/dmp/vortex86ex/hda_verb.h
+++ b/src/mainboard/dmp/vortex86ex/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0262,     // Codec Vendor / Device ID: Realtek ALC262
 	0x10714700,     // Subsystem ID
@@ -60,3 +62,7 @@
 	/* Pin widget 0x1F - S/PDIF-IN */
 	AZALIA_PIN_CFG(0x0, 0x1f, 0x411111f0),
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/dmp/vortex86ex/mainboard.c b/src/mainboard/dmp/vortex86ex/mainboard.c
index edf18c2..2761035 100644
--- a/src/mainboard/dmp/vortex86ex/mainboard.c
+++ b/src/mainboard/dmp/vortex86ex/mainboard.c
@@ -23,18 +23,10 @@
 #include <arch/io.h>
 #include <boot/tables.h>
 #include <device/pci_def.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/emulation/qemu-q35/hda_verb.c b/src/mainboard/emulation/qemu-q35/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/emulation/qemu-q35/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/getac/p470/hda_verb.h b/src/mainboard/getac/p470/hda_verb.c
similarity index 94%
rename from src/mainboard/getac/p470/hda_verb.h
rename to src/mainboard/getac/p470/hda_verb.c
index 280d6f2..2a75342 100644
--- a/src/mainboard/getac/p470/hda_verb.h
+++ b/src/mainboard/getac/p470/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0262,	// Codec Vendor / Device ID: Realtek ALC262
 	0x10714700,	// Subsystem ID
@@ -64,3 +66,7 @@
 	/* Pin Complex (NID 0x1F), S/PDIF-IN */
 	AZALIA_PIN_CFG(0x0, 0x1F, 0x411111F0),
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/getac/p470/mainboard.c b/src/mainboard/getac/p470/mainboard.c
index ac235d3b..5dcdb39 100644
--- a/src/mainboard/getac/p470/mainboard.c
+++ b/src/mainboard/getac/p470/mainboard.c
@@ -24,9 +24,7 @@
 #include <device/pci_def.h>
 #include <arch/io.h>
 #include <delay.h>
-#include <device/azalia_device.h>
 
-#include "hda_verb.h"
 
 #include "ec_oem.c"
 
@@ -78,11 +76,6 @@
 #endif
 }
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -95,7 +88,6 @@
 {
 	dev->ops->init = mainboard_init;
 	pcie_limit_power();
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/gigabyte/m57sli/mainboard.c b/src/mainboard/gigabyte/m57sli/mainboard.c
index 3fe4106..291d4f7 100644
--- a/src/mainboard/gigabyte/m57sli/mainboard.c
+++ b/src/mainboard/gigabyte/m57sli/mainboard.c
@@ -24,18 +24,10 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <device/pci_ops.h>
-// #include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	/* TODO: Add a correct hda_verb.h file for this board. */
-	// cim_verb_data = mainboard_cim_verb_data;
-	// cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/bolt/hda_verb.h b/src/mainboard/google/bolt/hda_verb.c
similarity index 94%
rename from src/mainboard/google/bolt/hda_verb.h
rename to src/mainboard/google/bolt/hda_verb.c
index 54f27f1..b81da6401 100644
--- a/src/mainboard/google/bolt/hda_verb.h
+++ b/src/mainboard/google/bolt/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0283,	// Codec Vendor / Device ID: Realtek ALC283
 	0x10ec0283,	// Subsystem ID
@@ -75,3 +77,7 @@
 	AZALIA_PIN_CFG(0x0, 0x21, 0x0321101f),
 
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/bolt/mainboard.c b/src/mainboard/google/bolt/mainboard.c
index 961f58d..0ccf90d 100644
--- a/src/mainboard/google/bolt/mainboard.c
+++ b/src/mainboard/google/bolt/mainboard.c
@@ -32,8 +32,6 @@
 #include <arch/io.h>
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 #include <southbridge/intel/lynxpoint/pch.h>
 #include "ec.h"
 #include "onboard.h"
@@ -44,13 +42,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -100,7 +92,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = mainboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/butterfly/hda_verb.h b/src/mainboard/google/butterfly/hda_verb.c
similarity index 97%
rename from src/mainboard/google/butterfly/hda_verb.h
rename to src/mainboard/google/butterfly/hda_verb.c
index e06a1be..97ff2f6 100644
--- a/src/mainboard/google/butterfly/hda_verb.h
+++ b/src/mainboard/google/butterfly/hda_verb.c
@@ -24,7 +24,9 @@
  */
 
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x111D76E5,	// Codec Vendor / Device ID: IDT 92HD99
 	0x103C18F9,	// Subsystem ID
@@ -223,9 +225,8 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/butterfly/mainboard.c b/src/mainboard/google/butterfly/mainboard.c
index 909ba8c..655fc2f 100644
--- a/src/mainboard/google/butterfly/mainboard.c
+++ b/src/mainboard/google/butterfly/mainboard.c
@@ -36,8 +36,6 @@
 #include <smbios.h>
 #include <device/pci.h>
 #include <ec/quanta/ene_kb3940q/ec.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 #if CONFIG_CHROMEOS
 #include <vendorcode/google/chromeos/fmap.h>
 #else
@@ -194,16 +192,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -294,7 +283,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = butterfly_onboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/falco/hda_verb.h b/src/mainboard/google/falco/hda_verb.c
similarity index 92%
rename from src/mainboard/google/falco/hda_verb.h
rename to src/mainboard/google/falco/hda_verb.c
index 5c37f51..5ea3c7b 100644
--- a/src/mainboard/google/falco/hda_verb.h
+++ b/src/mainboard/google/falco/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0283,	// Codec Vendor / Device ID: Realtek ALC283
 	0x10ec0283,	// Subsystem ID
@@ -87,7 +89,7 @@
 	0x0204081b,
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up everything (codec, dac, adc, mixers)  */
 	0x01470740,	/* enable speaker out */
 	0x01470c02,	/* set speaker EAPD pin */
@@ -96,5 +98,4 @@
 	0x00b37410,	/* unmute mixer nid 0xb beep input and set volume */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	sizeof(mainboard_pc_beep_verbs) / sizeof(mainboard_pc_beep_verbs[0]);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/falco/mainboard.c b/src/mainboard/google/falco/mainboard.c
index acb9750..0ccf90d 100644
--- a/src/mainboard/google/falco/mainboard.c
+++ b/src/mainboard/google/falco/mainboard.c
@@ -33,8 +33,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/lynxpoint/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 #include "ec.h"
 #include "onboard.h"
 
@@ -44,16 +42,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -103,7 +92,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = mainboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/link/hda_verb.h b/src/mainboard/google/link/hda_verb.c
similarity index 94%
rename from src/mainboard/google/link/hda_verb.h
rename to src/mainboard/google/link/hda_verb.c
index bb5ff10..87bcf30 100644
--- a/src/mainboard/google/link/hda_verb.h
+++ b/src/mainboard/google/link/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x11020011,	// Codec Vendor / Device ID: Creative CA0132
 	0x144dc0c2,	// Subsystem ID
@@ -126,7 +128,7 @@
 };
 
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,			/* power up codec */
 	0x00270500,			/* power up DAC */
 	0x00b70500,			/* power up speaker */
@@ -135,5 +137,4 @@
 	0x00b70c02,			/* set EAPD pin */
 	0x0143b013,			/* beep volume */
 };
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/link/mainboard.c b/src/mainboard/google/link/mainboard.c
index 9d86458..ed40f8f 100644
--- a/src/mainboard/google/link/mainboard.c
+++ b/src/mainboard/google/link/mainboard.c
@@ -39,8 +39,6 @@
 #include <smbios.h>
 #include <device/pci.h>
 #include <ec/google/chromeec/ec.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 /* placeholder for evenual link post. Not sure what we'll
  * do but it will look nice
@@ -149,15 +147,7 @@
 }
 #endif
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -222,7 +212,6 @@
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/panther/hda_verb.h b/src/mainboard/google/panther/hda_verb.c
similarity index 93%
rename from src/mainboard/google/panther/hda_verb.h
rename to src/mainboard/google/panther/hda_verb.c
index 47311e3..7de91d9 100644
--- a/src/mainboard/google/panther/hda_verb.h
+++ b/src/mainboard/google/panther/hda_verb.c
@@ -22,7 +22,9 @@
 
 #include <stdlib.h>
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0283,	// Codec Vendor / Device ID: Realtek ALC283
 	0x10ec0283,	// Subsystem ID
@@ -83,7 +85,7 @@
 	0x0204081b,
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up everything (codec, dac, adc, mixers)  */
 	0x01470740,	/* enable speaker out */
 	0x01470c02,	/* set speaker EAPD pin */
@@ -92,7 +94,6 @@
 	0x00b37410,	/* unmute mixer nid 0xb beep input and set volume */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
 
 #endif /* HDA_VERB_H */
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/panther/mainboard.c b/src/mainboard/google/panther/mainboard.c
index 60baf99..5058eca 100644
--- a/src/mainboard/google/panther/mainboard.c
+++ b/src/mainboard/google/panther/mainboard.c
@@ -32,9 +32,7 @@
 #include <device/pci_ops.h>
 #include <pc80/mc146818rtc.h>
 #include <southbridge/intel/lynxpoint/pch.h>
-#include <device/azalia_device.h>
 #include <drivers/intel/gma/int15.h>
-#include "hda_verb.h"
 #include "onboard.h"
 
 
@@ -44,16 +42,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -67,7 +56,6 @@
 {
 	dev->ops->init = mainboard_init;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/parrot/hda_verb.h b/src/mainboard/google/parrot/hda_verb.c
similarity index 95%
rename from src/mainboard/google/parrot/hda_verb.h
rename to src/mainboard/google/parrot/hda_verb.c
index dfa7a81..f79f69d 100644
--- a/src/mainboard/google/parrot/hda_verb.h
+++ b/src/mainboard/google/parrot/hda_verb.c
@@ -32,7 +32,9 @@
  *  HDMI PatherPoint
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0269,	// Codec Vendor / Device ID: Realtek ALC269
 	0x10250742,	// Subsystem ID
@@ -131,7 +133,7 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up everything (codec, dac, adc, mixers)  */
 	0x01470740,	/* enable speaker out */
 	0x01470c02,	/* set speaker EAPD pin */
@@ -140,5 +142,4 @@
 	0x00b37410,	/* unmute mixer nid 0xb beep input and set volume */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/parrot/mainboard.c b/src/mainboard/google/parrot/mainboard.c
index 440596f..547680e 100644
--- a/src/mainboard/google/parrot/mainboard.c
+++ b/src/mainboard/google/parrot/mainboard.c
@@ -36,8 +36,6 @@
 #include <smbios.h>
 #include <device/pci.h>
 #include <ec/compal/ene932/ec.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -48,16 +46,7 @@
 	outb(0xe1, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -101,7 +90,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = parrot_onboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/peppy/hda_verb.h b/src/mainboard/google/peppy/hda_verb.c
similarity index 93%
rename from src/mainboard/google/peppy/hda_verb.h
rename to src/mainboard/google/peppy/hda_verb.c
index 9203522..a88d9f8 100644
--- a/src/mainboard/google/peppy/hda_verb.h
+++ b/src/mainboard/google/peppy/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0283,	// Codec Vendor / Device ID: Realtek ALC283
 	0x10ec0283,	// Subsystem ID
@@ -91,7 +93,7 @@
 	0x0204081b,
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up everything (codec, dac, adc, mixers)  */
 	0x01470740,	/* enable speaker out */
 	0x01470c02,	/* set speaker EAPD pin */
@@ -100,5 +102,4 @@
 	0x00b37410,	/* unmute mixer nid 0xb beep input and set volume */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	sizeof(mainboard_pc_beep_verbs) / sizeof(mainboard_pc_beep_verbs[0]);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/peppy/mainboard.c b/src/mainboard/google/peppy/mainboard.c
index 3fbec40..0ccf90d 100644
--- a/src/mainboard/google/peppy/mainboard.c
+++ b/src/mainboard/google/peppy/mainboard.c
@@ -33,10 +33,8 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/lynxpoint/pch.h>
-#include <device/azalia_device.h>
 #include "ec.h"
 #include "onboard.h"
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -44,16 +42,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -103,7 +92,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = mainboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/samus/hda_verb.c b/src/mainboard/google/samus/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/google/samus/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/slippy/hda_verb.h b/src/mainboard/google/slippy/hda_verb.c
similarity index 92%
rename from src/mainboard/google/slippy/hda_verb.h
rename to src/mainboard/google/slippy/hda_verb.c
index b1f1cb6..68662c6 100644
--- a/src/mainboard/google/slippy/hda_verb.h
+++ b/src/mainboard/google/slippy/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0283,	// Codec Vendor / Device ID: Realtek ALC283
 	0x10ec0283,	// Subsystem ID
@@ -82,7 +84,7 @@
 	0x0204081b,
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up everything (codec, dac, adc, mixers)  */
 	0x01470740,	/* enable speaker out */
 	0x01470c02,	/* set speaker EAPD pin */
@@ -91,5 +93,4 @@
 	0x00b37410,	/* unmute mixer nid 0xb beep input and set volume */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	sizeof(mainboard_pc_beep_verbs) / sizeof(mainboard_pc_beep_verbs[0]);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/slippy/mainboard.c b/src/mainboard/google/slippy/mainboard.c
index 4ccb5f9..0ccf90d 100644
--- a/src/mainboard/google/slippy/mainboard.c
+++ b/src/mainboard/google/slippy/mainboard.c
@@ -35,8 +35,6 @@
 #include <southbridge/intel/lynxpoint/pch.h>
 #include "ec.h"
 #include "onboard.h"
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -44,16 +42,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -103,7 +92,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = mainboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/google/stout/hda_verb.h b/src/mainboard/google/stout/hda_verb.c
similarity index 93%
rename from src/mainboard/google/stout/hda_verb.h
rename to src/mainboard/google/stout/hda_verb.c
index 43dae91..3fcd4f5 100644
--- a/src/mainboard/google/stout/hda_verb.h
+++ b/src/mainboard/google/stout/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0269,	// Codec Vendor / Device ID: Realtek
 	0x17aa21fe,	// Subsystem ID
@@ -82,7 +84,7 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x58560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up everything (codec, dac, adc, mixers)  */
 	0x01470740,	/* enable speaker out */
 	0x01470c02,	/* set speaker EAPD pin */
@@ -90,5 +92,4 @@
 	0x00c37100,	/* unmute mixer nid 0xc input 1 */
 	0x00b37410,	/* unmute mixer nid 0xb beep input and set volume */
 };
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/google/stout/mainboard.c b/src/mainboard/google/stout/mainboard.c
index 7562b5f..9bcbfe4 100644
--- a/src/mainboard/google/stout/mainboard.c
+++ b/src/mainboard/google/stout/mainboard.c
@@ -36,8 +36,6 @@
 #include <smbios.h>
 #include <device/pci.h>
 #include <ec/quanta/it8518/ec.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -48,15 +46,7 @@
 	ec_write_cmd(EC_CMD_NOTIFY_ACPI_ENTER);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -84,7 +74,6 @@
 {
 	dev->ops->init = mainboard_init;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/ibase/mb899/hda_verb.c b/src/mainboard/ibase/mb899/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/ibase/mb899/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/ibase/mb899/mainboard.c b/src/mainboard/ibase/mb899/mainboard.c
index 6c80b42..a2a10a1 100644
--- a/src/mainboard/ibase/mb899/mainboard.c
+++ b/src/mainboard/ibase/mb899/mainboard.c
@@ -24,17 +24,9 @@
 #include <pc80/mc146818rtc.h>
 #include <arch/io.h>
 #include <arch/interrupt.h>
-#include <device/azalia_device.h>
 #include "superio_hwm.h"
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	// Default VERB is fine on this mainboard.
-	cim_verb_data = NULL;
-	cim_verb_data_size = 0;
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -42,7 +34,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 3);
-	verb_setup();
 	hwm_setup();
 }
 
diff --git a/src/mainboard/intel/baskingridge/hda_verb.h b/src/mainboard/intel/baskingridge/hda_verb.c
similarity index 94%
rename from src/mainboard/intel/baskingridge/hda_verb.h
rename to src/mainboard/intel/baskingridge/hda_verb.c
index 2796e92..96770de 100644
--- a/src/mainboard/intel/baskingridge/hda_verb.h
+++ b/src/mainboard/intel/baskingridge/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10134210,	// Codec Vendor / Device ID: Cirrus Logic CS4210
 	0x10134210,	// Subsystem ID
@@ -63,3 +65,7 @@
 	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/intel/baskingridge/mainboard.c b/src/mainboard/intel/baskingridge/mainboard.c
index b4982f8..a6839fc 100644
--- a/src/mainboard/intel/baskingridge/mainboard.c
+++ b/src/mainboard/intel/baskingridge/mainboard.c
@@ -32,8 +32,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/lynxpoint/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -41,13 +39,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -55,7 +47,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/intel/cougar_canyon2/hda_verb.h b/src/mainboard/intel/cougar_canyon2/hda_verb.c
similarity index 93%
rename from src/mainboard/intel/cougar_canyon2/hda_verb.h
rename to src/mainboard/intel/cougar_canyon2/hda_verb.c
index 381e338..c518b78 100644
--- a/src/mainboard/intel/cougar_canyon2/hda_verb.h
+++ b/src/mainboard/intel/cougar_canyon2/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x80862805,	// Codec Vendor / Device ID: Intel CougarPoint HDMI
 	0x80860101,	// Subsystem ID
@@ -35,3 +37,4 @@
 	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/intel/cougar_canyon2/mainboard.c b/src/mainboard/intel/cougar_canyon2/mainboard.c
index bb4806a..0ea03d3 100644
--- a/src/mainboard/intel/cougar_canyon2/mainboard.c
+++ b/src/mainboard/intel/cougar_canyon2/mainboard.c
@@ -32,8 +32,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/fsp_bd82x6x/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 #if IS_ENABLED(CONFIG_HAVE_ACPI_RESUME)
 void mainboard_suspend_resume(void)
@@ -43,13 +41,7 @@
 }
 #endif
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -57,7 +49,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/intel/d945gclf/hda_verb.c b/src/mainboard/intel/d945gclf/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/intel/d945gclf/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/intel/baskingridge/hda_verb.h b/src/mainboard/intel/emeraldlake2/hda_verb.c
similarity index 94%
copy from src/mainboard/intel/baskingridge/hda_verb.h
copy to src/mainboard/intel/emeraldlake2/hda_verb.c
index 2796e92..96770de 100644
--- a/src/mainboard/intel/baskingridge/hda_verb.h
+++ b/src/mainboard/intel/emeraldlake2/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10134210,	// Codec Vendor / Device ID: Cirrus Logic CS4210
 	0x10134210,	// Subsystem ID
@@ -63,3 +65,7 @@
 	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/intel/emeraldlake2/hda_verb.h b/src/mainboard/intel/emeraldlake2/hda_verb.h
deleted file mode 100644
index 2796e92..0000000
--- a/src/mainboard/intel/emeraldlake2/hda_verb.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-static const u32 mainboard_cim_verb_data[] = {
-	/* coreboot specific header */
-	0x10134210,	// Codec Vendor / Device ID: Cirrus Logic CS4210
-	0x10134210,	// Subsystem ID
-	0x00000007,	// Number of jacks
-
-	/* NID 0x01, HDA Codec Subsystem ID Verb Table: 0x10134210 */
-	AZALIA_SUBVENDOR(0x0, 0x10134210),
-
-	/* Pin Widget Verb Table */
-
-	/* Pin Complex (NID 0x05)     1/8   Gray  HP Out at Ext Front */
-	AZALIA_PIN_CFG(0x0, 0x05, 0x022120f0),
-
-	/* Pin Complex (NID 0x06)  Analog Unknown  Speaker at Int N/A */
-	AZALIA_PIN_CFG(0x0, 0x06, 0x90170010),
-
-	/* Pin Complex (NID 0x07)     1/8    Grey  Line In at Ext Front */
-	AZALIA_PIN_CFG(0x0, 0x07, 0x02a120f0),
-
-	/* Pin Complex (NID 0x08)  Analog Unknown  Mic at Oth Mobile-In */
-	AZALIA_PIN_CFG(0x0, 0x08, 0x77a70037),
-
-	/* Pin Complex (NID 0x09) Digital Unknown  Mic at Oth Mobile-In */
-	AZALIA_PIN_CFG(0x0, 0x09, 0x77a6003e),
-
-	/* Pin Complex (NID 0x0a) Optical   Black  SPDIF Out at Ext N/A */
-	AZALIA_PIN_CFG(0x0, 0x0a, 0x434510f0),
-
-	/* coreboot specific header */
-	0x80862805,	// Codec Vendor / Device ID: Intel CougarPoint HDMI
-	0x80860101,	// Subsystem ID
-	0x00000004,	// Number of jacks
-
-	/* NID 0x01, HDA Codec Subsystem ID Verb Table: 0x80860101 */
-	AZALIA_SUBVENDOR(0x0, 0x80860101),
-
-	/* Pin Complex (NID 0x05) Digital Out at Int HDMI */
-	AZALIA_PIN_CFG(0x3, 0x05, 0x18560010),
-
-	/* Pin Complex (NID 0x06) Digital Out at Int HDMI */
-	AZALIA_PIN_CFG(0x3, 0x06, 0x18560020),
-
-	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
-	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
-};
diff --git a/src/mainboard/intel/emeraldlake2/mainboard.c b/src/mainboard/intel/emeraldlake2/mainboard.c
index 3dc8594..347ce8a 100644
--- a/src/mainboard/intel/emeraldlake2/mainboard.c
+++ b/src/mainboard/intel/emeraldlake2/mainboard.c
@@ -32,8 +32,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/bd82x6x/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -41,13 +39,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -55,7 +47,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/intel/wtm2/hda_verb.h b/src/mainboard/intel/wtm2/hda_verb.c
similarity index 94%
rename from src/mainboard/intel/wtm2/hda_verb.h
rename to src/mainboard/intel/wtm2/hda_verb.c
index 4875035..c18e79b 100644
--- a/src/mainboard/intel/wtm2/hda_verb.h
+++ b/src/mainboard/intel/wtm2/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10134210,	// Codec Vendor / Device ID: Cirrus Logic CS4210
 	0x10134210,	// Subsystem ID
@@ -63,3 +65,7 @@
 	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/intel/wtm2/mainboard.c b/src/mainboard/intel/wtm2/mainboard.c
index b4982f8..a6839fc 100644
--- a/src/mainboard/intel/wtm2/mainboard.c
+++ b/src/mainboard/intel/wtm2/mainboard.c
@@ -32,8 +32,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/lynxpoint/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -41,13 +39,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -55,7 +47,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/iwave/iWRainbowG6/hda_verb.h b/src/mainboard/iwave/iWRainbowG6/hda_verb.c
similarity index 98%
rename from src/mainboard/iwave/iWRainbowG6/hda_verb.h
rename to src/mainboard/iwave/iWRainbowG6/hda_verb.c
index 6799c12..4cb2c9f 100644
--- a/src/mainboard/iwave/iWRainbowG6/hda_verb.h
+++ b/src/mainboard/iwave/iWRainbowG6/hda_verb.c
@@ -89,3 +89,4 @@
 	/* BTL Gain */
 	0x017F417, /* Gain = 16.79dB */
 };
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/iwave/iWRainbowG6/mainboard.c b/src/mainboard/iwave/iWRainbowG6/mainboard.c
index 0b84f68..dfc6636 100644
--- a/src/mainboard/iwave/iWRainbowG6/mainboard.c
+++ b/src/mainboard/iwave/iWRainbowG6/mainboard.c
@@ -20,18 +20,10 @@
 
 #include <device/device.h>
 #include <console/console.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/kontron/986lcd-m/hda_verb.c b/src/mainboard/kontron/986lcd-m/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/kontron/986lcd-m/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/kontron/986lcd-m/mainboard.c b/src/mainboard/kontron/986lcd-m/mainboard.c
index 10bba69af..afca7960 100644
--- a/src/mainboard/kontron/986lcd-m/mainboard.c
+++ b/src/mainboard/kontron/986lcd-m/mainboard.c
@@ -24,7 +24,6 @@
 #include <pc80/mc146818rtc.h>
 #include <arch/io.h>
 #include <arch/interrupt.h>
-#include <device/azalia_device.h>
 
 /* Hardware Monitor */
 
@@ -160,14 +159,7 @@
 	hwm_write(0x40, 0x01); // Init, but no SMI#
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	// Default VERB is fine on this mainboard.
-	cim_verb_data = NULL;
-	cim_verb_data_size = 0;
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -175,7 +167,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 3);
-	verb_setup();
 	hwm_setup();
 }
 
diff --git a/src/mainboard/kontron/ktqm77/hda_verb.h b/src/mainboard/kontron/ktqm77/hda_verb.c
similarity index 95%
rename from src/mainboard/kontron/ktqm77/hda_verb.h
rename to src/mainboard/kontron/ktqm77/hda_verb.c
index ccec18c..c957c25 100644
--- a/src/mainboard/kontron/ktqm77/hda_verb.h
+++ b/src/mainboard/kontron/ktqm77/hda_verb.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x11060397,	// Codec Vendor / Device ID: Via VT1708S
 	0x11060000,	// Subsystem ID
@@ -113,3 +115,7 @@
 	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/kontron/ktqm77/mainboard.c b/src/mainboard/kontron/ktqm77/mainboard.c
index c09082a..715ec56 100644
--- a/src/mainboard/kontron/ktqm77/mainboard.c
+++ b/src/mainboard/kontron/ktqm77/mainboard.c
@@ -34,8 +34,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/bd82x6x/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -169,13 +167,7 @@
 }
 #endif
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -186,7 +178,6 @@
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
-	verb_setup();
 
 	unsigned disable = 0;
 	if ((get_option(&disable, "ethernet1") == CB_SUCCESS) && disable) {
diff --git a/src/mainboard/lenovo/t520/hda_verb.h b/src/mainboard/lenovo/t520/hda_verb.c
similarity index 97%
rename from src/mainboard/lenovo/t520/hda_verb.h
rename to src/mainboard/lenovo/t520/hda_verb.c
index 19eac1b..dd776fc 100644
--- a/src/mainboard/lenovo/t520/hda_verb.h
+++ b/src/mainboard/lenovo/t520/hda_verb.c
@@ -25,7 +25,9 @@
  */
 
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x14f1506e,	// Codec Vendor / Device ID: Conexant CX20590 - Schematic shows CX20672
 	0x17aa21cf,	// Subsystem ID
@@ -181,9 +183,8 @@
 		0x00170500, /* Set power state to D0 */
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/t520/mainboard.c b/src/mainboard/lenovo/t520/mainboard.c
index afa0ecf..387bbe0 100644
--- a/src/mainboard/lenovo/t520/mainboard.c
+++ b/src/mainboard/lenovo/t520/mainboard.c
@@ -37,8 +37,6 @@
 #include <cbfs.h>
 #include <pc80/keyboard.h>
 #include <ec/lenovo/h8/h8.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -46,16 +44,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -80,7 +69,6 @@
 {
 	dev->ops->init = mainboard_init;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 void h8_mainboard_init_dock (void)
diff --git a/src/mainboard/lenovo/t530/hda_verb.h b/src/mainboard/lenovo/t530/hda_verb.c
similarity index 97%
rename from src/mainboard/lenovo/t530/hda_verb.h
rename to src/mainboard/lenovo/t530/hda_verb.c
index f04eae7..29f8a45 100644
--- a/src/mainboard/lenovo/t530/hda_verb.h
+++ b/src/mainboard/lenovo/t530/hda_verb.c
@@ -25,7 +25,9 @@
  */
 
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
   	0x10ec0269,	// Codec Vendor / Device ID: Realtek ALC269VC
   	0x17aa21fa,	// Subsystem ID
@@ -243,9 +245,8 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/t530/mainboard.c b/src/mainboard/lenovo/t530/mainboard.c
index e21dc98..f8c9dae 100644
--- a/src/mainboard/lenovo/t530/mainboard.c
+++ b/src/mainboard/lenovo/t530/mainboard.c
@@ -37,8 +37,6 @@
 #include <cbfs.h>
 #include <pc80/keyboard.h>
 #include <ec/lenovo/h8/h8.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -46,16 +44,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -85,7 +74,6 @@
 	dev->ops->init = mainboard_init;
 
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 void h8_mainboard_init_dock (void)
diff --git a/src/mainboard/lenovo/t60/hda_verb.c b/src/mainboard/lenovo/t60/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/lenovo/t60/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/x200/hda_verb.h b/src/mainboard/lenovo/x200/hda_verb.c
similarity index 93%
rename from src/mainboard/lenovo/x200/hda_verb.h
rename to src/mainboard/lenovo/x200/hda_verb.c
index 3d92258..c1cd542 100644
--- a/src/mainboard/lenovo/x200/hda_verb.h
+++ b/src/mainboard/lenovo/x200/hda_verb.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x14f15051,	// Conexant CX20561 (Hermosa)
 	0x17aa20ff,	// Subsystem ID
@@ -36,7 +38,7 @@
 	AZALIA_PIN_CFG(0, 0x1d, 0x90a601f0)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up codec */
 	0x01470500,	/* power up speakers */
 	0x01470100,	/* select lout1 (input 0x0) for speakers */
@@ -46,3 +48,4 @@
 	0x00c3b015,	/* set lout1 output volume -15dB */
 	0x0143b000,	/* unmute speakers */
 };
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/x200/mainboard.c b/src/mainboard/lenovo/x200/mainboard.c
index 6c13eed..37bd152 100644
--- a/src/mainboard/lenovo/x200/mainboard.c
+++ b/src/mainboard/lenovo/x200/mainboard.c
@@ -32,23 +32,13 @@
 #include <ec/lenovo/pmh7/pmh7.h>
 #include <ec/acpi/ec.h>
 #include <ec/lenovo/h8/h8.h>
-#include <device/azalia_device.h>
 
-#include "hda_verb.h"
 
 #if CONFIG_GENERATE_ACPI_TABLES
 #include "cstates.c" /* Include it, as the linker won't find
 			the overloaded weak function in there. */
 #endif
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = ARRAY_SIZE(mainboard_pc_beep_verbs);
-}
-
 const char *smbios_mainboard_bios_version(void)
 {
 	/* Satisfy thinkpad_acpi.  */
@@ -68,7 +58,6 @@
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 2);
 
 	dev->ops->init = mainboard_init;
diff --git a/src/mainboard/lenovo/x201/hda_verb.h b/src/mainboard/lenovo/x201/hda_verb.c
similarity index 94%
rename from src/mainboard/lenovo/x201/hda_verb.h
rename to src/mainboard/lenovo/x201/hda_verb.c
index 1706929..22634f0 100644
--- a/src/mainboard/lenovo/x201/hda_verb.h
+++ b/src/mainboard/lenovo/x201/hda_verb.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x14F15069,	/* Codec Vendor / Device ID: Conexant CX20585 */
 	0x17AA2155,	/* Subsystem ID  */
@@ -73,3 +75,7 @@
 	/* NID 0x06.  */
 	AZALIA_PIN_CFG(0x3, 0x06, 0x58560030),
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/x201/mainboard.c b/src/mainboard/lenovo/x201/mainboard.c
index fb8c1d5..57ef86d 100644
--- a/src/mainboard/lenovo/x201/mainboard.c
+++ b/src/mainboard/lenovo/x201/mainboard.c
@@ -35,11 +35,9 @@
 #include <ec/lenovo/h8/h8.h>
 #include <northbridge/intel/nehalem/nehalem.h>
 #include <southbridge/intel/bd82x6x/pch.h>
-#include <device/azalia_device.h>
 
 #include <pc80/mc146818rtc.h>
 #include "dock.h"
-#include "hda_verb.h"
 #include <arch/x86/include/arch/acpigen.h>
 #include <drivers/intel/gma/int15.h>
 #include <arch/interrupt.h>
@@ -71,13 +69,7 @@
 		return "CBET4000 " COREBOOT_VERSION;
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -155,7 +147,6 @@
 
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_LFP, 2);
 
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/lenovo/x220/hda_verb.h b/src/mainboard/lenovo/x220/hda_verb.c
similarity index 97%
rename from src/mainboard/lenovo/x220/hda_verb.h
rename to src/mainboard/lenovo/x220/hda_verb.c
index ce980fc..c3d1372 100644
--- a/src/mainboard/lenovo/x220/hda_verb.h
+++ b/src/mainboard/lenovo/x220/hda_verb.c
@@ -25,7 +25,9 @@
  */
 
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
   	0x14f1506e,	// Codec Vendor / Device ID: Conexant CX20590
   	0x17aa21db,	// Subsystem ID
@@ -205,9 +207,8 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/x220/mainboard.c b/src/mainboard/lenovo/x220/mainboard.c
index ffc99bd..87fedfe 100644
--- a/src/mainboard/lenovo/x220/mainboard.c
+++ b/src/mainboard/lenovo/x220/mainboard.c
@@ -38,8 +38,6 @@
 #include <pc80/keyboard.h>
 #include <ec/lenovo/h8/h8.h>
 #include <build.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -56,16 +54,7 @@
 		return "CBET4000 " COREBOOT_VERSION;
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -95,7 +84,6 @@
 	dev->ops->init = mainboard_init;
 
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 void h8_mainboard_init_dock (void)
diff --git a/src/mainboard/lenovo/t530/hda_verb.h b/src/mainboard/lenovo/x230/hda_verb.c
similarity index 97%
copy from src/mainboard/lenovo/t530/hda_verb.h
copy to src/mainboard/lenovo/x230/hda_verb.c
index f04eae7..29f8a45 100644
--- a/src/mainboard/lenovo/t530/hda_verb.h
+++ b/src/mainboard/lenovo/x230/hda_verb.c
@@ -25,7 +25,9 @@
  */
 
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
   	0x10ec0269,	// Codec Vendor / Device ID: Realtek ALC269VC
   	0x17aa21fa,	// Subsystem ID
@@ -243,9 +245,8 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
 };
 
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/lenovo/x230/hda_verb.h b/src/mainboard/lenovo/x230/hda_verb.h
deleted file mode 100644
index f04eae7..0000000
--- a/src/mainboard/lenovo/x230/hda_verb.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
- * Copyright (C) 2014 Vladimir Serbinenko
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/*	Vendor Name    : IDT
- *	Vendor ID      : 0x10ec0269
- *	Subsystem ID   : 0x17aa21fa
- *	Revision ID    : 0x100303
- */
-
-
-static const u32 mainboard_cim_verb_data[] = {
-	/* coreboot specific header */
-  	0x10ec0269,	// Codec Vendor / Device ID: Realtek ALC269VC
-  	0x17aa21fa,	// Subsystem ID
-	0x0000007d,	// Number of 4 dword sets
-
-/* Bits 31:28 - Codec Address */
-/* Bits 27:20 - NID */
-/* Bits 19:8 - Verb ID */
-/* Bits 7:0  - Payload */
-
-/* NID 0x01 - NodeInfo */
-	AZALIA_SUBVENDOR(0x0, 0x17AA21FA),
-
-/* NID 0x0A - External Microphone Connector
- * Config=0x04A11020 (External,Right; MicIn,3.5mm; Black,JD; DA,Seq)
- */
-	AZALIA_PIN_CFG(0x0, 0x0A, 0x04A11020),
-
-/* NID 0x0B - Headphone Connector
- * Config=0x0421101F (External,Right; HP,3.5mm; Black,JD; DA,Seq)
- */
-	AZALIA_PIN_CFG(0x0, 0x0B, 0x0421101F),
-
-/* NID 0x0C - Not connected
- * Config=0x40F000F0 (N/A,N/A; Other,Unknown; Unknown,JD; DA,Seq)
- */
-	AZALIA_PIN_CFG(0x0, 0x0C, 0x40F000F0),
-
-/* NID 0x0D - Internal Speakers
- * Config=0x90170110 (Fixed,Int; Speaker,Other Analog; Unknown,nJD; DA,Seq)
- */
-	AZALIA_PIN_CFG(0x0, 0x0D, 0x90170110),
-
-/* NID 0x0F - Not connected
- * Config=0x40F000F0
- */
-	AZALIA_PIN_CFG(0x0, 0x0F, 0x40F000F0),
-
-/* NID 0x11 - Internal Microphone
- * Config=0xD5A30140 (Fixed internal,Top; Mic In,ATIPI; Unknown,nJD; DA,Seq)
- */
-	AZALIA_PIN_CFG(0x0, 0x11, 0xD5A30140),
-	AZALIA_PIN_CFG(0x0, 0x12, 0x90A60140),
-	AZALIA_PIN_CFG(0x0, 0x14, 0x90170110),
-	AZALIA_PIN_CFG(0x0, 0x15, 0x03211020),
-	AZALIA_PIN_CFG(0x0, 0x18, 0x03A11830),
-	AZALIA_PIN_CFG(0x0, 0x19, 0x411111F0),
-
-	0x01970804,
-	0x01870803,
-	0x01470740,
-	0x00970600,
-
-	0x00370600,
-	0x00270600,
-	0x00270600,
-	0x00270600,
-
-	AZALIA_PIN_CFG(0x0, 0x1A, 0x411111F0),
-	AZALIA_PIN_CFG(0x0, 0x1D, 0x40138205),
-	AZALIA_PIN_CFG(0x0, 0x1E, 0x411111F0),
-
-	/*
-	 * Hardware EQ Parameters
-	 * Sample Rate 88200
-	 */
-	0x0227A63F,	0x0227A73E,	0x0227A8EB,	0x0227A93F,
-	0x0227AA3E,	0x0227ABEB,	0x0227AC00,	0x0227AD80,
-	0x0227A681,	0x0227A782,	0x0227A829,	0x0227A981,
-	0x0227AA82,	0x0227AB29,	0x0227AC01,	0x0227AD80,
-	0x0227A63F,	0x0227A73E,	0x0227A8EB,	0x0227A93F,
-	0x0227AA3E,	0x0227ABEB,	0x0227AC02,	0x0227AD80,
-	0x0227A67E,	0x0227A77B,	0x0227A846,	0x0227A97E,
-	0x0227AA7B,	0x0227AB46,	0x0227AC03,	0x0227AD80,
-	0x0227A6C1,	0x0227A77F,	0x0227A898,	0x0227A9C1,
-	0x0227AA7F,	0x0227AB98,	0x0227AC04,	0x0227AD80,
-	0x0227A63E,	0x0227A7D1,	0x0227A84F,	0x0227A93E,
-	0x0227AAD1,	0x0227AB4F,	0x0227AC05,	0x0227AD80,
-	0x0227A683,	0x0227A7BE,	0x0227A855,	0x0227A983,
-	0x0227AABE,	0x0227AB55,	0x0227AC06,	0x0227AD80,
-	0x0227A63D,	0x0227A7B9,	0x0227A856,	0x0227A93D,
-	0x0227AAB9,	0x0227AB56,	0x0227AC07,	0x0227AD80,
-	0x0227A67C,	0x0227A741,	0x0227A8AB,	0x0227A97C,
-	0x0227AA41,	0x0227ABAB,	0x0227AC08,	0x0227AD80,
-	0x0227A6C3,	0x0227A775,	0x0227A85A,	0x0227A9C3,
-	0x0227AA75,	0x0227AB5A,	0x0227AC09,	0x0227AD80,
-	0x0227A63F,	0x0227A79E,	0x0227A829,	0x0227A93F,
-	0x0227AA9E,	0x0227AB29,	0x0227AC0A,	0x0227AD80,
-	0x0227A682,	0x0227A7E3,	0x0227A867,	0x0227A982,
-	0x0227AAE3,	0x0227AB67,	0x0227AC0B,	0x0227AD80,
-	0x0227A63E,	0x0227A74F,	0x0227A89D,	0x0227A93E,
-	0x0227AA4F,	0x0227AB9D,	0x0227AC0C,	0x0227AD80,
-	0x0227A67D,	0x0227A71C,	0x0227A899,	0x0227A97D,
-	0x0227AA1C,	0x0227AB99,	0x0227AC0D,	0x0227AD80,
-	0x0227A6C2,	0x0227A712,	0x0227A839,	0x0227A9C2,
-	0x0227AA12,	0x0227AB39,	0x0227AC0E,	0x0227AD80,
-	0x0227A63F,	0x0227A708,	0x0227A856,	0x0227A93F,
-	0x0227AA08,	0x0227AB56,	0x0227AC0F,	0x0227AD80,
-	0x0227A68E,	0x0227A7ED,	0x0227A89D,	0x0227A98E,
-	0x0227AAED,	0x0227AB9D,	0x0227AC10,	0x0227AD80,
-	0x0227A637,	0x0227A78F,	0x0227A853,	0x0227A937,
-	0x0227AA8F,	0x0227AB53,	0x0227AC11,	0x0227AD80,
-	0x0227A671,	0x0227A712,	0x0227A863,	0x0227A971,
-	0x0227AA12,	0x0227AB63,	0x0227AC12,	0x0227AD80,
-	0x0227A6C9,	0x0227A768,	0x0227A856,	0x0227A9C9,
-	0x0227AA68,	0x0227AB56,	0x0227AC13,	0x0227AD80,
-	0x0227A642,	0x0227A709,	0x0227A838,	0x0227A942,
-	0x0227AA09,	0x0227AB38,	0x0227AC14,	0x0227AD80,
-	0x0227A69C,	0x0227A78A,	0x0227A867,	0x0227A99C,
-	0x0227AA8A,	0x0227AB67,	0x0227AC15,	0x0227AD80,
-	0x0227A634,	0x0227A717,	0x0227A8E3,	0x0227A934,
-	0x0227AA17,	0x0227ABE3,	0x0227AC16,	0x0227AD80,
-	0x0227A663,	0x0227A775,	0x0227A899,	0x0227A963,
-	0x0227AA75,	0x0227AB99,	0x0227AC17,	0x0227AD80,
-	0x0227A6C9,	0x0227A7DE,	0x0227A8E5,	0x0227A9C9,
-	0x0227AADE,	0x0227ABE5,	0x0227AC18,	0x0227AD80,
-	0x0227A640,	0x0227A700,	0x0227A800,	0x0227A940,
-	0x0227AA00,	0x0227AB00,	0x0227AC19,	0x0227AD80,
-
-	/*
-	 * Hardware EQ Parameters
-	 * Sample Rate 96000
-	 */
-	0x0227A63F,	0x0227A74E,	0x0227A888,	0x0227A93F,
-	0x0227AA4E,	0x0227AB88,	0x0227AC1A,	0x0227AD80,
-	0x0227A681,	0x0227A762,	0x0227A8EE,	0x0227A981,
-	0x0227AA62,	0x0227ABEE,	0x0227AC1B,	0x0227AD80,
-	0x0227A63F,	0x0227A74E,	0x0227A888,	0x0227A93F,
-	0x0227AA4E,	0x0227AB88,	0x0227AC1C,	0x0227AD80,
-	0x0227A67E,	0x0227A79A,	0x0227A8E7,	0x0227A97E,
-	0x0227AA9A,	0x0227ABE7,	0x0227AC1D,	0x0227AD80,
-	0x0227A6C1,	0x0227A760,	0x0227A8C3,	0x0227A9C1,
-	0x0227AA60,	0x0227ABC3,	0x0227AC1E,	0x0227AD80,
-	0x0227A63E,	0x0227A7E9,	0x0227A84B,	0x0227A93E,
-	0x0227AAE9,	0x0227AB4B,	0x0227AC1F,	0x0227AD80,
-	0x0227A683,	0x0227A76C,	0x0227A8F2,	0x0227A983,
-	0x0227AA6C,	0x0227ABF2,	0x0227AC20,	0x0227AD80,
-	0x0227A63D,	0x0227A7E7,	0x0227A880,	0x0227A93D,
-	0x0227AAE7,	0x0227AB80,	0x0227AC21,	0x0227AD80,
-	0x0227A67C,	0x0227A793,	0x0227A80E,	0x0227A97C,
-	0x0227AA93,	0x0227AB0E,	0x0227AC22,	0x0227AD80,
-	0x0227A6C3,	0x0227A72F,	0x0227A835,	0x0227A9C3,
-	0x0227AA2F,	0x0227AB35,	0x0227AC23,	0x0227AD80,
-	0x0227A63F,	0x0227A7A5,	0x0227A8FE,	0x0227A93F,
-	0x0227AAA5,	0x0227ABFE,	0x0227AC24,	0x0227AD80,
-	0x0227A682,	0x0227A798,	0x0227A89D,	0x0227A982,
-	0x0227AA98,	0x0227AB9D,	0x0227AC25,	0x0227AD80,
-	0x0227A63E,	0x0227A772,	0x0227A839,	0x0227A93E,
-	0x0227AA72,	0x0227AB39,	0x0227AC26,	0x0227AD80,
-	0x0227A67D,	0x0227A767,	0x0227A863,	0x0227A97D,
-	0x0227AA67,	0x0227AB63,	0x0227AC27,	0x0227AD80,
-	0x0227A6C1,	0x0227A7E7,	0x0227A8C8,	0x0227A9C1,
-	0x0227AAE7,	0x0227ABC8,	0x0227AC28,	0x0227AD80,
-	0x0227A63F,	0x0227A71B,	0x0227A81A,	0x0227A93F,
-	0x0227AA1B,	0x0227AB1A,	0x0227AC29,	0x0227AD80,
-	0x0227A68D,	0x0227A763,	0x0227A872,	0x0227A98D,
-	0x0227AA63,	0x0227AB72,	0x0227AC2A,	0x0227AD80,
-	0x0227A638,	0x0227A733,	0x0227A809,	0x0227A938,
-	0x0227AA33,	0x0227AB09,	0x0227AC2B,	0x0227AD80,
-	0x0227A672,	0x0227A79C,	0x0227A88E,	0x0227A972,
-	0x0227AA9C,	0x0227AB8E,	0x0227AC2C,	0x0227AD80,
-	0x0227A6C8,	0x0227A7B1,	0x0227A8DD,	0x0227A9C8,
-	0x0227AAB1,	0x0227ABDD,	0x0227AC2D,	0x0227AD80,
-	0x0227A641,	0x0227A7E1,	0x0227A8D8,	0x0227A941,
-	0x0227AAE1,	0x0227ABD8,	0x0227AC2E,	0x0227AD80,
-	0x0227A699,	0x0227A70D,	0x0227A820,	0x0227A999,
-	0x0227AA0D,	0x0227AB20,	0x0227AC2F,	0x0227AD80,
-	0x0227A634,	0x0227A7FE,	0x0227A823,	0x0227A934,
-	0x0227AAFE,	0x0227AB23,	0x0227AC30,	0x0227AD80,
-	0x0227A666,	0x0227A7F2,	0x0227A8E0,	0x0227A966,
-	0x0227AAF2,	0x0227ABE0,	0x0227AC31,	0x0227AD80,
-	0x0227A6C9,	0x0227A720,	0x0227A804,	0x0227A9C9,
-	0x0227AA20,	0x0227AB04,	0x0227AC32,	0x0227AD80,
-	0x0227A640,	0x0227A700,	0x0227A800,	0x0227A940,
-	0x0227AA00,	0x0227AB00,	0x0227AC33,	0x0227AD80,
-
-	/* SAFEDSP Parameters */
-	0x022782C1,	0x02277127,	0x02277227,	0x02278801,
-	0x02278C58,	0x02278E90,	0x0227890A,	0x02278A14,
-	0x02278B0F,	0x0017B008,
-
-	/* Misc entries */
-		0x00B707C0, /* Enable PortB as Output with HP amp */
-		0x00D70740, /* Enable PortD as Output */
-		0x0017A200, /* Disable ClkEn of PortSenseTst */
-		0x0017C621, /* Slave Port - Port A used as microphone input for
-		                            combo Jack
-		               Master Port - Port B used for Jack Presence Detect
-		               Enable Combo Jack Detection */
-		0x0017A208, /* Enable ClkEn of PortSenseTst */
-		0x00170500, /* Set power state to D0 */
-
-	/* --- Next Codec --- */
-
-/*	Vendor Name    : Intel
- *	Vendor ID      : 0x80862806
- *	Subsystem ID   : 0x80860101
- *	Revision ID    : 0x100000
- */
-	/* coreboot specific header */
-	0x80862806,	// Codec Vendor / Device ID: Intel PantherPoint HDMI
-	0x80860101,	// Subsystem ID
-	0x00000004,	// Number of IDs
-
-	/* NID 0x01, HDA Codec Subsystem ID Verb Table: 0x80860101 */
-	AZALIA_SUBVENDOR(0x3, 0x80860101),
-
-	/* Pin Complex (NID 0x05) Digital Out at Int HDMI */
-	AZALIA_PIN_CFG(0x3, 0x05, 0x18560010),
-
-	/* Pin Complex (NID 0x06) Digital Out at Int HDMI */
-	AZALIA_PIN_CFG(0x3, 0x06, 0x18560020),
-
-	/* Pin Complex (NID 0x07) Digital Out at Int HDMI */
-	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
-};
-
-static const u32 mainboard_pc_beep_verbs[] = {
-	0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
-};
-
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
diff --git a/src/mainboard/lenovo/x230/mainboard.c b/src/mainboard/lenovo/x230/mainboard.c
index 5da7480..7d9c456 100644
--- a/src/mainboard/lenovo/x230/mainboard.c
+++ b/src/mainboard/lenovo/x230/mainboard.c
@@ -38,8 +38,6 @@
 #include <pc80/keyboard.h>
 #include <ec/lenovo/h8/h8.h>
 #include <build.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -56,16 +54,7 @@
 		return "CBET4000 " COREBOOT_VERSION;
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -95,7 +84,6 @@
 	dev->ops->init = mainboard_init;
 
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 void h8_mainboard_init_dock (void)
diff --git a/src/mainboard/lenovo/x60/hda_verb.c b/src/mainboard/lenovo/x60/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/lenovo/x60/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/msi/ms7260/mainboard.c b/src/mainboard/msi/ms7260/mainboard.c
index 226925f..492693a 100644
--- a/src/mainboard/msi/ms7260/mainboard.c
+++ b/src/mainboard/msi/ms7260/mainboard.c
@@ -19,20 +19,12 @@
  */
 
 #include <device/device.h>
-#include <device/azalia_device.h>
 
 #if 0
-#include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 #endif
 
diff --git a/src/mainboard/msi/ms9282/mainboard.c b/src/mainboard/msi/ms9282/mainboard.c
index 5d80b8a..c7e459a 100644
--- a/src/mainboard/msi/ms9282/mainboard.c
+++ b/src/mainboard/msi/ms9282/mainboard.c
@@ -24,18 +24,10 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <device/pci_ops.h>
-// #include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	/* TODO: Add a correct hda_verb.h file for this board. */
-	// cim_verb_data = mainboard_cim_verb_data;
-	// cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/msi/ms9652_fam10/mainboard.c b/src/mainboard/msi/ms9652_fam10/mainboard.c
index 316a962..96760d6 100644
--- a/src/mainboard/msi/ms9652_fam10/mainboard.c
+++ b/src/mainboard/msi/ms9652_fam10/mainboard.c
@@ -24,19 +24,10 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <device/pci_ops.h>
-#include <device/azalia_device.h>
-// #include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	/* TODO: Add a correct hda_verb.h file for this board. */
-	// cim_verb_data = mainboard_cim_verb_data;
-	// cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/nvidia/l1_2pvv/hda_verb.h b/src/mainboard/nvidia/l1_2pvv/hda_verb.c
similarity index 98%
rename from src/mainboard/nvidia/l1_2pvv/hda_verb.h
rename to src/mainboard/nvidia/l1_2pvv/hda_verb.c
index ea3159e..780167a 100644
--- a/src/mainboard/nvidia/l1_2pvv/hda_verb.h
+++ b/src/mainboard/nvidia/l1_2pvv/hda_verb.c
@@ -64,3 +64,4 @@
 	/* NID 0x1f, S/PDIF-IN */
 	AZALIA_PIN_CFG(0x0, 0x1f, 0x01c59150),
 };
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/nvidia/l1_2pvv/mainboard.c b/src/mainboard/nvidia/l1_2pvv/mainboard.c
index fb7317b..291d4f7 100644
--- a/src/mainboard/nvidia/l1_2pvv/mainboard.c
+++ b/src/mainboard/nvidia/l1_2pvv/mainboard.c
@@ -24,18 +24,10 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <device/pci_ops.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/packardbell/ms2290/hda_verb.h b/src/mainboard/packardbell/ms2290/hda_verb.c
similarity index 93%
rename from src/mainboard/packardbell/ms2290/hda_verb.h
rename to src/mainboard/packardbell/ms2290/hda_verb.c
index 3cc00db..4ec3b36 100644
--- a/src/mainboard/packardbell/ms2290/hda_verb.h
+++ b/src/mainboard/packardbell/ms2290/hda_verb.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0272,	/* Codec Vendor / Device ID: Realtek ALC272X */
 	0x10250379,	/* Subsystem ID  */
@@ -58,3 +60,7 @@
 	/* NID 0x06.  */
 	AZALIA_PIN_CFG(0x3, 0x06, 0x58560030),
 };
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/packardbell/ms2290/mainboard.c b/src/mainboard/packardbell/ms2290/mainboard.c
index 5fff98d..c14e9b7 100644
--- a/src/mainboard/packardbell/ms2290/mainboard.c
+++ b/src/mainboard/packardbell/ms2290/mainboard.c
@@ -43,8 +43,6 @@
 #include <cpu/x86/lapic.h>
 #include <device/pci.h>
 #include <smbios.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 static acpi_cstate_t cst_entries[] = {
 	{1, 1, 1000, {0x7f, 1, 2, {0}, 1, 0}},
@@ -58,13 +56,7 @@
 	return ARRAY_SIZE(cst_entries);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-}
 
 static void mainboard_enable(device_t dev)
 {
@@ -137,7 +129,6 @@
 	/* This sneaked in here, because EasyNote has no SuperIO chip.
 	 */
 	pc_keyboard_init();
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/roda/rk886ex/hda_verb.c b/src/mainboard/roda/rk886ex/hda_verb.c
new file mode 100644
index 0000000..072a306
--- /dev/null
+++ b/src/mainboard/roda/rk886ex/hda_verb.c
@@ -0,0 +1,7 @@
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[0] = {};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/roda/rk9/hda_verb.h b/src/mainboard/roda/rk9/hda_verb.c
similarity index 95%
rename from src/mainboard/roda/rk9/hda_verb.h
rename to src/mainboard/roda/rk9/hda_verb.c
index 64a3c8e..8960232 100644
--- a/src/mainboard/roda/rk9/hda_verb.h
+++ b/src/mainboard/roda/rk9/hda_verb.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10ec0262,	// Codec Vendor / Device ID: Realtek ALC262
 	0x43528986,	// Subsystem ID
@@ -52,7 +54,7 @@
 	AZALIA_PIN_CFG(0, 0x1f, 0x411111f0)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,	/* power up codec */
 	0x01470500,	/* power up speakers */
 	0x01470100,	/* select lout1 (input 0x0) for speakers */
@@ -62,3 +64,4 @@
 	0x00c3b015,	/* set lout1 output volume -15dB */
 	0x0143b000,	/* unmute speakers */
 };
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/roda/rk9/mainboard.c b/src/mainboard/roda/rk9/mainboard.c
index 49db15f..d5d02bf 100644
--- a/src/mainboard/roda/rk9/mainboard.c
+++ b/src/mainboard/roda/rk9/mainboard.c
@@ -26,22 +26,12 @@
 #include <drivers/intel/gma/int15.h>
 #include <pc80/keyboard.h>
 #include <ec/acpi/ec.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 #if CONFIG_GENERATE_ACPI_TABLES
 #include "cstates.c" /* Include it, as the linker won't find
 			the overloaded weak function in there. */
 #endif
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = ARRAY_SIZE(mainboard_pc_beep_verbs);
-}
-
 static void ec_setup(void)
 {
 	/* Thermal limits?  Values are from ectool's ram dump. */
@@ -59,7 +49,6 @@
 static void mainboard_enable(device_t dev)
 {
 	ec_setup();
-	verb_setup();
 	/* LCD panel type is SIO GPIO40-43.
 	   It's controlled by a DIP switch but was always
 	   set to 4 while only values of 5 and 6 worked. */
diff --git a/src/mainboard/samsung/lumpy/hda_verb.h b/src/mainboard/samsung/lumpy/hda_verb.c
similarity index 90%
rename from src/mainboard/samsung/lumpy/hda_verb.h
rename to src/mainboard/samsung/lumpy/hda_verb.c
index 4806b75..7ee254b 100644
--- a/src/mainboard/samsung/lumpy/hda_verb.h
+++ b/src/mainboard/samsung/lumpy/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10134210,	// Codec Vendor / Device ID: Realtek ALC262
 	0x144db082,	// Subsystem ID
@@ -49,12 +51,11 @@
 	AZALIA_PIN_CFG(0x0, 0x0a, 0x434510f0)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,			/* power up codec */
 	0x00270500,			/* power up DAC */
 	0x00670500,			/* power up speaker */
 	0x00670740,			/* enable speaker output */
 	0x0023B04B,			/* set DAC gain */
 };
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/samsung/lumpy/mainboard.c b/src/mainboard/samsung/lumpy/mainboard.c
index 803761c..3bdd4d9 100644
--- a/src/mainboard/samsung/lumpy/mainboard.c
+++ b/src/mainboard/samsung/lumpy/mainboard.c
@@ -35,8 +35,6 @@
 #include "onboard.h"
 #include <southbridge/intel/bd82x6x/pch.h>
 #include <smbios.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -48,15 +46,7 @@
 	send_ec_command(EC_ACPI_ENABLE);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-}
 
 static void mainboard_init(device_t dev)
 {
@@ -116,7 +106,6 @@
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = lumpy_onboard_smbios_data;
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, GMA_INT15_PANEL_FIT_DEFAULT, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/mainboard/samsung/stumpy/hda_verb.h b/src/mainboard/samsung/stumpy/hda_verb.c
similarity index 92%
rename from src/mainboard/samsung/stumpy/hda_verb.h
rename to src/mainboard/samsung/stumpy/hda_verb.c
index 3992eee..1949aaa 100644
--- a/src/mainboard/samsung/stumpy/hda_verb.h
+++ b/src/mainboard/samsung/stumpy/hda_verb.c
@@ -17,7 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-static const u32 mainboard_cim_verb_data[] = {
+#include <device/azalia_device.h>
+
+const u32 cim_verb_data[] = {
 	/* coreboot specific header */
 	0x10134210,	// Codec Vendor / Device ID: Cirrus Logic CS4210
 	0x10134210,	// Subsystem ID
@@ -64,12 +66,11 @@
 	AZALIA_PIN_CFG(0x3, 0x07, 0x18560030)
 };
 
-static const u32 mainboard_pc_beep_verbs[] = {
+const u32 pc_beep_verbs[] = {
 	0x00170500,			/* power up codec */
 	0x00270500,			/* power up DAC */
 	0x00670500,			/* power up speaker */
 	0x00670740,			/* enable speaker output */
 	0x0023B04B,			/* set DAC gain */
 };
-static const u32 mainboard_pc_beep_verbs_size =
-	ARRAY_SIZE(mainboard_pc_beep_verbs);
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/samsung/stumpy/mainboard.c b/src/mainboard/samsung/stumpy/mainboard.c
index d61b808..347ce8a 100644
--- a/src/mainboard/samsung/stumpy/mainboard.c
+++ b/src/mainboard/samsung/stumpy/mainboard.c
@@ -32,8 +32,6 @@
 #include <arch/interrupt.h>
 #include <boot/coreboot_tables.h>
 #include <southbridge/intel/bd82x6x/pch.h>
-#include <device/azalia_device.h>
-#include "hda_verb.h"
 
 void mainboard_suspend_resume(void)
 {
@@ -41,15 +39,7 @@
 	outb(0xcb, 0xb2);
 }
 
-/* Audio Setup */
 
-static void verb_setup(void)
-{
-	cim_verb_data = mainboard_cim_verb_data;
-	cim_verb_data_size = sizeof(mainboard_cim_verb_data);
-	pc_beep_verbs = mainboard_pc_beep_verbs;
-	pc_beep_verbs_size = mainboard_pc_beep_verbs_size;
-}
 
 // mainboard_enable is executed as first thing after
 // enumerate_buses().
@@ -57,7 +47,6 @@
 static void mainboard_enable(device_t dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_EDP, GMA_INT15_PANEL_FIT_CENTERING, GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
-	verb_setup();
 }
 
 struct chip_operations mainboard_ops = {
diff --git a/src/southbridge/intel/bd82x6x/Makefile.inc b/src/southbridge/intel/bd82x6x/Makefile.inc
index def9cd2..b79b85a 100644
--- a/src/southbridge/intel/bd82x6x/Makefile.inc
+++ b/src/southbridge/intel/bd82x6x/Makefile.inc
@@ -34,6 +34,8 @@
 ramstage-y += me_8.x.c
 ramstage-y += smbus.c
 
+ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/hda_verb.c
+
 ramstage-y += me_status.c
 ramstage-y += reset.c
 ramstage-y += watchdog.c
diff --git a/src/southbridge/intel/bd82x6x/azalia.c b/src/southbridge/intel/bd82x6x/azalia.c
index fed6f74..bef88ab 100644
--- a/src/southbridge/intel/bd82x6x/azalia.c
+++ b/src/southbridge/intel/bd82x6x/azalia.c
@@ -26,6 +26,7 @@
 #include <device/pci_ops.h>
 #include <arch/io.h>
 #include <delay.h>
+#include <device/azalia_device.h>
 #include "pch.h"
 
 #define HDA_ICII_REG 0x68
@@ -90,11 +91,6 @@
 	return 0;
 }
 
-const u32 * cim_verb_data = NULL;
-u32 cim_verb_data_size = 0;
-const u32 * pc_beep_verbs = NULL;
-u32 pc_beep_verbs_size = 0;
-
 static u32 find_verb(struct device *dev, u32 viddid, const u32 ** verb)
 {
 	int idx=0;
diff --git a/src/southbridge/intel/i82801gx/Makefile.inc b/src/southbridge/intel/i82801gx/Makefile.inc
index 94c84ed..6e4d42e 100644
--- a/src/southbridge/intel/i82801gx/Makefile.inc
+++ b/src/southbridge/intel/i82801gx/Makefile.inc
@@ -30,6 +30,8 @@
 ramstage-y += usb.c
 ramstage-y += usb_ehci.c
 
+ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/hda_verb.c
+
 ramstage-y += reset.c
 ramstage-y += watchdog.c
 
diff --git a/src/southbridge/intel/i82801gx/azalia.c b/src/southbridge/intel/i82801gx/azalia.c
index 59d8123..f6628e7 100644
--- a/src/southbridge/intel/i82801gx/azalia.c
+++ b/src/southbridge/intel/i82801gx/azalia.c
@@ -25,6 +25,7 @@
 #include <device/pci_ops.h>
 #include <arch/io.h>
 #include <delay.h>
+#include <device/azalia_device.h>
 #include "i82801gx.h"
 
 #define HDA_ICII_REG 0x68
@@ -90,9 +91,6 @@
 	return 0;
 }
 
-const u32 * cim_verb_data = NULL;
-u32 cim_verb_data_size = 0;
-
 static u32 find_verb(struct device *dev, u32 viddid, const u32 ** verb)
 {
 	int idx=0;
diff --git a/src/southbridge/intel/i82801ix/Makefile.inc b/src/southbridge/intel/i82801ix/Makefile.inc
index 096533c..4117263 100644
--- a/src/southbridge/intel/i82801ix/Makefile.inc
+++ b/src/southbridge/intel/i82801ix/Makefile.inc
@@ -28,6 +28,8 @@
 ramstage-y += thermal.c
 ramstage-y += smbus.c
 
+ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/hda_verb.c
+
 ramstage-y += ../i82801gx/reset.c
 ramstage-y += ../i82801gx/watchdog.c
 
diff --git a/src/southbridge/intel/i82801ix/hdaudio.c b/src/southbridge/intel/i82801ix/hdaudio.c
index 407c0a7..dd817b9 100644
--- a/src/southbridge/intel/i82801ix/hdaudio.c
+++ b/src/southbridge/intel/i82801ix/hdaudio.c
@@ -26,6 +26,7 @@
 #include <device/pci_ops.h>
 #include <arch/io.h>
 #include <delay.h>
+#include <device/azalia_device.h>
 #include "i82801ix.h"
 
 #define HDA_ICII_REG 0x68
@@ -91,11 +92,6 @@
 	return 0;
 }
 
-const u32 * cim_verb_data = NULL;
-u32 cim_verb_data_size = 0;
-const u32 * pc_beep_verbs = NULL;
-u32 pc_beep_verbs_size = 0;
-
 static u32 find_verb(struct device *dev, u32 viddid, const u32 ** verb)
 {
 	int idx=0;
diff --git a/src/southbridge/intel/ibexpeak/Makefile.inc b/src/southbridge/intel/ibexpeak/Makefile.inc
index da9f34a..24cbe45 100644
--- a/src/southbridge/intel/ibexpeak/Makefile.inc
+++ b/src/southbridge/intel/ibexpeak/Makefile.inc
@@ -34,6 +34,8 @@
 ramstage-y += smbus.c
 ramstage-y += thermal.c
 
+ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/hda_verb.c
+
 ramstage-y += ../bd82x6x/me_status.c
 ramstage-y += ../bd82x6x/reset.c
 ramstage-y += ../bd82x6x/watchdog.c
diff --git a/src/southbridge/intel/ibexpeak/azalia.c b/src/southbridge/intel/ibexpeak/azalia.c
index 046d2b6..314a1b1 100644
--- a/src/southbridge/intel/ibexpeak/azalia.c
+++ b/src/southbridge/intel/ibexpeak/azalia.c
@@ -26,6 +26,7 @@
 #include <device/pci_ops.h>
 #include <arch/io.h>
 #include <delay.h>
+#include <device/azalia_device.h>
 #include "pch.h"
 
 #define HDA_ICII_REG 0x68
@@ -88,11 +89,6 @@
 	return 0;
 }
 
-const u32 * cim_verb_data = NULL;
-u32 cim_verb_data_size = 0;
-const u32 * pc_beep_verbs = NULL;
-u32 pc_beep_verbs_size = 0;
-
 static u32 find_verb(struct device *dev, u32 viddid, const u32 ** verb)
 {
 	int idx=0;
diff --git a/src/southbridge/intel/lynxpoint/Makefile.inc b/src/southbridge/intel/lynxpoint/Makefile.inc
index e504db0..3b7663e 100644
--- a/src/southbridge/intel/lynxpoint/Makefile.inc
+++ b/src/southbridge/intel/lynxpoint/Makefile.inc
@@ -35,6 +35,8 @@
 ramstage-y += hda_verb.c
 ramstage-$(CONFIG_INTEL_LYNXPOINT_LP) += serialio.c
 
+ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/hda_verb.c
+
 ramstage-y += rcba.c
 ramstage-y += me_status.c
 ramstage-y += reset.c
diff --git a/src/southbridge/intel/lynxpoint/azalia.c b/src/southbridge/intel/lynxpoint/azalia.c
index 24c6702..be056be 100644
--- a/src/southbridge/intel/lynxpoint/azalia.c
+++ b/src/southbridge/intel/lynxpoint/azalia.c
@@ -26,14 +26,10 @@
 #include <device/pci_ops.h>
 #include <arch/io.h>
 #include <delay.h>
+#include <device/azalia_device.h>
 #include "pch.h"
 #include "hda_verb.h"
 
-const u32 * cim_verb_data = NULL;
-u32 cim_verb_data_size = 0;
-const u32 * pc_beep_verbs = NULL;
-u32 pc_beep_verbs_size = 0;
-
 static void codecs_init(u32 base, u32 codec_mask)
 {
 	int i;
@@ -46,7 +42,7 @@
 				       cim_verb_data);
 	}
 
-	if (pc_beep_verbs_size && pc_beep_verbs)
+	if (pc_beep_verbs_size)
 		hda_codec_write(base, pc_beep_verbs_size, pc_beep_verbs);
 }