diff options
| author | Xiaoyu Ye <benyxy@codeaurora.org> | 2016-12-22 15:00:43 -0800 |
|---|---|---|
| committer | Xiaoyu Ye <benyxy@codeaurora.org> | 2017-01-10 14:36:02 -0800 |
| commit | 80ad11d0cda1a3f20a757364d12a0154641d714f (patch) | |
| tree | bab088616c82943a5ea8c0970be436f4da164af6 | |
| parent | 0a8e939a4e57d86da88c9856cd266447fc45ea85 (diff) | |
ASoC: msm8998: Add codec check for SLIMBUS configuration in msm_audrx_init
Codec check is added to distinguish between Tavil and other codecs
before SLIMBUS configuration. It prevents a possible buffer overflow
in SLIMBUS configuration.
CRs-Fixed: 1104194
Change-Id: Ib4e5d8ec9212016064c719fdd1f3188b68bd8801
Signed-off-by: Xiaoyu Ye <benyxy@codeaurora.org>
| -rw-r--r-- | sound/soc/msm/msm8998.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/sound/soc/msm/msm8998.c b/sound/soc/msm/msm8998.c index 6396cd6aaf39..4af737680118 100644 --- a/sound/soc/msm/msm8998.c +++ b/sound/soc/msm/msm8998.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -3323,6 +3323,17 @@ static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd) 134, 135, 136, 137, 138, 139, 140, 141, 142, 143}; + /* Tavil Codec SLIMBUS configuration + * RX1, RX2, RX3, RX4, RX5, RX6, RX7, RX8 + * TX1, TX2, TX3, TX4, TX5, TX6, TX7, TX8, TX9, TX10, TX11, TX12, TX13 + * TX14, TX15, TX16 + */ + unsigned int rx_ch_tavil[WCD934X_RX_MAX] = {144, 145, 146, 147, 148, + 149, 150, 151}; + unsigned int tx_ch_tavil[WCD934X_TX_MAX] = {128, 129, 130, 131, 132, + 134, 135, 136, 137, 138, 139, + 133, 140, 141, 142, 143}; + pr_info("%s: dev_name%s\n", __func__, dev_name(cpu_dai->dev)); rtd->pmdown_time = 0; @@ -3383,8 +3394,15 @@ static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_sync(dapm); - snd_soc_dai_set_channel_map(codec_dai, ARRAY_SIZE(tx_ch), - tx_ch, ARRAY_SIZE(rx_ch), rx_ch); + if (!strcmp(dev_name(codec_dai->dev), "tavil_codec")) { + snd_soc_dai_set_channel_map(codec_dai, ARRAY_SIZE(tx_ch_tavil), + tx_ch_tavil, ARRAY_SIZE(rx_ch_tavil), + rx_ch_tavil); + } else { + snd_soc_dai_set_channel_map(codec_dai, ARRAY_SIZE(tx_ch), + tx_ch, ARRAY_SIZE(rx_ch), + rx_ch); + } if (!strcmp(dev_name(codec_dai->dev), "tavil_codec")) { msm_codec_fn.get_afe_config_fn = tavil_get_afe_config; |
