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

Commit 29973d7f authored by Ramjee Singh's avatar Ramjee Singh Committed by Subhadra Jagadeesan
Browse files

msm8909: Support for Haptic Audio FE DAI



1. Changes in machine driver to support new FE
MultiMedia30 for supporting haptic playback usecase.
2. Add new snd soc dai for MultiMedia30 Playback
3. Changes in routing driver to add mixer controls
for MultiMedia30 under primary_i2s_rx control.

Change-Id: Ibd8566444b9f57ca236f42267222a6c8065565db
Signed-off-by: default avatarSubhadra Jagadeesan <subhja@codeaurora.org>
parent 58ebedba
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -2607,6 +2607,25 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
		.name = "MultiMedia29",
		.probe = fe_dai_probe,
	},
	{
		.playback = {
			.stream_name = "MultiMedia30 Playback",
			.aif_name = "MM_DL30",
			.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_S32_LE),
			.channels_min = 1,
			.channels_max = 32,
			.rate_min = 8000,
			.rate_max = 384000,
		},
		.ops = &msm_fe_Multimedia_dai_ops,
		.name = "MultiMedia30",
		.probe = fe_dai_probe,
	},
};

static int msm_fe_dai_dev_probe(struct platform_device *pdev)
+11 −2
Original line number Diff line number Diff line
/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -654,6 +654,9 @@ static struct msm_pcm_routing_fdai_data
	{{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
	 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
	/* MULTIMEDIA29 */
	{{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
	 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
	/* MULTIMEDIA30 */
	{{0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} },
	 {0, INVALID_SESSION, LEGACY_PCM_MODE, {NULL, NULL} } },
	/* VOIP */
@@ -5005,7 +5008,10 @@ static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = {
	MSM_BACKEND_DAI_PRI_MI2S_RX,
	MSM_FRONTEND_DAI_MULTIMEDIA29, 1, 0, msm_routing_get_audio_mixer,
	msm_routing_put_audio_mixer),
	SOC_DOUBLE_EXT("MultiMedia30", SND_SOC_NOPM,
	MSM_BACKEND_DAI_PRI_MI2S_RX,
	MSM_FRONTEND_DAI_MULTIMEDIA30, 1, 0, msm_routing_get_audio_mixer,
	msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new int0_mi2s_rx_mixer_controls[] = {
@@ -15124,6 +15130,7 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
	SND_SOC_DAPM_AIF_IN("MM_DL15", "MultiMedia15 Playback", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_IN("MM_DL16", "MultiMedia16 Playback", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_IN("MM_DL20", "MultiMedia20 Playback", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_IN("MM_DL30", "MultiMedia30 Playback", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_IN("VOIP_DL", "VoIP Playback", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("MM_UL1", "MultiMedia1 Capture", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("MM_UL2", "MultiMedia2 Capture", 0, 0, 0, 0),
@@ -16391,6 +16398,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"PRI_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
	{"PRI_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
	{"PRI_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
	{"PRI_RX Audio Mixer", "MultiMedia30", "MM_DL30"},
	{"PRI_I2S_RX", NULL, "PRI_RX Audio Mixer"},
	{"SEC_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
@@ -16724,6 +16732,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"PRI_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
	{"PRI_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
	{"PRI_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
	{"PRI_MI2S_RX Audio Mixer", "MultiMedia30", "MM_DL30"},
	{"PRI_MI2S_RX", NULL, "PRI_MI2S_RX Audio Mixer"},
	{"INT0_MI2S_RX Audio Mixer", "MultiMedia1", "MM_DL1"},
+4 −3
Original line number Diff line number Diff line
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2018, 2020 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -214,6 +214,7 @@ enum {
	MSM_FRONTEND_DAI_MULTIMEDIA20,
	MSM_FRONTEND_DAI_MULTIMEDIA28,
	MSM_FRONTEND_DAI_MULTIMEDIA29,
	MSM_FRONTEND_DAI_MULTIMEDIA30,
	MSM_FRONTEND_DAI_VOIP,
	MSM_FRONTEND_DAI_AFE_RX,
	MSM_FRONTEND_DAI_AFE_TX,
@@ -235,8 +236,8 @@ enum {
	MSM_FRONTEND_DAI_MAX,
};

#define MSM_FRONTEND_DAI_MM_SIZE (MSM_FRONTEND_DAI_MULTIMEDIA29 + 1)
#define MSM_FRONTEND_DAI_MM_MAX_ID MSM_FRONTEND_DAI_MULTIMEDIA29
#define MSM_FRONTEND_DAI_MM_SIZE (MSM_FRONTEND_DAI_MULTIMEDIA30 + 1)
#define MSM_FRONTEND_DAI_MM_MAX_ID MSM_FRONTEND_DAI_MULTIMEDIA30

enum {
	MSM_BACKEND_DAI_PRI_I2S_RX = 0,
+18 −0
Original line number Diff line number Diff line
@@ -2348,6 +2348,24 @@ static struct snd_soc_dai_link msm8952_dai[] = {
		.ignore_pmdown_time = 1,
		.id = MSM_FRONTEND_DAI_MULTIMEDIA19,
	},
	{/* hw:x,41 */
		.name = "MSM8x16 Haptic Audio",
		.stream_name = "MultiMedia30",
		.cpu_dai_name   = "MultiMedia30",
		.platform_name  = "msm-pcm-dsp.1",
		.dynamic = 1,
		.dpcm_playback = 1,
		.async_ops = ASYNC_DPCM_SND_SOC_PREPARE |
			 ASYNC_DPCM_SND_SOC_HW_PARAMS,
		.codec_dai_name = "snd-soc-dummy-dai",
		.codec_name = "snd-soc-dummy",
		.trigger = {SND_SOC_DPCM_TRIGGER_POST,
			 SND_SOC_DPCM_TRIGGER_POST},
		.ignore_suspend = 1,
		/* this dainlink has playback support */
		.ignore_pmdown_time = 1,
		.id = MSM_FRONTEND_DAI_MULTIMEDIA30,
	},
	/* Backend I2S DAI Links */
	{
		.name = LPASS_BE_PRI_MI2S_RX,