diff options
author | Tzung-Bi Shih <tzungbi@chromium.org> | 2019-06-29 07:25:46 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-19 07:59:11 +0000 |
commit | 8fe3e6a850f06b499cc60834a925736ce95171d9 (patch) | |
tree | fdecb38045e7e18336e678d2614f7b649bcda733 /chip | |
parent | e0d9bb6fdef6fe87dac52ea7f26281f8d3239a7a (diff) | |
download | chrome-ec-8fe3e6a850f06b499cc60834a925736ce95171d9.tar.gz |
chip/mt_scp: support software gain
Multiply the audio data by a gain value. Note that it get muted when
gain is 0.
BRANCH=none
BUG=b:122027734, b:123268236
TEST=1. define CONFIG_AUDIO_CODEC in board.h
2. define CONFIG_AUDIO_CODEC_DMIC in board.h
3. define CONFIG_AUDIO_CODEC_DMIC_SOFTWARE_GAIN in board.h
4. define CONFIG_AUDIO_CODEC_DMIC_MAX_SOFTWARE_GAIN in board.h
5. define CONFIG_AUDIO_CODEC_WOV in board.h
6. make BOARD=kukui_scp -j
Change-Id: I8c308ffb6d7c8f5bd378524bdffc980d7b9948fa
Signed-off-by: Tzung-Bi Shih <tzungbi@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1683028
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/mt_scp/audio_codec_wov.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/chip/mt_scp/audio_codec_wov.c b/chip/mt_scp/audio_codec_wov.c index bff8f776b7..0a4684f909 100644 --- a/chip/mt_scp/audio_codec_wov.c +++ b/chip/mt_scp/audio_codec_wov.c @@ -69,11 +69,20 @@ static size_t wov_fifo_level(void) int32_t audio_codec_wov_read(void *buf, uint32_t count) { int16_t *out = buf; + uint8_t gain = 1; + + if (IS_ENABLED(CONFIG_AUDIO_CODEC_DMIC_SOFTWARE_GAIN)) + audio_codec_dmic_get_gain_idx(0, &gain); count >>= 1; - while (count-- && wov_fifo_level()) - *out++ = SCP_VIF_FIFO_DATA; + while (count-- && wov_fifo_level()) { + if (IS_ENABLED(CONFIG_AUDIO_CODEC_DMIC_SOFTWARE_GAIN)) + *out++ = audio_codec_s16_scale_and_clip( + SCP_VIF_FIFO_DATA, gain); + else + *out++ = SCP_VIF_FIFO_DATA; + } return (void *)out - buf; } |