diff --git a/include/uapi/sound/compress_params.h b/include/uapi/sound/compress_params.h index 0fedc6a02b4c2e8009225331b877cedc55f48e03..25852a90bbbbc32a1f9e776c73ee6a789c9f628b 100644 --- a/include/uapi/sound/compress_params.h +++ b/include/uapi/sound/compress_params.h @@ -359,7 +359,7 @@ union snd_codec_options { /** struct snd_codec_desc - description of codec capabilities * @max_ch: Maximum number of audio channels - * @sample_rates: Sampling rates in Hz, use SNDRV_PCM_RATE_xxx for this + * @sample_rates: Sampling rates in Hz, use values like 48000 for this * @bit_rate: Indexed array containing supported bit rates * @num_bitrates: Number of valid values in bit_rate array * @rate_control: value is specified by SND_RATECONTROLMODE defines. diff --git a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c index 57150b42e0a87e27f96ba47065851360c69673ca..fbaa4bc68e4cf03e7c0f7b8abc0619d1d2a03c77 100644 --- a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +++ b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c @@ -88,6 +88,10 @@ struct msm_compr_gapless_state { bool use_dsp_gapless_mode; }; +static unsigned int supported_sample_rates[] = { + 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 +}; + struct msm_compr_pdata { atomic_t audio_ocmem_req; struct snd_compr_stream *cstream[MSM_FRONTEND_DAI_MAX]; @@ -909,46 +913,16 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, struct snd_compr_runtime *runtime = cstream->runtime; struct msm_compr_audio *prtd = runtime->private_data; int ret = 0, frame_sz = 0, delay_time_ms = 0; + int i, num_rates; pr_debug("%s\n", __func__); - memcpy(&prtd->codec_param, params, sizeof(struct snd_compr_params)); - - /* ToDo: remove duplicates */ - prtd->num_channels = prtd->codec_param.codec.ch_in; - - switch (prtd->codec_param.codec.sample_rate) { - case SNDRV_PCM_RATE_8000: - prtd->sample_rate = 8000; - break; - case SNDRV_PCM_RATE_11025: - prtd->sample_rate = 11025; - break; - /* ToDo: What about 12K and 24K sample rates ? */ - case SNDRV_PCM_RATE_16000: - prtd->sample_rate = 16000; - break; - case SNDRV_PCM_RATE_22050: - prtd->sample_rate = 22050; - break; - case SNDRV_PCM_RATE_32000: - prtd->sample_rate = 32000; - break; - case SNDRV_PCM_RATE_44100: - prtd->sample_rate = 44100; - break; - case SNDRV_PCM_RATE_48000: - prtd->sample_rate = 48000; - break; - case SNDRV_PCM_RATE_96000: - prtd->sample_rate = 96000; - break; - case SNDRV_PCM_RATE_192000: - prtd->sample_rate = 192000; - break; - } - - pr_debug("%s: sample_rate %d\n", __func__, prtd->sample_rate); + num_rates = sizeof(supported_sample_rates)/sizeof(unsigned int); + for (i = 0; i < num_rates; i++) + if (params->codec.sample_rate == supported_sample_rates[i]) + break; + if (i == num_rates) + return -EINVAL; prtd->compr_passthr = prtd->codec_param.codec.compr_passthr; pr_debug("%s: compr_passthr = %d", __func__, prtd->compr_passthr); @@ -1027,6 +1001,12 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, delay_time_ms - PARTIAL_DRAIN_ACK_EARLY_BY_MSEC : 0; prtd->partial_drain_delay = delay_time_ms; + memcpy(&prtd->codec_param, params, sizeof(struct snd_compr_params)); + + /* ToDo: remove duplicates */ + prtd->num_channels = prtd->codec_param.codec.ch_in; + prtd->sample_rate = prtd->codec_param.codec.sample_rate; + pr_debug("%s: sample_rate %d\n", __func__, prtd->sample_rate); ret = msm_compr_configure_dsp(cstream); return ret; @@ -1690,6 +1670,7 @@ static int msm_compr_get_codec_caps(struct snd_compr_stream *cstream, case SND_AUDIOCODEC_MP3: codec->num_descriptors = 2; codec->descriptor[0].max_ch = 2; + /* FIXME sample_rates in Hz */ codec->descriptor[0].sample_rates = SNDRV_PCM_RATE_8000_48000; codec->descriptor[0].bit_rate[0] = 320; /* 320kbps */ codec->descriptor[0].bit_rate[1] = 128; @@ -1701,6 +1682,7 @@ static int msm_compr_get_codec_caps(struct snd_compr_stream *cstream, case SND_AUDIOCODEC_AAC: codec->num_descriptors = 2; codec->descriptor[1].max_ch = 2; + /* FIXME sample_rates in Hz */ codec->descriptor[1].sample_rates = SNDRV_PCM_RATE_8000_48000; codec->descriptor[1].bit_rate[0] = 320; /* 320kbps */ codec->descriptor[1].bit_rate[1] = 128;