diff options
author | Shiv Maliyappanahalli <smaliyap@codeaurora.org> | 2016-01-27 11:04:18 -0800 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:20:19 -0700 |
commit | 9fcf4e06a0728ee3b91d9b03ef36d992be923946 (patch) | |
tree | 17105abb9bdad2cd411a710f54871611ceb5ea11 /sound/soc/msm | |
parent | 9dcf463e78600fae8572c243be02b6440a3646a7 (diff) |
ASoC: msm: qdsp6v2: Add 32/48KHz sample rate to VoIP driver
Add 32/48KHz sample rate capability to the VoIP driver to
allow VoIP application which uses 32KHz/48KHz sample
rate to take Voice path.
Change-Id: I654b97ffc36b993114899e85706914d99ef44abc
Signed-off-by: Shiv Maliyappanahalli <smaliyap@codeaurora.org>
Diffstat (limited to 'sound/soc/msm')
-rw-r--r-- | sound/soc/msm/qdsp6v2/msm-pcm-voip-v2.c | 34 | ||||
-rw-r--r-- | sound/soc/msm/qdsp6v2/q6voice.c | 4 | ||||
-rw-r--r-- | sound/soc/msm/qdsp6v2/q6voice.h | 20 |
3 files changed, 31 insertions, 27 deletions
diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-voip-v2.c b/sound/soc/msm/qdsp6v2/msm-pcm-voip-v2.c index b2274c3f01e9..65c24973036e 100644 --- a/sound/soc/msm/qdsp6v2/msm-pcm-voip-v2.c +++ b/sound/soc/msm/qdsp6v2/msm-pcm-voip-v2.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2016, 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 @@ -199,9 +199,10 @@ static struct snd_pcm_hardware msm_pcm_hardware = { SNDRV_PCM_INFO_INTERLEAVED), .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_SPECIAL, - .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000, + .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | + SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000, .rate_min = 8000, - .rate_max = 16000, + .rate_max = 48000, .channels_min = 1, .channels_max = 1, .buffer_bytes_max = sizeof(struct voip_buf_node) * VOIP_MAX_Q_LEN, @@ -316,7 +317,7 @@ static int msm_pcm_voip_probe(struct snd_soc_platform *platform) } /* sample rate supported */ -static unsigned int supported_sample_rates[] = {8000, 16000}; +static unsigned int supported_sample_rates[] = {8000, 16000, 32000, 48000}; static void voip_ssr_cb_fn(uint32_t opcode, void *private_data) { @@ -1142,21 +1143,16 @@ static int voip_config_vocoder(struct snd_pcm_substream *substream) } pr_debug("%s(): media_type=%d\n", __func__, media_type); - if ((prtd->play_samp_rate == 8000) && - (prtd->cap_samp_rate == 8000)) + if ((prtd->play_samp_rate == 8000 && prtd->cap_samp_rate == 8000) || + (prtd->play_samp_rate == 16000 && prtd->cap_samp_rate == 16000) || + (prtd->play_samp_rate == 32000 && prtd->cap_samp_rate == 32000) || + (prtd->play_samp_rate == 48000 && prtd->cap_samp_rate == 48000)) { voc_config_vocoder(media_type, rate_type, - VSS_NETWORK_ID_VOIP_NB, + VSS_NETWORK_ID_VOIP, voip_info.dtx_mode, evrc_min_rate_type, evrc_max_rate_type); - else if ((prtd->play_samp_rate == 16000) && - (prtd->cap_samp_rate == 16000)) - voc_config_vocoder(media_type, rate_type, - VSS_NETWORK_ID_VOIP_WB, - voip_info.dtx_mode, - evrc_min_rate_type, - evrc_max_rate_type); - else { + } else { pr_debug("%s: Invalid rate playback %d, capture %d\n", __func__, prtd->play_samp_rate, prtd->cap_samp_rate); @@ -1550,9 +1546,13 @@ static int voip_get_media_type(uint32_t mode, uint32_t rate_type, break; case MODE_PCM: if (samp_rate == 8000) - *media_type = VSS_MEDIA_ID_PCM_NB; + *media_type = VSS_MEDIA_ID_PCM_8_KHZ; + else if (samp_rate == 16000) + *media_type = VSS_MEDIA_ID_PCM_16_KHZ; + else if (samp_rate == 32000) + *media_type = VSS_MEDIA_ID_PCM_32_KHZ; else - *media_type = VSS_MEDIA_ID_PCM_WB; + *media_type = VSS_MEDIA_ID_PCM_48_KHZ; break; case MODE_IS127: /* EVRC-A */ *media_type = VSS_MEDIA_ID_EVRC_MODEM; diff --git a/sound/soc/msm/qdsp6v2/q6voice.c b/sound/soc/msm/qdsp6v2/q6voice.c index 767a57307a92..a008c696d256 100644 --- a/sound/soc/msm/qdsp6v2/q6voice.c +++ b/sound/soc/msm/qdsp6v2/q6voice.c @@ -4203,7 +4203,7 @@ static int voice_send_netid_timing_cmd(struct voice_data *v) goto fail; } /* Set network ID. */ - pr_debug("Setting network ID\n"); + pr_debug("Setting network ID %x\n", common.mvs_info.network_type); mvm_set_network.hdr.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD, APR_HDR_LEN(APR_HDR_SIZE), @@ -4214,7 +4214,7 @@ static int voice_send_netid_timing_cmd(struct voice_data *v) voice_get_idx_for_session(v->session_id); mvm_set_network.hdr.dest_port = mvm_handle; mvm_set_network.hdr.token = 0; - mvm_set_network.hdr.opcode = VSS_ICOMMON_CMD_SET_NETWORK; + mvm_set_network.hdr.opcode = VSS_IMVM_CMD_SET_CAL_NETWORK; mvm_set_network.network.network_id = common.mvs_info.network_type; v->mvm_state = CMD_STATUS_FAIL; diff --git a/sound/soc/msm/qdsp6v2/q6voice.h b/sound/soc/msm/qdsp6v2/q6voice.h index bfafeb38b867..f6349be64942 100644 --- a/sound/soc/msm/qdsp6v2/q6voice.h +++ b/sound/soc/msm/qdsp6v2/q6voice.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2016, 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 @@ -1025,12 +1025,12 @@ struct vss_istream_cmd_set_packet_exchange_mode_t { #define VSS_IVOCPROC_VOCPROC_MODE_EC_EXT_MIXING 0x00010F7D /* Default AFE port ID. Applicable to Tx and Rx. */ -#define VSS_IVOCPROC_PORT_ID_NONE 0xFFFF +#define VSS_IVOCPROC_PORT_ID_NONE 0xFFFF -#define VSS_NETWORK_ID_DEFAULT 0x00010037 -#define VSS_NETWORK_ID_VOIP_NB 0x00011240 -#define VSS_NETWORK_ID_VOIP_WB 0x00011241 -#define VSS_NETWORK_ID_VOIP_WV 0x00011242 +#define VSS_NETWORK_ID_DEFAULT 0x00010037 + +/* Voice over Internet Protocol (VoIP) network ID. Common for all bands.*/ +#define VSS_NETWORK_ID_VOIP 0x00011362 /* Media types */ #define VSS_MEDIA_ID_EVRC_MODEM 0x00010FC2 @@ -1039,8 +1039,12 @@ struct vss_istream_cmd_set_packet_exchange_mode_t { /* 80-VF690-47 UMTS AMR-NB vocoder modem format. */ #define VSS_MEDIA_ID_AMR_WB_MODEM 0x00010FC7 /* 80-VF690-47 UMTS AMR-WB vocoder modem format. */ -#define VSS_MEDIA_ID_PCM_NB 0x00010FCB -#define VSS_MEDIA_ID_PCM_WB 0x00010FCC + +#define VSS_MEDIA_ID_PCM_8_KHZ 0x00010FCB +#define VSS_MEDIA_ID_PCM_16_KHZ 0x00010FCC +#define VSS_MEDIA_ID_PCM_32_KHZ 0x00010FD9 +#define VSS_MEDIA_ID_PCM_48_KHZ 0x00010FD6 + /* Linear PCM (16-bit, little-endian). */ #define VSS_MEDIA_ID_G711_ALAW 0x00010FCD /* G.711 a-law (contains two 10ms vocoder frames). */ |