diff options
author | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2019-11-14 14:45:21 +0000 |
---|---|---|
committer | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2019-11-14 14:53:10 +0000 |
commit | e63a4291a24e73946d314246cf5391a3e5a368ac (patch) | |
tree | cd4219d324b62d2e45b1ad49d2ae62f3fe375c0b | |
parent | 96cbb44c4b7d02672b7a92c727ca2676af035670 (diff) |
ASoC: qcom: q6asm-dai: add support to flac configaudio/compressed
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r-- | sound/soc/qcom/qdsp6/q6asm-dai.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sound/soc/qcom/qdsp6/q6asm-dai.c b/sound/soc/qcom/qdsp6/q6asm-dai.c index b579712aeeb57..f3537c32ec401 100644 --- a/sound/soc/qcom/qdsp6/q6asm-dai.c +++ b/sound/soc/qcom/qdsp6/q6asm-dai.c @@ -635,8 +635,13 @@ static int q6asm_dai_compr_set_params(struct snd_compr_stream *stream, struct snd_soc_component *c = snd_soc_rtdcom_lookup(rtd, DRV_NAME); int dir = stream->direction; struct q6asm_dai_data *pdata; + struct q6asm_flac_cfg flac_cfg; struct device *dev = c->dev; int ret; + union snd_codec_options *codec_options; + + codec_options = &(prtd->codec_param.codec.options); + memcpy(&prtd->codec_param, params, sizeof(*params)); @@ -673,6 +678,31 @@ static int q6asm_dai_compr_set_params(struct snd_compr_stream *stream, return ret; } + switch (params->codec.id) { + case SND_AUDIOCODEC_FLAC: + memset(&flac_cfg, 0x0, sizeof(struct q6asm_flac_cfg)); + + flac_cfg.ch_cfg = params->codec.ch_in; + flac_cfg.sample_rate = params->codec.sample_rate; + flac_cfg.stream_info_present = 1; + flac_cfg.sample_size = codec_options->flac_d.sample_size; + flac_cfg.min_blk_size = codec_options->flac_d.min_blk_size; + flac_cfg.max_blk_size = codec_options->flac_d.max_blk_size; + flac_cfg.max_frame_size = + codec_options->flac_d.max_frame_size; + flac_cfg.min_frame_size = + codec_options->flac_d.min_frame_size; + + ret = q6asm_stream_media_format_block_flac(prtd->audio_client, + &flac_cfg); + if (ret < 0) + pr_err("%s: CMD Format block failed ret %d\n", + __func__, ret); + break; + default: + break; + } + ret = q6asm_map_memory_regions(dir, prtd->audio_client, prtd->phys, (prtd->pcm_size / prtd->periods), prtd->periods); |