Smaug: Enable audio support (RT5677 codec)

The I2S/AHUB/XBAR addresses are behind the APE
on T210 (Audio Processing Engine). With these
changes, I can hear a mild beep from the speakers
and HP. May need to increase volume if it's deemed
too quiet.

BUG=chrome-os-partner:38343
BRANCH=none
TEST=Built Smaug OK, heard sound on speakers/HP
with Ctrl+U.

Change-Id: Ie27b077802fe79f7d65159d8e3980ad12c2054ee
Signed-off-by: Tom Warren <twarren@nvidia.com>
Reviewed-on: https://chromium-review.googlesource.com/266838
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
diff --git a/board/smaug/defconfig b/board/smaug/defconfig
index 642aa50..db8477f 100644
--- a/board/smaug/defconfig
+++ b/board/smaug/defconfig
@@ -40,6 +40,10 @@
 CONFIG_DRIVER_STORAGE_MMC=y
 CONFIG_DRIVER_STORAGE_MMC_TEGRA=y
 CONFIG_DRIVER_TPM_SLB9635_I2C=y
+CONFIG_DRIVER_SOUND_I2S=y
+CONFIG_DRIVER_SOUND_RT5677=y
+CONFIG_DRIVER_SOUND_ROUTE=y
+CONFIG_DRIVER_SOUND_TEGRA_AUDIO_HUB=y
 
 # Fastboot
 CONFIG_FASTBOOT_USBVID=0x18d1
diff --git a/src/board/smaug/board.c b/src/board/smaug/board.c
index b7a6dff..7930e46 100644
--- a/src/board/smaug/board.c
+++ b/src/board/smaug/board.c
@@ -46,6 +46,15 @@
 #include "drivers/ec/cros/i2c.h"
 #include "vboot/boot_policy.h"
 #include "vboot/util/flag.h"
+#include "drivers/sound/i2s.h"
+#include "drivers/sound/rt5677.h"
+#include "drivers/sound/tegra_ahub.h"
+
+#define AXBAR_BASE		0x702D0800
+#define ADMAIF_BASE		0x702D0000
+#define I2S1_BASE		0x702D1000
+#define I2C6_BASE		0x7000D100
+#define RT5677_DEV_NUM		0x2D
 
 enum {
 	CLK_RST_BASE = 0x60006000,
@@ -163,6 +172,23 @@
 	/* Lid always open for now. */
 	flag_replace(FLAG_LIDSW, new_gpio_high());
 
+	/* Audio init */
+	TegraAudioHubXbar *xbar = new_tegra_audio_hub_xbar(AXBAR_BASE);
+	TegraAudioHubApbif *apbif = new_tegra_audio_hub_apbif(ADMAIF_BASE, 8);
+	TegraI2s *i2s1 = new_tegra_i2s(I2S1_BASE, &apbif->ops, 1, 16, 2,
+				       1536000, 48000);
+	TegraAudioHub *ahub = new_tegra_audio_hub(xbar, apbif, i2s1);
+	I2sSource *i2s_source = new_i2s_source(&i2s1->ops, 48000, 2, 16000);
+	SoundRoute *sound_route = new_sound_route(&i2s_source->ops);
+	TegraI2c *i2c6 = new_tegra_i2c((void *)I2C6_BASE, 6,
+				       (void *)CLK_RST_X_RST_SET,
+				       (void *)CLK_RST_X_RST_CLR, CLK_X_I2C6);
+	rt5677Codec *codec = new_rt5677_codec(&i2c6->ops, RT5677_DEV_NUM, 16, 48000, 256, 1);
+	list_insert_after(&ahub->component.list_node, &sound_route->components);
+	list_insert_after(&codec->component.list_node, &sound_route->components);
+
+	sound_set_ops(&sound_route->ops);
+
 	return 0;
 }
 
diff --git a/src/drivers/sound/rt5677.c b/src/drivers/sound/rt5677.c
index 93fdd08..eb2e4ea 100644
--- a/src/drivers/sound/rt5677.c
+++ b/src/drivers/sound/rt5677.c
@@ -34,7 +34,7 @@
 	{RT5677_CLK_TREE_CTRL1,	  0x0111},
 	{RT5677_PLL1_CTRL1,	  0x0000},
 	{RT5677_PLL1_CTRL2,	  0x0000},
-	{RT5677_GPIO_CTRL2,	  0x01B0},
+	{RT5677_GPIO_CTRL2,       0x61B0},      /* GPIO5 output, high for SPKR_PA_EN on Smaug */
 	{RT5677_DIG_MISC,	  0x0029},
 	{RT5677_GEN_CTRL1,	  0x00FF},
 	{RT5677_PWR_DIG2,	  0x9024},
@@ -156,7 +156,7 @@
 	ret |= rt5677_update_bits(codec, RT5677_I2S1_SDP, RT5677_I2S_DF_MASK,
 	       RT5677_I2S_DF_I2S);
 
-	/* Ryu: I2S2 (going to speaker amp) is master */
+	/* A44: I2S2 (going to speaker amp) is master */
 	ret = rt5677_update_bits(codec, RT5677_I2S2_SDP, RT5677_I2S_MS_MASK,
 	      RT5677_I2S_MS_M);