Merge "ASoC: msm: Add support for AVS version check"

This commit is contained in:
Linux Build Service Account 2019-06-13 16:34:54 -07:00 committed by Gerrit - the friendly Code Review server
commit c658076e45
4 changed files with 88 additions and 5 deletions

View file

@ -185,13 +185,17 @@ struct avcs_cmd_get_version_result {
#define AVCS_CMDRSP_Q6_ID_2_6 0x00040000
#define AVCS_CMDRSP_Q6_ID_2_7 0x00040001
#define AVCS_CMDRSP_Q6_ID_2_8 0x00040002
#define AVCS_CMDRSP_Q6_ID_2_9 0x00040003
enum q6_subsys_image {
Q6_SUBSYS_AVS2_6 = 1,
Q6_SUBSYS_AVS2_7,
Q6_SUBSYS_AVS2_8,
Q6_SUBSYS_AVS2_9,
Q6_SUBSYS_INVALID,
};
enum q6_subsys_image q6core_get_avs_version(void);
int core_get_adsp_ver(void);
#endif /* __Q6CORE_H__ */

View file

@ -106,6 +106,7 @@ struct msm_compr_pdata {
struct msm_compr_ch_map *ch_map[MSM_FRONTEND_DAI_MAX];
int32_t ion_fd[MSM_FRONTEND_DAI_MAX];
bool is_in_use[MSM_FRONTEND_DAI_MAX];
bool avs_ver;
};
struct msm_compr_audio {
@ -1017,7 +1018,18 @@ 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_v4(
if (pdata->avs_ver &&
(q6core_get_avs_version() == Q6_SUBSYS_AVS2_7))
ret = q6asm_media_format_block_pcm_format_support_v3(
prtd->audio_client,
prtd->sample_rate,
prtd->num_channels,
bit_width, stream_id,
use_default_chmap,
chmap,
sample_word_size);
else
ret = q6asm_media_format_block_pcm_format_support_v4(
prtd->audio_client,
prtd->sample_rate,
prtd->num_channels,
@ -1273,6 +1285,8 @@ static int msm_compr_configure_dsp_for_playback
uint16_t bits_per_sample = 16;
int dir = IN, ret = 0;
struct audio_client *ac = prtd->audio_client;
struct msm_compr_pdata *pdata =
snd_soc_platform_get_drvdata(soc_prtd->platform);
uint32_t stream_index;
struct asm_softpause_params softpause = {
.enable = SOFT_PAUSE_ENABLE,
@ -1323,7 +1337,14 @@ static int msm_compr_configure_dsp_for_playback
} else {
pr_debug("%s: stream_id %d bits_per_sample %d\n",
__func__, ac->stream_id, bits_per_sample);
ret = q6asm_stream_open_write_v4(ac,
if (pdata->avs_ver &&
(q6core_get_avs_version() == Q6_SUBSYS_AVS2_7))
ret = q6asm_stream_open_write_v3(ac,
prtd->codec, bits_per_sample,
ac->stream_id,
prtd->gapless_state.use_dsp_gapless_mode);
else
ret = q6asm_stream_open_write_v4(ac,
prtd->codec, bits_per_sample,
ac->stream_id,
prtd->gapless_state.use_dsp_gapless_mode);
@ -2639,7 +2660,14 @@ 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_v4(prtd->audio_client,
if (pdata->avs_ver &&
(q6core_get_avs_version() == Q6_SUBSYS_AVS2_7))
rc = q6asm_stream_open_write_v3(prtd->audio_client,
prtd->codec, bits_per_sample,
stream_id,
prtd->gapless_state.use_dsp_gapless_mode);
else
rc = q6asm_stream_open_write_v4(prtd->audio_client,
prtd->codec, bits_per_sample,
stream_id,
prtd->gapless_state.use_dsp_gapless_mode);
@ -4091,6 +4119,15 @@ static int msm_compr_probe(struct snd_soc_platform *platform)
pdata->use_legacy_api = false;
pr_debug("%s: use legacy api %d\n", __func__, pdata->use_legacy_api);
if (of_property_read_bool(platform->dev->of_node,
"qcom,avs-version"))
pdata->avs_ver = true;
else
pdata->avs_ver = false;
pr_debug("%s: avs_ver = %d\n", __func__, pdata->avs_ver);
/*
* use_dsp_gapless_mode part of platform data(pdata) is updated from HAL
* through a mixer control before compress driver is opened. The mixer

View file

@ -384,6 +384,17 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
prtd->audio_client = NULL;
return -ENOMEM;
}
} else if (pdata->avs_ver &&
(q6core_get_avs_version() == Q6_SUBSYS_AVS2_7)) {
ret = q6asm_open_write_v3(prtd->audio_client,
FORMAT_LINEAR_PCM, bits_per_sample);
if (ret < 0) {
pr_err("%s: q6asm_open_write_v3 failed (%d)\n",
__func__, ret);
q6asm_audio_client_free(prtd->audio_client);
prtd->audio_client = NULL;
return -ENOMEM;
}
} else {
ret = q6asm_open_write_with_retry(prtd->audio_client,
fmt_type, bits_per_sample);
@ -433,6 +444,14 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
prtd->channel_map, bits_per_sample,
sample_word_size, ASM_LITTLE_ENDIAN,
DEFAULT_QF);
else if (pdata->avs_ver &&
(q6core_get_avs_version() ==
Q6_SUBSYS_AVS2_7))
ret = q6asm_media_format_block_multi_ch_pcm_v3(
prtd->audio_client, runtime->rate,
runtime->channels, !prtd->set_channel_map,
prtd->channel_map, bits_per_sample,
sample_word_size);
else
ret = q6asm_media_format_block_multi_ch_pcm_v4(
prtd->audio_client, runtime->rate,
@ -497,8 +516,13 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
pr_debug("%s Opening %d-ch PCM read stream, perf_mode %d\n",
__func__, params_channels(params),
prtd->audio_client->perf_mode);
ret = q6asm_open_read_with_retry(prtd->audio_client,
if (pdata->avs_ver &&
(q6core_get_avs_version() == Q6_SUBSYS_AVS2_7))
ret = q6asm_open_read_v3(prtd->audio_client,
FORMAT_LINEAR_PCM,
bits_per_sample);
else
ret = q6asm_open_read_with_retry(prtd->audio_client,
FORMAT_LINEAR_PCM,
bits_per_sample, false);
if (ret < 0) {
@ -577,6 +601,15 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
sample_word_size,
ASM_LITTLE_ENDIAN,
DEFAULT_QF);
else if (pdata->avs_ver &&
(q6core_get_avs_version() ==
Q6_SUBSYS_AVS2_7))
ret = q6asm_enc_cfg_blk_pcm_format_support_v3(
prtd->audio_client,
prtd->samp_rate,
prtd->channel_mode,
bits_per_sample,
sample_word_size);
else
ret = q6asm_enc_cfg_blk_pcm_format_support_v4(
prtd->audio_client,
@ -3048,6 +3081,14 @@ static int msm_pcm_probe(struct platform_device *pdev)
pdata->perf_mode = LEGACY_PCM_MODE;
}
if (of_property_read_bool(pdev->dev.of_node,
"qcom,avs-version"))
pdata->avs_ver = true;
else
pdata->avs_ver = false;
pr_debug("%s: avs_ver = %d\n", __func__, pdata->avs_ver);
dev_set_drvdata(&pdev->dev, pdata);
dev_dbg(&pdev->dev, "%s: dev name %s\n",

View file

@ -123,6 +123,7 @@ struct output_meta_data_st {
struct msm_plat_data {
int perf_mode;
bool avs_ver;
struct snd_pcm *pcm;
struct snd_pcm *pcm_device[MSM_FRONTEND_DAI_MM_SIZE];
struct msm_pcm_channel_mixer chmixer_pspd[MSM_FRONTEND_DAI_MM_SIZE][2];