summaryrefslogtreecommitdiff
path: root/src/mainboard/google/oak
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/google/oak')
-rw-r--r--src/mainboard/google/oak/mainboard.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/mainboard/google/oak/mainboard.c b/src/mainboard/google/oak/mainboard.c
index c219678ae8..8dde2ef186 100644
--- a/src/mainboard/google/oak/mainboard.c
+++ b/src/mainboard/google/oak/mainboard.c
@@ -17,10 +17,59 @@
#include <arch/io.h>
#include <boardid.h>
#include <boot/coreboot_tables.h>
+#include <delay.h>
#include <device/device.h>
+#include <gpio.h>
+#include <soc/mt6391.h>
+#include <soc/mtcmos.h>
+#include <soc/pinmux.h>
+#include <soc/pll.h>
+
+static void configure_audio(void)
+{
+ mtcmos_audio_power_on();
+
+ /* regulator for codecs */
+ switch (board_id()) {
+ case 0:
+ /* vgp1 set to 1.22V */
+ mt6391_configure_ldo(LDO_VCAMD, LDO_1P22);
+ /* vgp4 set to 1.8V */
+ mt6391_configure_ldo(LDO_VGP4, LDO_1P8);
+ break;
+ default:
+ /* board from Rev1 */
+ /* vgp1 set to 1.8V */
+ mt6391_configure_ldo(LDO_VCAMD, LDO_1P8);
+ /* delay 1ms for realtek's power sequence request */
+ mdelay(1);
+ /* vcama set to 1.8V */
+ mt6391_configure_ldo(LDO_VCAMA, LDO_1P8);
+ break;
+ }
+
+ /* reset ALC5676 */
+ gpio_output(PAD_LCM_RST, 1);
+
+ /* SoC I2S */
+ gpio_set_mode(PAD_I2S0_LRCK, PAD_I2S0_LRCK_FUNC_I2S1_WS);
+ gpio_set_mode(PAD_I2S0_BCK, PAD_I2S0_BCK_FUNC_I2S1_BCK);
+ gpio_set_mode(PAD_I2S0_MCK, PAD_I2S0_MCK_FUNC_I2S1_MCK);
+ gpio_set_mode(PAD_I2S0_DATA0, PAD_I2S0_DATA0_FUNC_I2S1_DO_1);
+ gpio_set_mode(PAD_I2S0_DATA1, PAD_I2S0_DATA1_FUNC_I2S2_DI_2);
+
+ /* codec ext MCLK ON */
+ mt6391_gpio_output(MT6391_KP_COL4, 1);
+ mt6391_gpio_output(MT6391_KP_COL5, 1);
+
+ /* set I2S clock to 48KHz */
+ mt_pll_set_aud_div(48 * KHz);
+}
+
static void mainboard_init(device_t dev)
{
+ configure_audio();
}
static void mainboard_enable(device_t dev)