ASoc: msm: Enable support for 32 bit format and 384Khz
Add support for 32 bit data format (SNDRV_PCM_FORMAT_S32_LE) and sampling rate of 384Khz. Also update platform drivers to use latest version of pcm media format command ASM_MEDIA_FMT_MULTI_CHANNEL_PCM_V4. Change-Id: I6b7ea860a398a7e4dd5f7e23ac3906ff0c6f2b3e Signed-off-by: Ashish Jain <ashishj@codeaurora.org>
This commit is contained in:
parent
5a60bc56b0
commit
eb6adca118
5 changed files with 98 additions and 48 deletions
|
@ -96,7 +96,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -108,8 +109,9 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
.rates = (SNDRV_PCM_RATE_8000_384000|
|
||||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE|
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.rate_min = 8000,
|
||||
|
@ -127,7 +129,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -140,7 +143,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -210,7 +214,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 6,
|
||||
.rate_min = 8000,
|
||||
|
@ -222,7 +227,9 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
.rates = (SNDRV_PCM_RATE_8000_384000|
|
||||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE),
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -240,7 +247,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -259,7 +267,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -271,8 +280,9 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
.rates = (SNDRV_PCM_RATE_8000_48000|
|
||||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE|
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -290,7 +300,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -303,7 +314,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -321,7 +333,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -340,7 +353,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -353,7 +367,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2220,7 +2235,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2239,7 +2255,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2258,7 +2275,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2277,7 +2295,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2296,7 +2315,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2315,7 +2335,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
@ -2334,7 +2355,8 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
|
|||
SNDRV_PCM_RATE_KNOT),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_min = 8000,
|
||||
|
|
|
@ -709,6 +709,10 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
|
|||
}
|
||||
|
||||
switch (prtd->codec_param.codec.format) {
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
bit_width = 32;
|
||||
sample_word_size = 32;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
bit_width = 24;
|
||||
sample_word_size = 32;
|
||||
|
@ -723,14 +727,16 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
|
|||
sample_word_size = 16;
|
||||
break;
|
||||
}
|
||||
ret = q6asm_media_format_block_pcm_format_support_v3(
|
||||
ret = q6asm_media_format_block_pcm_format_support_v4(
|
||||
prtd->audio_client,
|
||||
prtd->sample_rate,
|
||||
prtd->num_channels,
|
||||
bit_width, stream_id,
|
||||
use_default_chmap,
|
||||
chmap,
|
||||
sample_word_size);
|
||||
sample_word_size,
|
||||
ASM_LITTLE_ENDIAN,
|
||||
DEFAULT_QF);
|
||||
if (ret < 0)
|
||||
pr_err("%s: CMD Format block failed\n", __func__);
|
||||
|
||||
|
@ -1010,7 +1016,7 @@ static int msm_compr_configure_dsp(struct snd_compr_stream *cstream)
|
|||
} else {
|
||||
pr_debug("%s: stream_id %d bits_per_sample %d\n",
|
||||
__func__, ac->stream_id, bits_per_sample);
|
||||
ret = q6asm_stream_open_write_v3(ac,
|
||||
ret = q6asm_stream_open_write_v4(ac,
|
||||
prtd->codec, bits_per_sample,
|
||||
ac->stream_id,
|
||||
prtd->gapless_state.use_dsp_gapless_mode);
|
||||
|
@ -1942,7 +1948,7 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd)
|
|||
|
||||
pr_debug("%s: open_write stream_id %d bits_per_sample %d",
|
||||
__func__, stream_id, bits_per_sample);
|
||||
rc = q6asm_stream_open_write_v3(prtd->audio_client,
|
||||
rc = q6asm_stream_open_write_v4(prtd->audio_client,
|
||||
prtd->codec, bits_per_sample,
|
||||
stream_id,
|
||||
prtd->gapless_state.use_dsp_gapless_mode);
|
||||
|
|
|
@ -1607,8 +1607,13 @@ static int msm_dai_q6_usb_audio_hw_params(struct snd_pcm_hw_params *params,
|
|||
dai_data->port_config.usb_audio.bit_width = 16;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
case SNDRV_PCM_FORMAT_S24_3LE:
|
||||
dai_data->port_config.usb_audio.bit_width = 24;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
dai_data->port_config.usb_audio.bit_width = 32;
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(dai->dev, "%s: invalid format %d\n",
|
||||
__func__, params_format(params));
|
||||
|
@ -2570,11 +2575,12 @@ static struct snd_soc_dai_driver msm_dai_q6_usb_rx_dai = {
|
|||
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
|
||||
SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
|
||||
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
|
||||
SNDRV_PCM_RATE_192000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_384000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE,
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_max = 192000,
|
||||
.rate_max = 384000,
|
||||
.rate_min = 8000,
|
||||
},
|
||||
.ops = &msm_dai_q6_ops,
|
||||
|
@ -2591,11 +2597,12 @@ static struct snd_soc_dai_driver msm_dai_q6_usb_tx_dai = {
|
|||
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
|
||||
SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
|
||||
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
|
||||
SNDRV_PCM_RATE_192000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_384000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE,
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.rate_max = 192000,
|
||||
.rate_max = 384000,
|
||||
.rate_min = 8000,
|
||||
},
|
||||
.ops = &msm_dai_q6_ops,
|
||||
|
|
|
@ -67,10 +67,11 @@ static struct snd_pcm_hardware msm_pcm_hardware_capture = {
|
|||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.rates = SNDRV_PCM_RATE_8000_48000,
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.rates = SNDRV_PCM_RATE_8000_384000,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
.rate_max = 384000,
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.buffer_bytes_max = CAPTURE_MAX_NUM_PERIODS *
|
||||
|
@ -90,10 +91,11 @@ static struct snd_pcm_hardware msm_pcm_hardware_playback = {
|
|||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_3LE),
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
SNDRV_PCM_FMTBIT_S24_3LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE),
|
||||
.rates = SNDRV_PCM_RATE_8000_384000,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 192000,
|
||||
.rate_max = 384000,
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
.buffer_bytes_max = PLAYBACK_MAX_NUM_PERIODS *
|
||||
|
@ -108,7 +110,7 @@ static struct snd_pcm_hardware msm_pcm_hardware_playback = {
|
|||
/* Conventional and unconventional sample rate supported */
|
||||
static unsigned int supported_sample_rates[] = {
|
||||
8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000,
|
||||
88200, 96000, 176400, 192000
|
||||
88200, 96000, 176400, 192000, 384000
|
||||
};
|
||||
|
||||
static struct snd_pcm_hw_constraint_list constraints_sample_rates = {
|
||||
|
@ -313,6 +315,10 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
|
|||
pr_debug("%s: perf: %x\n", __func__, pdata->perf_mode);
|
||||
|
||||
switch (params_format(params)) {
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
bits_per_sample = 32;
|
||||
sample_word_size = 32;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
bits_per_sample = 24;
|
||||
sample_word_size = 32;
|
||||
|
@ -328,7 +334,7 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
|
|||
break;
|
||||
}
|
||||
|
||||
ret = q6asm_open_write_v3(prtd->audio_client,
|
||||
ret = q6asm_open_write_v4(prtd->audio_client,
|
||||
FORMAT_LINEAR_PCM, bits_per_sample);
|
||||
|
||||
if (ret < 0) {
|
||||
|
@ -353,11 +359,12 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = q6asm_media_format_block_multi_ch_pcm_v3(
|
||||
ret = q6asm_media_format_block_multi_ch_pcm_v4(
|
||||
prtd->audio_client, runtime->rate,
|
||||
runtime->channels, !prtd->set_channel_map,
|
||||
prtd->channel_map, bits_per_sample,
|
||||
sample_word_size);
|
||||
sample_word_size, ASM_LITTLE_ENDIAN,
|
||||
DEFAULT_QF);
|
||||
if (ret < 0)
|
||||
pr_info("%s: CMD Format block failed\n", __func__);
|
||||
|
||||
|
@ -402,6 +409,8 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
|
|||
if ((params_format(params) == SNDRV_PCM_FORMAT_S24_LE) ||
|
||||
(params_format(params) == SNDRV_PCM_FORMAT_S24_3LE))
|
||||
bits_per_sample = 24;
|
||||
else if (params_format(params) == SNDRV_PCM_FORMAT_S32_LE)
|
||||
bits_per_sample = 32;
|
||||
|
||||
/* ULL mode is not supported in capture path */
|
||||
if (pdata->perf_mode == LEGACY_PCM_MODE)
|
||||
|
@ -413,7 +422,7 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
|
|||
__func__, params_channels(params),
|
||||
prtd->audio_client->perf_mode);
|
||||
|
||||
ret = q6asm_open_read_v3(prtd->audio_client, FORMAT_LINEAR_PCM,
|
||||
ret = q6asm_open_read_v4(prtd->audio_client, FORMAT_LINEAR_PCM,
|
||||
bits_per_sample);
|
||||
if (ret < 0) {
|
||||
pr_err("%s: q6asm_open_read failed\n", __func__);
|
||||
|
@ -459,6 +468,10 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
|
|||
return 0;
|
||||
|
||||
switch (runtime->format) {
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
bits_per_sample = 32;
|
||||
sample_word_size = 32;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
bits_per_sample = 24;
|
||||
sample_word_size = 32;
|
||||
|
@ -477,11 +490,13 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
|
|||
pr_debug("%s: Samp_rate = %d Channel = %d bit width = %d, word size = %d\n",
|
||||
__func__, prtd->samp_rate, prtd->channel_mode,
|
||||
bits_per_sample, sample_word_size);
|
||||
ret = q6asm_enc_cfg_blk_pcm_format_support_v3(prtd->audio_client,
|
||||
ret = q6asm_enc_cfg_blk_pcm_format_support_v4(prtd->audio_client,
|
||||
prtd->samp_rate,
|
||||
prtd->channel_mode,
|
||||
bits_per_sample,
|
||||
sample_word_size);
|
||||
sample_word_size,
|
||||
ASM_LITTLE_ENDIAN,
|
||||
DEFAULT_QF);
|
||||
if (ret < 0)
|
||||
pr_debug("%s: cmd cfg pcm was block failed", __func__);
|
||||
|
||||
|
|
|
@ -59,11 +59,11 @@ struct msm_audio_in_frame_info {
|
|||
|
||||
#define PLAYBACK_MIN_NUM_PERIODS 2
|
||||
#define PLAYBACK_MAX_NUM_PERIODS 8
|
||||
#define PLAYBACK_MAX_PERIOD_SIZE 12288
|
||||
#define PLAYBACK_MAX_PERIOD_SIZE 122880
|
||||
#define PLAYBACK_MIN_PERIOD_SIZE 128
|
||||
#define CAPTURE_MIN_NUM_PERIODS 2
|
||||
#define CAPTURE_MAX_NUM_PERIODS 8
|
||||
#define CAPTURE_MAX_PERIOD_SIZE 61440
|
||||
#define CAPTURE_MAX_PERIOD_SIZE 122880
|
||||
#define CAPTURE_MIN_PERIOD_SIZE 320
|
||||
|
||||
struct msm_audio {
|
||||
|
|
Loading…
Add table
Reference in a new issue