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

Commit b01e3e61 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 Multisession ADSP SVA"

parents 73116956 0d3af582
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -96,7 +96,8 @@ enum afe_mad_type {
	MAD_HW_NONE = 0x00,
	MAD_HW_AUDIO = 0x01,
	MAD_HW_BEACON = 0x02,
	MAD_HW_ULTRASOUND = 0x04
	MAD_HW_ULTRASOUND = 0x04,
	MAD_SW_AUDIO = 0x05,
};

struct afe_audio_buffer {
+2 −1
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ struct lsm_client {
	uint16_t	user_sensitivity;
	uint16_t	kw_sensitivity;
	bool		started;
	dma_addr_t	lsm_cal_phy_addr;
	uint32_t	lsm_cal_size;
};

struct lsm_stream_cmd_open_tx {
@@ -126,7 +128,6 @@ int q6lsm_stop(struct lsm_client *client, bool wait);
int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len);
int q6lsm_snd_model_buf_free(struct lsm_client *client);
int q6lsm_close(struct lsm_client *client);
int q6lsm_unmap_cal_blocks(void);
int q6lsm_register_sound_model(struct lsm_client *client,
			       enum lsm_detection_mode mode, u16 minkeyword,
			       u16 minuser, bool detectfailure);
+120 −15
Original line number Diff line number Diff line
@@ -749,21 +749,6 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
		.name = "DTMF_RX_HOSTLESS",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen Audio Service Capture",
			.aif_name = "LSM_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM",
		.probe = fe_dai_probe,
	},
	{
		.playback = {
			.stream_name = "VOLTE_STUB Playback",
@@ -865,6 +850,126 @@ static struct snd_soc_dai_driver msm_fe_dais[] = {
		.ops = &msm_fe_dai_ops,
		.name = "QCHAT",
	},
	{
		.capture = {
			.stream_name = "Listen 1 Audio Service Capture",
			.aif_name = "LSM1_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM1",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 2 Audio Service Capture",
			.aif_name = "LSM2_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM2",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 3 Audio Service Capture",
			.aif_name = "LSM3_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM3",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 4 Audio Service Capture",
			.aif_name = "LSM4_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM4",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 5 Audio Service Capture",
			.aif_name = "LSM5_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM5",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 6 Audio Service Capture",
			.aif_name = "LSM6_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM6",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 7 Audio Service Capture",
			.aif_name = "LSM7_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM7",
		.probe = fe_dai_probe,
	},
	{
		.capture = {
			.stream_name = "Listen 8 Audio Service Capture",
			.aif_name = "LSM8_UL_HL",
			.rates = SNDRV_PCM_RATE_16000,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.channels_min = 1,
			.channels_max = 1,
			.rate_min = 16000,
			.rate_max = 16000,
		},
		.ops = &msm_fe_dai_ops,
		.name = "LSM8",
		.probe = fe_dai_probe,
	},
};

static int msm_fe_dai_dev_probe(struct platform_device *pdev)
+0 −7
Original line number Diff line number Diff line
@@ -1151,13 +1151,6 @@ static int unmap_cal_tables(void)
		result = result2;
	}

	result2 = q6lsm_unmap_cal_blocks();
	if (result2 < 0) {
		pr_err("%s: lsm_unmap_cal_blocks failed, err = %d\n",
			__func__, result2);
		result = result2;
	}

	result2 = q6asm_unmap_cal_blocks();
	if (result2 < 0) {
		pr_err("%s: asm_unmap_cal_blocks failed, err = %d\n",
+124 −6
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ struct msm_pcm_routing_fdai_data {
#define INVALID_SESSION -1
#define SESSION_TYPE_RX 0
#define SESSION_TYPE_TX 1
#define MAX_LSM_SESSIONS 8

#define EC_PORT_ID_PRIMARY_MI2S_TX    1
#define EC_PORT_ID_SECONDARY_MI2S_TX  2
@@ -80,7 +81,8 @@ enum {
	MADNONE,
	MADAUDIO,
	MADBEACON,
	MADULTRASOUND
	MADULTRASOUND,
	MADSWAUDIO,
};

#define SLIMBUS_0_TX_TEXT "SLIMBUS_0_TX"
@@ -1035,6 +1037,9 @@ static int msm_routing_lsm_func_get(struct snd_kcontrol *kcontrol,
	case MAD_HW_ULTRASOUND:
		ucontrol->value.integer.value[0] = MADULTRASOUND;
		break;
	case MAD_SW_AUDIO:
		ucontrol->value.integer.value[0] = MADSWAUDIO;
	break;
	default:
		WARN(1, "Unknown\n");
		return -EINVAL;
@@ -1074,6 +1079,9 @@ static int msm_routing_lsm_func_put(struct snd_kcontrol *kcontrol,
	case MADULTRASOUND:
		mad_type = MAD_HW_ULTRASOUND;
		break;
	case MADSWAUDIO:
		mad_type = MAD_SW_AUDIO;
		break;
	default:
		WARN(1, "Unknown\n");
		return -EINVAL;
@@ -2859,13 +2867,47 @@ static const struct snd_kcontrol_new pcm_rx_switch_mixer_controls =

static const struct soc_enum lsm_mux_enum =
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mad_audio_mux_text), mad_audio_mux_text);
static const struct snd_kcontrol_new lsm_mux =

static const struct snd_kcontrol_new lsm1_mux =
	SOC_DAPM_ENUM_EXT("LSM1 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);

static const struct snd_kcontrol_new lsm2_mux =
	SOC_DAPM_ENUM_EXT("LSM2 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);
static const struct snd_kcontrol_new lsm3_mux =
	SOC_DAPM_ENUM_EXT("LSM3 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);

static const struct snd_kcontrol_new lsm4_mux =
	SOC_DAPM_ENUM_EXT("LSM4 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);
static const struct snd_kcontrol_new lsm5_mux =
	SOC_DAPM_ENUM_EXT("LSM5 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);

static const struct snd_kcontrol_new lsm6_mux =
	SOC_DAPM_ENUM_EXT("LSM6 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);
static const struct snd_kcontrol_new lsm7_mux =
	SOC_DAPM_ENUM_EXT("LSM7 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);

static const struct snd_kcontrol_new lsm8_mux =
	SOC_DAPM_ENUM_EXT("LSM8 MUX", lsm_mux_enum,
			  msm_routing_lsm_mux_get,
			  msm_routing_lsm_mux_put);


static const char * const lsm_func_text[] = {
	"None", "AUDIO", "BEACON", "ULTRASOUND"
	"None", "AUDIO", "BEACON", "ULTRASOUND", "SWAUDIO",
};
static const struct soc_enum lsm_func_enum =
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(lsm_func_text), lsm_func_text);
@@ -3477,7 +3519,21 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
	SND_SOC_DAPM_AIF_IN("DTMF_DL_HL", "DTMF_RX_HOSTLESS Playback",
		0, 0, 0, 0),
	/* LSM */
	SND_SOC_DAPM_AIF_OUT("LSM_UL_HL", "Listen Audio Service Capture",
	SND_SOC_DAPM_AIF_OUT("LSM1_UL_HL", "Listen 1 Audio Service Capture",
			     0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM2_UL_HL", "Listen 2 Audio Service Capture",
			     0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM3_UL_HL", "Listen 3 Audio Service Capture",
				 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM4_UL_HL", "Listen 4 Audio Service Capture",
						 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM5_UL_HL", "Listen 5 Audio Service Capture",
				 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM6_UL_HL", "Listen 6 Audio Service Capture",
				 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM7_UL_HL", "Listen 7 Audio Service Capture",
				 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("LSM8_UL_HL", "Listen 8 Audio Service Capture",
			     0, 0, 0, 0),
	SND_SOC_DAPM_AIF_IN("QCHAT_DL", "QCHAT Playback", 0, 0, 0, 0),
	SND_SOC_DAPM_AIF_OUT("QCHAT_UL", "QCHAT Capture", 0, 0, 0, 0),
@@ -3571,7 +3627,14 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
				&pcm_rx_switch_mixer_controls),

	/* Mux Definitions */
	SND_SOC_DAPM_MUX("LSM1 MUX", SND_SOC_NOPM, 0, 0, &lsm_mux),
	SND_SOC_DAPM_MUX("LSM1 MUX", SND_SOC_NOPM, 0, 0, &lsm1_mux),
	SND_SOC_DAPM_MUX("LSM2 MUX", SND_SOC_NOPM, 0, 0, &lsm2_mux),
	SND_SOC_DAPM_MUX("LSM3 MUX", SND_SOC_NOPM, 0, 0, &lsm3_mux),
	SND_SOC_DAPM_MUX("LSM4 MUX", SND_SOC_NOPM, 0, 0, &lsm4_mux),
	SND_SOC_DAPM_MUX("LSM5 MUX", SND_SOC_NOPM, 0, 0, &lsm5_mux),
	SND_SOC_DAPM_MUX("LSM6 MUX", SND_SOC_NOPM, 0, 0, &lsm6_mux),
	SND_SOC_DAPM_MUX("LSM7 MUX", SND_SOC_NOPM, 0, 0, &lsm7_mux),
	SND_SOC_DAPM_MUX("LSM8 MUX", SND_SOC_NOPM, 0, 0, &lsm8_mux),
	SND_SOC_DAPM_MUX("SLIM_0_RX AANC MUX", SND_SOC_NOPM, 0, 0,
			aanc_slim_0_rx_mux),

@@ -4138,7 +4201,62 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"LSM1 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM1 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM1 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM_UL_HL", NULL, "LSM1 MUX"},
	{"LSM1_UL_HL", NULL, "LSM1 MUX"},

	{"LSM2 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM2 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM2 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM2 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM2 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM2_UL_HL", NULL, "LSM2 MUX"},


	{"LSM3 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM3 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM3 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM3 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM3 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM3_UL_HL", NULL, "LSM3 MUX"},


	{"LSM4 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM4 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM4 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM4 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM4 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM4_UL_HL", NULL, "LSM4 MUX"},

	{"LSM5 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM5 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM5 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM5 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM5 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM5_UL_HL", NULL, "LSM5 MUX"},

	{"LSM6 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM6 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM6 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM6 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM6 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM6_UL_HL", NULL, "LSM6 MUX"},


	{"LSM7 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM7 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM7 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM7 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM7 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM7_UL_HL", NULL, "LSM7 MUX"},


	{"LSM8 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
	{"LSM8 MUX", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
	{"LSM8 MUX", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
	{"LSM8 MUX", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
	{"LSM8 MUX", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
	{"LSM8_UL_HL", NULL, "LSM8 MUX"},



	{"QCHAT_Tx Mixer", "PRI_TX_QCHAT", "PRI_I2S_TX"},
	{"QCHAT_Tx Mixer", "SLIM_0_TX_QCHAT", "SLIMBUS_0_TX"},
Loading