Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b333c41 authored by Shiv Maliyappanahalli's avatar Shiv Maliyappanahalli Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarShiv Maliyappanahalli <smaliyap@codeaurora.org>
parent 1c10389d
Loading
Loading
Loading
Loading
+17 −17
Original line number Original line Diff line number Diff line
/* 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
 * 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
 * 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),
				SNDRV_PCM_INFO_INTERLEAVED),
	.formats =              SNDRV_PCM_FMTBIT_S16_LE |
	.formats =              SNDRV_PCM_FMTBIT_S16_LE |
				SNDRV_PCM_FMTBIT_SPECIAL,
				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_min =             8000,
	.rate_max =             16000,
	.rate_max =             48000,
	.channels_min =         1,
	.channels_min =         1,
	.channels_max =         1,
	.channels_max =         1,
	.buffer_bytes_max =	sizeof(struct voip_buf_node) * VOIP_MAX_Q_LEN,
	.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 */
/* 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)
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);
	pr_debug("%s(): media_type=%d\n", __func__, media_type);


	if ((prtd->play_samp_rate == 8000) &&
	if ((prtd->play_samp_rate == 8000 && prtd->cap_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,
		voc_config_vocoder(media_type, rate_type,
				   VSS_NETWORK_ID_VOIP_NB,
				   VSS_NETWORK_ID_VOIP,
				   voip_info.dtx_mode,
				   voip_info.dtx_mode,
				   evrc_min_rate_type,
				   evrc_min_rate_type,
				   evrc_max_rate_type);
				   evrc_max_rate_type);
	else if ((prtd->play_samp_rate == 16000) &&
	} else {
		 (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 {
		pr_debug("%s: Invalid rate playback %d, capture %d\n",
		pr_debug("%s: Invalid rate playback %d, capture %d\n",
			 __func__, prtd->play_samp_rate,
			 __func__, prtd->play_samp_rate,
			 prtd->cap_samp_rate);
			 prtd->cap_samp_rate);
@@ -1550,9 +1546,13 @@ static int voip_get_media_type(uint32_t mode, uint32_t rate_type,
		break;
		break;
	case MODE_PCM:
	case MODE_PCM:
		if (samp_rate == 8000)
		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
		else
			*media_type = VSS_MEDIA_ID_PCM_WB;
			*media_type = VSS_MEDIA_ID_PCM_48_KHZ;
		break;
		break;
	case MODE_IS127: /* EVRC-A */
	case MODE_IS127: /* EVRC-A */
		*media_type = VSS_MEDIA_ID_EVRC_MODEM;
		*media_type = VSS_MEDIA_ID_EVRC_MODEM;
+2 −2
Original line number Original line Diff line number Diff line
@@ -4199,7 +4199,7 @@ static int voice_send_netid_timing_cmd(struct voice_data *v)
		goto fail;
		goto fail;
	}
	}
	/* Set network ID. */
	/* 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,
	mvm_set_network.hdr.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD,
						APR_HDR_LEN(APR_HDR_SIZE),
						APR_HDR_LEN(APR_HDR_SIZE),
@@ -4210,7 +4210,7 @@ static int voice_send_netid_timing_cmd(struct voice_data *v)
				voice_get_idx_for_session(v->session_id);
				voice_get_idx_for_session(v->session_id);
	mvm_set_network.hdr.dest_port = mvm_handle;
	mvm_set_network.hdr.dest_port = mvm_handle;
	mvm_set_network.hdr.token = 0;
	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;
	mvm_set_network.network.network_id = common.mvs_info.network_type;


	v->mvm_state = CMD_STATUS_FAIL;
	v->mvm_state = CMD_STATUS_FAIL;
+12 −8
Original line number Original line Diff line number Diff line
/* 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
 * 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
 * it under the terms of the GNU General Public License version 2 and
@@ -1029,9 +1029,9 @@ struct vss_istream_cmd_set_packet_exchange_mode_t {
#define VSS_IVOCPROC_PORT_ID_NONE		0xFFFF
#define VSS_IVOCPROC_PORT_ID_NONE		0xFFFF


#define VSS_NETWORK_ID_DEFAULT		0x00010037
#define VSS_NETWORK_ID_DEFAULT		0x00010037
#define VSS_NETWORK_ID_VOIP_NB				0x00011240

#define VSS_NETWORK_ID_VOIP_WB				0x00011241
/* Voice over Internet Protocol (VoIP) network ID. Common for all bands.*/
#define VSS_NETWORK_ID_VOIP_WV				0x00011242
#define VSS_NETWORK_ID_VOIP		0x00011362


/* Media types */
/* Media types */
#define VSS_MEDIA_ID_EVRC_MODEM		0x00010FC2
#define VSS_MEDIA_ID_EVRC_MODEM		0x00010FC2
@@ -1040,8 +1040,12 @@ struct vss_istream_cmd_set_packet_exchange_mode_t {
/* 80-VF690-47 UMTS AMR-NB vocoder modem format. */
/* 80-VF690-47 UMTS AMR-NB vocoder modem format. */
#define VSS_MEDIA_ID_AMR_WB_MODEM	0x00010FC7
#define VSS_MEDIA_ID_AMR_WB_MODEM	0x00010FC7
/* 80-VF690-47 UMTS AMR-WB vocoder modem format. */
/* 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). */
/* Linear PCM (16-bit, little-endian). */
#define VSS_MEDIA_ID_G711_ALAW		0x00010FCD
#define VSS_MEDIA_ID_G711_ALAW		0x00010FCD
/* G.711 a-law (contains two 10ms vocoder frames). */
/* G.711 a-law (contains two 10ms vocoder frames). */