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);