summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinhui Zhou <zxinhui@google.com>2021-09-23 14:02:30 -0700
committerXinhui Zhou <zxinhui@google.com>2021-10-12 21:22:27 -0700
commit3bd7a04d1ae819f3d707260a4e9d2eccb052cab9 (patch)
tree4e687250554ea7668ab8006a9c1d0c53e69e1efb
parentdbd0e2ffed6c4db9d1a6ef650a6c38954ea9ac29 (diff)
downloadaoc-android-gs-raviole-5.10-android12-qpr1-d.tar.gz
Added support to get audio capture stream from eraser for speech recognition. Usage examples: - Choose capture mic source as ERASER tinymix "Audio Capture Mic Source" "ERASER" tinymix "EP1 TX Mixer ERASER_TX" 1 - Enable Eraser tinymix "Audio Capture Eraser Enable" 1 Bug: 172266161 Bug: 196896800 Signed-off-by: Xinhui Zhou <zxinhui@google.com> Change-Id: I04333a695583c4cfa351cb121bd16bc52f5783b9
-rwxr-xr-xalsa/aoc_alsa.h4
-rw-r--r--alsa/aoc_alsa_card.c3
-rwxr-xr-xalsa/aoc_alsa_ctl.c40
-rwxr-xr-xalsa/aoc_alsa_hw.c18
-rw-r--r--alsa/aoc_alsa_path.c45
-rw-r--r--alsa/google-aoc-enum.h3
6 files changed, 111 insertions, 2 deletions
diff --git a/alsa/aoc_alsa.h b/alsa/aoc_alsa.h
index fb58acb..ae76ee1 100755
--- a/alsa/aoc_alsa.h
+++ b/alsa/aoc_alsa.h
@@ -169,7 +169,7 @@ enum { NORMAL = 0, MMAPED, RAW, INCALL, HIFI, ANDROID_AEC, COMPRESS };
enum { BUILTIN_MIC0 = 0, BUILTIN_MIC1, BUILTIN_MIC2, BUILTIN_MIC3 };
enum { MIC_LOW_POWER_GAIN = 0, MIC_HIGH_POWER_GAIN, MIC_CURRENT_GAIN };
-enum { DEFAULT_MIC = 0, BUILTIN_MIC, USB_MIC, BT_MIC, IN_CALL_MUSIC, NO_MIC=IN_CALL_MUSIC };
+enum { DEFAULT_MIC = 0, BUILTIN_MIC, USB_MIC, BT_MIC, IN_CALL_MUSIC, NO_MIC=IN_CALL_MUSIC, ERASER };
enum { INCALL_CAPTURE_OFF = 0, INCALL_CAPTURE_UL, INCALL_CAPTURE_DL, INCALL_CAPTURE_UL_DL };
enum { NONBLOCKING = 0, BLOCKING = 1 };
enum { STOP = 0, START };
@@ -213,6 +213,7 @@ struct aoc_chip {
int compr_offload_volume;
int mic_spatial_module_enable;
+ int capture_eraser_enable;
int sidetone_enable;
int mic_loopback_enabled;
unsigned int opened;
@@ -321,6 +322,7 @@ int ap_record_stop(struct aoc_chip *chip);
int aoc_capture_filter_runtime_control(struct aoc_chip *chip, uint32_t port_id, bool on);
int aoc_audio_capture_runtime_trigger(struct aoc_chip *chip, int ep_id,
int dst, bool on);
+int aoc_audio_capture_eraser_enable(struct aoc_chip *chip, long enable);
int aoc_voice_call_mic_mute(struct aoc_chip *chip, int mute);
int aoc_incall_capture_enable_get(struct aoc_chip *chip, int stream, long *val);
diff --git a/alsa/aoc_alsa_card.c b/alsa/aoc_alsa_card.c
index 4462565..f903e00 100644
--- a/alsa/aoc_alsa_card.c
+++ b/alsa/aoc_alsa_card.c
@@ -251,6 +251,7 @@ static const struct be_param_cache default_be_params[PORT_MAX] = {
MK_TDM_BE_PARAMS(TDM_1_TX, SNDRV_PCM_FORMAT_S16_LE,
2, 48000, 4, SNDRV_PCM_FORMAT_S32_LE)
MK_BE_PARAMS(INTERNAL_MIC_TX, SNDRV_PCM_FORMAT_S16_LE, 2, 48000)
+ MK_BE_PARAMS(ERASER_TX, SNDRV_PCM_FORMAT_S16_LE, 2, 48000)
MK_BE_PARAMS(BT_RX, SNDRV_PCM_FORMAT_S16_LE, 1, 16000)
MK_BE_PARAMS(BT_TX, SNDRV_PCM_FORMAT_S16_LE, 1, 16000)
MK_BE_PARAMS(USB_RX, SNDRV_PCM_FORMAT_S16_LE, 2, 48000)
@@ -941,6 +942,7 @@ MK_TDM_HW_PARAM_CTRLS(TDM_0_TX, "TDM_0_TX");
MK_TDM_HW_PARAM_CTRLS(TDM_1_RX, "TDM_1_RX");
MK_TDM_HW_PARAM_CTRLS(TDM_1_TX, "TDM_1_TX");
MK_HW_PARAM_CTRLS(INTERNAL_MIC_TX, "INTERNAL_MIC_TX");
+MK_HW_PARAM_CTRLS(ERASER_TX, "ERASER_TX");
MK_HW_PARAM_CTRLS(BT_RX, "BT_RX");
MK_HW_PARAM_CTRLS(BT_TX, "BT_TX");
MK_HW_PARAM_CTRLS(USB_RX, "USB_RX");
@@ -966,6 +968,7 @@ static const struct dai_link_res_map be_res_map[PORT_MAX] = {
MK_BE_RES_ITEM(TDM_1_RX, &aoc_tdm_ops, hw_params_fixup)
MK_BE_RES_ITEM(TDM_1_TX, &aoc_tdm_ops, hw_params_fixup)
MK_BE_RES_ITEM(INTERNAL_MIC_TX, &aoc_i2s_ops, hw_params_fixup)
+ MK_BE_RES_ITEM(ERASER_TX, &aoc_i2s_ops, hw_params_fixup)
MK_BE_RES_ITEM(BT_RX, &aoc_i2s_ops, hw_params_fixup)
MK_BE_RES_ITEM(BT_TX, &aoc_i2s_ops, hw_params_fixup)
MK_BE_RES_ITEM(USB_RX, &aoc_i2s_ops, hw_params_fixup)
diff --git a/alsa/aoc_alsa_ctl.c b/alsa/aoc_alsa_ctl.c
index 91a8acf..6c5edd2 100755
--- a/alsa/aoc_alsa_ctl.c
+++ b/alsa/aoc_alsa_ctl.c
@@ -539,6 +539,40 @@ static int decoder_ref_enable_ctl_get(struct snd_kcontrol *kcontrol,
return err;
}
+static int audio_capture_eraser_enable_ctl_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct aoc_chip *chip = snd_kcontrol_chip(kcontrol);
+
+ if (mutex_lock_interruptible(&chip->audio_mutex))
+ return -EINTR;
+
+ ucontrol->value.integer.value[0] = chip->capture_eraser_enable;
+
+ mutex_unlock(&chip->audio_mutex);
+
+ return 0;
+}
+
+static int audio_capture_eraser_enable_ctl_set(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct aoc_chip *chip = snd_kcontrol_chip(kcontrol);
+ int err = 0;
+
+ if (mutex_lock_interruptible(&chip->audio_mutex))
+ return -EINTR;
+
+ chip->capture_eraser_enable = ucontrol->value.integer.value[0];
+ err = aoc_audio_capture_eraser_enable(chip, chip->capture_eraser_enable);
+ if (err < 0)
+ pr_err("ERR:%d capture eraser %s fail\n", err,
+ (chip->capture_eraser_enable) ? "Enable" : "Disable");
+
+ mutex_unlock(&chip->audio_mutex);
+ return err;
+}
+
static int sidetone_enable_ctl_set(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
@@ -1464,7 +1498,7 @@ static SOC_ENUM_SINGLE_DECL(incall_capture_stream2_enum, 1, 2, incall_capture_st
/* audio capture mic source */
static const char *audio_capture_mic_source_texts[] = { "Default", "Builtin_MIC", "USB_MIC",
- "BT_MIC", "No MIC" };
+ "BT_MIC", "No MIC", "ERASER" };
static SOC_ENUM_SINGLE_DECL(audio_capture_mic_source_enum, 1, 0, audio_capture_mic_source_texts);
/* Voice call mic source */
@@ -1623,6 +1657,9 @@ static struct snd_kcontrol_new snd_aoc_ctl[] = {
SOC_SINGLE_EXT("AoC USB Sink Channel Bitmap", SND_SOC_NOPM, 4, 0x00ffff,
0, aoc_sink_channel_bitmap_ctl_get, NULL),
+ SOC_SINGLE_EXT("Audio Capture Eraser Enable", SND_SOC_NOPM, 0, 1, 0,
+ audio_capture_eraser_enable_ctl_get, audio_capture_eraser_enable_ctl_set),
+
SOC_ENUM_EXT("Audio Capture Mic Source", audio_capture_mic_source_enum,
audio_capture_mic_source_get, audio_capture_mic_source_set),
@@ -1691,6 +1728,7 @@ static struct snd_kcontrol_new snd_aoc_ctl[] = {
incall_playback_mic_channel_ctl_set),
+
/* LVM enable 1/0 for comp offload */
SOC_SINGLE_EXT("LVM Enable", SND_SOC_NOPM, 0, 1, 0,
lvm_enable_ctl_get, lvm_enable_ctl_set),
diff --git a/alsa/aoc_alsa_hw.c b/alsa/aoc_alsa_hw.c
index b8a4c0d..ab86cdc 100755
--- a/alsa/aoc_alsa_hw.c
+++ b/alsa/aoc_alsa_hw.c
@@ -351,6 +351,9 @@ int aoc_audio_capture_mic_prepare(struct aoc_chip *chip)
case BT_MIC:
mic_input_source = AP_INPUT_PROCESSOR_BT_INPUT_INDEX;
break;
+ case ERASER:
+ mic_input_source = AP_INPUT_PROCESSOR_ERASER_INPUT_INDEX;
+ break;
default:
pr_err("ERR in mic input source for audio capture mic source=%d\n",
chip->audio_capture_mic_source);
@@ -1940,6 +1943,21 @@ int aoc_mic_record_gain_set(struct aoc_chip *chip, long val)
return 0;
}
+int aoc_audio_capture_eraser_enable(struct aoc_chip *chip, long enable)
+{
+ int cmd_id, err = 0;
+
+ cmd_id = (enable == 1) ? CMD_AUDIO_INPUT_MIC_RECORD_AP_ENABLE_AEC_ID :
+ CMD_AUDIO_INPUT_MIC_RECORD_AP_DISABLE_AEC_ID;
+ err = aoc_audio_control_simple_cmd(CMD_INPUT_CHANNEL, cmd_id, chip);
+ if (err < 0) {
+ pr_err("ERR:%d in aduio capture eraser %s\n", err, (enable) ? "enable" : "disable");
+ return err;
+ }
+
+ return 0;
+}
+
int aoc_lvm_enable_get(struct aoc_chip *chip, long *enable)
{
int err;
diff --git a/alsa/aoc_alsa_path.c b/alsa/aoc_alsa_path.c
index 5eae282..da32a1c 100644
--- a/alsa/aoc_alsa_path.c
+++ b/alsa/aoc_alsa_path.c
@@ -672,6 +672,21 @@ static struct snd_soc_dai_driver aoc_dai_drv[] = {
},
{
+ .capture = {
+ .stream_name = "ERASER_TX Capture",
+ .rates = SNDRV_PCM_RATE_8000_48000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_S24_LE |
+ SNDRV_PCM_FMTBIT_S32_LE,
+ .channels_min = 1,
+ .channels_max = 4,
+ },
+ .ops = &be_dai_ops,
+ .name = "ERASER_TX",
+ .id = ERASER_TX,
+ },
+
+ {
.playback = {
.stream_name = "BT_RX Playback",
.rates = SNDRV_PCM_RATE_8000_48000,
@@ -836,6 +851,7 @@ static int be_prepare(struct snd_pcm_substream *stream, struct snd_soc_dai *dai)
mutex_lock(&path_mutex);
switch (dai->id) {
case INTERNAL_MIC_TX:
+ case ERASER_TX:
case BT_TX:
case USB_TX:
mutex_lock(&chip->audio_mutex);
@@ -871,6 +887,7 @@ static void be_shutdown(struct snd_pcm_substream *stream,
mutex_lock(&path_mutex);
switch (dai->id) {
case INTERNAL_MIC_TX:
+ case ERASER_TX:
case BT_TX:
case USB_TX:
mutex_lock(&chip->audio_mutex);
@@ -1501,6 +1518,8 @@ const struct snd_kcontrol_new ep1_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, ep1_tx_get, ep1_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
ep1_tx_get, ep1_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ ep1_tx_get, ep1_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, ep1_tx_get, ep1_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, ep1_tx_get, ep1_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, ep1_tx_get, ep1_tx_put),
@@ -1535,6 +1554,8 @@ const struct snd_kcontrol_new ep2_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, ep2_tx_get, ep2_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
ep2_tx_get, ep2_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ ep2_tx_get, ep2_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, ep2_tx_get, ep2_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, ep2_tx_get, ep2_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, ep2_tx_get, ep2_tx_put),
@@ -1569,6 +1590,8 @@ const struct snd_kcontrol_new ep3_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, ep3_tx_get, ep3_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
ep3_tx_get, ep3_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ ep3_tx_get, ep3_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, ep3_tx_get, ep3_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, ep3_tx_get, ep3_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, ep3_tx_get, ep3_tx_put),
@@ -1603,6 +1626,8 @@ const struct snd_kcontrol_new ep4_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, ep4_tx_get, ep4_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
ep4_tx_get, ep4_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ ep4_tx_get, ep4_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, ep4_tx_get, ep4_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, ep4_tx_get, ep4_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, ep4_tx_get, ep4_tx_put),
@@ -1637,6 +1662,8 @@ const struct snd_kcontrol_new ep5_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, ep5_tx_get, ep5_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
ep5_tx_get, ep5_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ ep5_tx_get, ep5_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, ep5_tx_get, ep5_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, ep5_tx_get, ep5_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, ep5_tx_get, ep5_tx_put),
@@ -1671,6 +1698,8 @@ const struct snd_kcontrol_new ep6_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, ep6_tx_get, ep6_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
ep6_tx_get, ep6_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ ep6_tx_get, ep6_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, ep6_tx_get, ep6_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, ep6_tx_get, ep6_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, ep6_tx_get, ep6_tx_put),
@@ -1704,6 +1733,8 @@ const struct snd_kcontrol_new voip_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, voip_tx_get, voip_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
voip_tx_get, voip_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ voip_tx_get, voip_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, voip_tx_get, voip_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, voip_tx_get, voip_tx_put),
};
@@ -1736,6 +1767,8 @@ const struct snd_kcontrol_new nohost1_tx_ctrl[] = {
SOC_SINGLE_EXT("TDM_1_TX", SND_SOC_NOPM, TDM_1_TX, 1, 0, nohost1_tx_get, nohost1_tx_put),
SOC_SINGLE_EXT("INTERNAL_MIC_TX", SND_SOC_NOPM, INTERNAL_MIC_TX, 1, 0,
nohost1_tx_get, nohost1_tx_put),
+ SOC_SINGLE_EXT("ERASER_TX", SND_SOC_NOPM, ERASER_TX, 1, 0,
+ nohost1_tx_get, nohost1_tx_put),
SOC_SINGLE_EXT("BT_TX", SND_SOC_NOPM, BT_TX, 1, 0, nohost1_tx_get, nohost1_tx_put),
SOC_SINGLE_EXT("USB_TX", SND_SOC_NOPM, USB_TX, 1, 0, nohost1_tx_get, nohost1_tx_put),
SOC_SINGLE_EXT("INCALL_TX", SND_SOC_NOPM, INCALL_TX, 1, 0, nohost1_tx_get, nohost1_tx_put),
@@ -1794,6 +1827,8 @@ const struct snd_soc_dapm_widget aoc_widget[] = {
SND_SOC_DAPM_AIF_IN("TDM_1_TX", "TDM_1_TX", 0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("INTERNAL_MIC_TX", "INTERNAL_MIC_TX",
0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("ERASER_TX", "ERASER_TX",
+ 0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("BT_TX", "BT_TX", 0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("USB_TX", "USB_TX", 0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_IN("INCALL_TX", "INCALL_TX", 0, SND_SOC_NOPM, 0, 0),
@@ -1976,6 +2011,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "EP1 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "EP1 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "EP1 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "EP1 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "EP1 TX Mixer", "BT_TX", "BT_TX" },
{ "EP1 TX Mixer", "USB_TX", "USB_TX" },
{ "EP1 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -1987,6 +2023,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "EP2 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "EP2 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "EP2 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "EP2 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "EP2 TX Mixer", "BT_TX", "BT_TX" },
{ "EP2 TX Mixer", "USB_TX", "USB_TX" },
{ "EP2 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -1998,6 +2035,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "EP3 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "EP3 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "EP3 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "EP3 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "EP3 TX Mixer", "BT_TX", "BT_TX" },
{ "EP3 TX Mixer", "USB_TX", "USB_TX" },
{ "EP3 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -2009,6 +2047,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "EP4 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "EP4 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "EP4 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "EP4 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "EP4 TX Mixer", "BT_TX", "BT_TX" },
{ "EP4 TX Mixer", "USB_TX", "USB_TX" },
{ "EP4 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -2020,6 +2059,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "EP5 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "EP5 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "EP5 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "EP5 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "EP5 TX Mixer", "BT_TX", "BT_TX" },
{ "EP5 TX Mixer", "USB_TX", "USB_TX" },
{ "EP5 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -2031,6 +2071,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "EP6 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "EP6 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "EP6 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "EP6 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "EP6 TX Mixer", "BT_TX", "BT_TX" },
{ "EP6 TX Mixer", "USB_TX", "USB_TX" },
{ "EP6 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -2042,6 +2083,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "VOIP TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "VOIP TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "VOIP TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "VOIP TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "VOIP TX Mixer", "BT_TX", "BT_TX" },
{ "VOIP TX Mixer", "USB_TX", "USB_TX" },
@@ -2052,6 +2094,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "NoHost1 TX Mixer", "TDM_0_TX", "TDM_0_TX" },
{ "NoHost1 TX Mixer", "TDM_1_TX", "TDM_1_TX" },
{ "NoHost1 TX Mixer", "INTERNAL_MIC_TX", "INTERNAL_MIC_TX" },
+ { "NoHost1 TX Mixer", "ERASER_TX", "ERASER_TX" },
{ "NoHost1 TX Mixer", "BT_TX", "BT_TX" },
{ "NoHost1 TX Mixer", "USB_TX", "USB_TX" },
{ "NoHost1 TX Mixer", "INCALL_TX", "INCALL_TX" },
@@ -2062,6 +2105,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "I2S_1_TX", NULL, "HW_SOURCE" },
{ "I2S_2_TX", NULL, "HW_SOURCE" },
{ "INTERNAL_MIC_TX", NULL, "HW_SOURCE" },
+ { "ERASER_TX", NULL, "HW_SOURCE" },
{ "BT_TX", NULL, "HW_SOURCE" },
{ "USB_TX", NULL, "HW_SOURCE" },
{ "INCALL_TX", NULL, "HW_SOURCE" },
@@ -2085,6 +2129,7 @@ static const struct snd_soc_dapm_route aoc_routes[] = {
{ "TDM_0_TX", NULL, "TDM_0_TX Capture" },
{ "TDM_1_TX", NULL, "TDM_1_TX Capture" },
{ "INTERNAL_MIC_TX", NULL, "INTERNAL_MIC_TX Capture" },
+ { "ERASER_TX", NULL, "ERASER_TX Capture" },
{ "BT_TX", NULL, "BT_TX Capture" },
{ "USB_TX", NULL, "USB_TX Capture" },
{ "INCALL_TX", NULL, "INCALL_TX Capture" },
diff --git a/alsa/google-aoc-enum.h b/alsa/google-aoc-enum.h
index 7618100..3b043ba 100644
--- a/alsa/google-aoc-enum.h
+++ b/alsa/google-aoc-enum.h
@@ -45,6 +45,7 @@ enum {
PORT_INCALL_RX,
PORT_INCALL_TX,
PORT_HAPTIC_RX,
+ PORT_ERASER_TX,
PORT_MAX,
};
@@ -95,6 +96,8 @@ enum {
#define USB_RX (AOC_BE|AOC_RX|PORT_USB_RX)
#define USB_TX (AOC_BE|AOC_TX|PORT_USB_TX)
+#define ERASER_TX (AOC_BE|AOC_TX|PORT_ERASER_TX)
+
#define INCALL_RX (AOC_BE|AOC_RX|PORT_INCALL_RX)
#define INCALL_TX (AOC_BE|AOC_TX|PORT_INCALL_TX)