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

Commit 9eb92ee2 authored by Subhash Chandra Bose Naripeddy's avatar Subhash Chandra Bose Naripeddy Committed by Stephen Boyd
Browse files

ASoC: msm: Add 8-channel Multi-PCM TX support



There is use case that the HDMI input goes through MI2S TX
interface to ADSP. Add 8-channel Multi-PCM TX support for this
use case.

Change-Id: Ie26e188da8d15988452103f11277944551344cd1
Signed-off-by: default avatarSubhash Chandra Bose Naripeddy <snariped@codeaurora.org>
parent abcd1ccd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
					SNDRV_PCM_RATE_KNOT),
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 2,
			.channels_max = 8,
			.rate_min =     8000,
			.rate_max =	48000,
		},
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ static struct snd_pcm_hardware msm_pcm_hardware_capture = {
	.rate_min =             8000,
	.rate_max =             48000,
	.channels_min =         1,
	.channels_max =         2,
	.channels_max =         8,
	.buffer_bytes_max =     CAPTURE_NUM_PERIODS * CAPTURE_MAX_PERIOD_SIZE,
	.period_bytes_min =	CAPTURE_MIN_PERIOD_SIZE,
	.period_bytes_max =     CAPTURE_MAX_PERIOD_SIZE,
+9 −0
Original line number Diff line number Diff line
@@ -765,6 +765,15 @@ int adm_multi_ch_copp_open(int port_id, int path, int rate, int channel_mode,
			open.dev_channel_mapping[3] = PCM_CHANNEL_FC;
			open.dev_channel_mapping[4] = PCM_CHANNEL_LB;
			open.dev_channel_mapping[5] = PCM_CHANNEL_RB;
		} else if (channel_mode == 8) {
			open.dev_channel_mapping[0] = PCM_CHANNEL_FL;
			open.dev_channel_mapping[1] = PCM_CHANNEL_FR;
			open.dev_channel_mapping[2] = PCM_CHANNEL_LFE;
			open.dev_channel_mapping[3] = PCM_CHANNEL_FC;
			open.dev_channel_mapping[4] = PCM_CHANNEL_LB;
			open.dev_channel_mapping[5] = PCM_CHANNEL_RB;
			open.dev_channel_mapping[6] = PCM_CHANNEL_FLC;
			open.dev_channel_mapping[7] = PCM_CHANNEL_FRC;
		} else {
			pr_err("%s invalid num_chan %d\n", __func__,
					channel_mode);
+37 −8
Original line number Diff line number Diff line
@@ -1768,6 +1768,16 @@ int q6asm_enc_cfg_blk_multi_ch_pcm(struct audio_client *ac,
	enc_cfg.enc_blk.cfg.mpcm.sample_rate = rate;
	enc_cfg.enc_blk.cfg.mpcm.is_signed = 1;
	enc_cfg.enc_blk.cfg.mpcm.is_interleaved = 1;
	if (channels == 2) {
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[0] = PCM_CHANNEL_FL;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[1] = PCM_CHANNEL_FR;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[2] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[3] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[4] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[5] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[6] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[7] = 0;
	} else if (channels == 4) {
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[0] = PCM_CHANNEL_FL;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[1] = PCM_CHANNEL_FR;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[2] = PCM_CHANNEL_RB;
@@ -1776,6 +1786,25 @@ int q6asm_enc_cfg_blk_multi_ch_pcm(struct audio_client *ac,
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[5] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[6] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[7] = 0;
	} else if (channels == 6) {
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[0] = PCM_CHANNEL_FL;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[1] = PCM_CHANNEL_FR;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[2] = PCM_CHANNEL_LFE;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[3] = PCM_CHANNEL_FC;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[4] = PCM_CHANNEL_LB;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[5] = PCM_CHANNEL_RB;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[6] = 0;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[7] = 0;
	} else if (channels == 8) {
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[0] = PCM_CHANNEL_FL;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[1] = PCM_CHANNEL_FR;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[2] = PCM_CHANNEL_LFE;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[3] = PCM_CHANNEL_FC;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[4] = PCM_CHANNEL_LB;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[5] = PCM_CHANNEL_RB;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[6] = PCM_CHANNEL_FLC;
		enc_cfg.enc_blk.cfg.mpcm.channel_mapping[7] = PCM_CHANNEL_FRC;
	}

	rc = apr_send_pkt(ac->apr, (uint32_t *) &enc_cfg);
	if (rc < 0) {