device/azalia_device: Add mainboard hook to program codecs

On some mainboards, codec configuration depends on settings that are
only known at runtime, which is impossible to specify using one verb
table. Add an optional `mainboard_azalia_program_runtime_verbs` hook
where mainboards can program runtime-dependent codec verbs.

Change-Id: I7efeba5c26051aeb5061cce191ace08c304a6c70
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/50388
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
diff --git a/src/device/azalia_device.c b/src/device/azalia_device.c
index 5a3a5de..1a57be1 100644
--- a/src/device/azalia_device.c
+++ b/src/device/azalia_device.c
@@ -210,6 +210,10 @@
 	return 0;
 }
 
+__weak void mainboard_azalia_program_runtime_verbs(u8 *base, u32 viddid)
+{
+}
+
 static void codec_init(struct device *dev, u8 *base, int addr)
 {
 	u32 reg32;
@@ -246,6 +250,8 @@
 	/* 3 */
 	azalia_program_verb_table(base, verb, verb_size);
 	printk(BIOS_DEBUG, "azalia_audio: verb loaded.\n");
+
+	mainboard_azalia_program_runtime_verbs(base, reg32);
 }
 
 static void codecs_init(struct device *dev, u8 *base, u32 codec_mask)
diff --git a/src/include/device/azalia_device.h b/src/include/device/azalia_device.h
index ce8c0d1..9010507 100644
--- a/src/include/device/azalia_device.h
+++ b/src/include/device/azalia_device.h
@@ -26,6 +26,9 @@
 void azalia_audio_init(struct device *dev);
 extern struct device_operations default_azalia_audio_ops;
 
+/* Optional hook to program codec settings that are only known at runtime */
+void mainboard_azalia_program_runtime_verbs(u8 *base, u32 viddid);
+
 extern const u32 cim_verb_data[];
 extern const u32 cim_verb_data_size;
 extern const u32 pc_beep_verbs[];