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

Commit 756af60b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

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

parents 111f081f 17a94f6c
Loading
Loading
Loading
Loading
+53 −4
Original line number Diff line number Diff line
@@ -841,6 +841,19 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
			sample_word_size = 16;
			break;
		}

		switch (q6core_get_avs_version()) {
		case (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);
			break;
		case (Q6_SUBSYS_AVS2_8):
			ret = q6asm_media_format_block_pcm_format_support_v4(
							prtd->audio_client,
							prtd->sample_rate,
@@ -851,6 +864,12 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
							sample_word_size,
							ASM_LITTLE_ENDIAN,
							DEFAULT_QF);
			break;
		case (Q6_SUBSYS_INVALID):
		default:
			pr_err("%s: INVALID AVS IMAGE\n", __func__);
			break;
		}
		if (ret < 0)
			pr_err("%s: CMD Format block failed\n", __func__);

@@ -1124,10 +1143,25 @@ 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);

		switch (q6core_get_avs_version()) {
		case (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);
			break;
		case (Q6_SUBSYS_AVS2_8):
			ret = q6asm_stream_open_write_v4(ac,
				prtd->codec, bits_per_sample,
				ac->stream_id,
				prtd->gapless_state.use_dsp_gapless_mode);
			break;
		case (Q6_SUBSYS_INVALID):
		default:
			pr_err("%s: INVALID AVS IMAGE\n", __func__);
			break;
		}
		if (ret < 0) {
			pr_err("%s:ASM open write err[%d] for compr type[%d]\n",
				__func__, ret, prtd->compr_passthr);
@@ -2360,10 +2394,25 @@ 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,

		switch (q6core_get_avs_version()) {
		case (Q6_SUBSYS_AVS2_7):
			rc = q6asm_stream_open_write_v3(ac,
				prtd->codec, bits_per_sample,
				stream_id,
				ac->stream_id,
				prtd->gapless_state.use_dsp_gapless_mode);
			break;
		case (Q6_SUBSYS_AVS2_8):
			rc = q6asm_stream_open_write_v4(ac,
				prtd->codec, bits_per_sample,
				ac->stream_id,
				prtd->gapless_state.use_dsp_gapless_mode);
			break;
		case (Q6_SUBSYS_INVALID):
		default:
			pr_err("%s: INVALID AVS IMAGE\n", __func__);
			break;
		}
		if (rc < 0) {
			pr_err("%s: Session out open failed for gapless\n",
				 __func__);
+75 −14
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include <linux/of_device.h>
#include <sound/tlv.h>
#include <sound/pcm_params.h>
#include <sound/q6core.h>

#include "msm-pcm-q6-v2.h"
#include "msm-pcm-routing-v2.h"
@@ -341,10 +342,20 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
		sample_word_size = 16;
		break;
	}

	switch (q6core_get_avs_version()) {
	case (Q6_SUBSYS_AVS2_7):
		ret = q6asm_open_write_v3(prtd->audio_client,
					  FORMAT_LINEAR_PCM, bits_per_sample);
		break;
	case (Q6_SUBSYS_AVS2_8):
		ret = q6asm_open_write_v4(prtd->audio_client,
					  FORMAT_LINEAR_PCM, bits_per_sample);

		break;
	case (Q6_SUBSYS_INVALID):
	default:
		pr_err("%s: INVALID AVS IMAGE\n", __func__);
		break;
	}
	if (ret < 0) {
		pr_err("%s: q6asm_open_write_v2 failed\n", __func__);
		q6asm_audio_client_free(prtd->audio_client);
@@ -367,12 +378,28 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
		return ret;
	}

	switch (q6core_get_avs_version()) {
	case (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);
		break;
	case (Q6_SUBSYS_AVS2_8):
		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, ASM_LITTLE_ENDIAN,
				DEFAULT_QF);

		break;
	case (Q6_SUBSYS_INVALID):
	default:
		pr_err("%s: INVALID AVS IMAGE\n", __func__);
		break;
	}
	if (ret < 0)
		pr_info("%s: CMD Format block failed\n", __func__);

@@ -430,8 +457,23 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
				__func__, params_channels(params),
				prtd->audio_client->perf_mode);

		ret = q6asm_open_read_v4(prtd->audio_client, FORMAT_LINEAR_PCM,
		switch (q6core_get_avs_version()) {
		case (Q6_SUBSYS_AVS2_7):
			ret = q6asm_open_read_v3(prtd->audio_client,
					FORMAT_LINEAR_PCM,
					bits_per_sample);
			break;
		case (Q6_SUBSYS_AVS2_8):
			ret = q6asm_open_read_v4(prtd->audio_client,
					FORMAT_LINEAR_PCM,
					bits_per_sample);

			break;
		case (Q6_SUBSYS_INVALID):
		default:
			pr_err("%s: INVALID AVS IMAGE\n", __func__);
			break;
		}
		if (ret < 0) {
			pr_err("%s: q6asm_open_read failed\n", __func__);
			q6asm_audio_client_free(prtd->audio_client);
@@ -498,13 +540,32 @@ 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_v4(prtd->audio_client,

	switch (q6core_get_avs_version()) {
	case (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);
		break;
	case (Q6_SUBSYS_AVS2_8):
		ret = q6asm_enc_cfg_blk_pcm_format_support_v4(
				prtd->audio_client,
				prtd->samp_rate,
				prtd->channel_mode,
				bits_per_sample,
				sample_word_size,
				ASM_LITTLE_ENDIAN,
				DEFAULT_QF);

		break;
	case (Q6_SUBSYS_INVALID):
	default:
		pr_err("%s: INVALID AVS IMAGE\n", __func__);
		break;
	}
	if (ret < 0)
		pr_debug("%s: cmd cfg pcm was block failed", __func__);