summaryrefslogtreecommitdiff
path: root/sound/soc/msm
diff options
context:
space:
mode:
authorShiv Maliyappanahalli <smaliyap@codeaurora.org>2016-01-27 11:04:18 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:20:19 -0700
commit9fcf4e06a0728ee3b91d9b03ef36d992be923946 (patch)
tree17105abb9bdad2cd411a710f54871611ceb5ea11 /sound/soc/msm
parent9dcf463e78600fae8572c243be02b6440a3646a7 (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.c34
-rw-r--r--sound/soc/msm/qdsp6v2/q6voice.c4
-rw-r--r--sound/soc/msm/qdsp6v2/q6voice.h20
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). */