google/kukui: Support sound in boot process

Configure and enable GPIO for speaker amp max98357a.

BUG=b:117254418
TEST=Build pass and verified on kukui p1 board
BRANCH=None

Change-Id: I97655702dff402245326d2eff71fae0e336df9f5
Signed-off-by: Jiaxin Yu <jiaxin.yu@mediatek.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32459
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
diff --git a/src/mainboard/google/kukui/chromeos.c b/src/mainboard/google/kukui/chromeos.c
index 44e75e2..3539501 100644
--- a/src/mainboard/google/kukui/chromeos.c
+++ b/src/mainboard/google/kukui/chromeos.c
@@ -27,6 +27,7 @@
 	gpio_input_pullup(EC_IRQ);
 	gpio_input_pullup(CR50_IRQ);
 	gpio_output(GPIO_RESET, 0);
+	gpio_output(GPIO_EN_SPK_AMP, 0);
 }
 
 void fill_lb_gpios(struct lb_gpios *gpios)
@@ -38,6 +39,7 @@
 		{EC_IN_RW.id, ACTIVE_HIGH, -1, "EC in RW"},
 		{EC_IRQ.id, ACTIVE_LOW, -1, "EC interrupt"},
 		{CR50_IRQ.id, ACTIVE_HIGH, -1, "TPM interrupt"},
+		{GPIO_EN_SPK_AMP.id, ACTIVE_HIGH, -1, "speaker enable"},
 	};
 	lb_add_gpios(gpios, chromeos_gpios, ARRAY_SIZE(chromeos_gpios));
 }
diff --git a/src/mainboard/google/kukui/gpio.h b/src/mainboard/google/kukui/gpio.h
index 92d238e..977acc3 100644
--- a/src/mainboard/google/kukui/gpio.h
+++ b/src/mainboard/google/kukui/gpio.h
@@ -23,6 +23,7 @@
 #define EC_IN_RW	GPIO(PERIPHERAL_EN14)
 #define CR50_IRQ	GPIO(PERIPHERAL_EN3)
 #define GPIO_RESET	GPIO(PERIPHERAL_EN8)
+#define GPIO_EN_SPK_AMP	GPIO(PERIPHERAL_EN12)
 
 void setup_chromeos_gpios(void);
 
diff --git a/src/mainboard/google/kukui/mainboard.c b/src/mainboard/google/kukui/mainboard.c
index e1d8f5f..40b8a49 100644
--- a/src/mainboard/google/kukui/mainboard.c
+++ b/src/mainboard/google/kukui/mainboard.c
@@ -16,6 +16,7 @@
 #include <device/device.h>
 #include <soc/gpio.h>
 #include <soc/mmu_operations.h>
+#include <soc/mtcmos.h>
 #include <soc/usb.h>
 
 static void configure_emmc(void)
@@ -37,10 +38,22 @@
 	setup_usb_host();
 }
 
+static void configure_audio(void)
+{
+	/* Audio PWR*/
+	mtcmos_audio_power_on();
+
+	/* SoC I2S */
+	gpio_set_mode(GPIO(CAM_RST0), PAD_CAM_RST0_FUNC_I2S2_LRCK);
+	gpio_set_mode(GPIO(CAM_PDN1), PAD_CAM_PDN1_FUNC_I2S2_BCK);
+	gpio_set_mode(GPIO(CAM_PDN0), PAD_CAM_PDN0_FUNC_I2S2_MCK);
+	gpio_set_mode(GPIO(EINT3), PAD_EINT3_FUNC_I2S3_DO);
+}
 static void mainboard_init(struct device *dev)
 {
 	configure_emmc();
 	configure_usb();
+	configure_audio();
 }
 
 static void mainboard_enable(struct device *dev)