diff options
author | Xinhui Zhou <zxinhui@google.com> | 2021-09-23 14:02:30 -0700 |
---|---|---|
committer | Xinhui Zhou <zxinhui@google.com> | 2021-10-12 21:22:27 -0700 |
commit | 3bd7a04d1ae819f3d707260a4e9d2eccb052cab9 (patch) | |
tree | 4e687250554ea7668ab8006a9c1d0c53e69e1efb | |
parent | dbd0e2ffed6c4db9d1a6ef650a6c38954ea9ac29 (diff) | |
download | aoc-android-gs-raviole-5.10-android12-qpr1-d.tar.gz |
aoc/alsa: audio capture from eraserandroid-12.0.0_r0.42android-12.0.0_r0.36android-12.0.0_r0.26android-gs-raviole-5.10-android12-qpr1-d
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-x | alsa/aoc_alsa.h | 4 | ||||
-rw-r--r-- | alsa/aoc_alsa_card.c | 3 | ||||
-rwxr-xr-x | alsa/aoc_alsa_ctl.c | 40 | ||||
-rwxr-xr-x | alsa/aoc_alsa_hw.c | 18 | ||||
-rw-r--r-- | alsa/aoc_alsa_path.c | 45 | ||||
-rw-r--r-- | alsa/google-aoc-enum.h | 3 |
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) |