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

Commit 66c922f7 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 SW only Listen"

parents b6a4e275 98b9e5d3
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -182,5 +182,6 @@ int q6lsm_register_sound_model(struct lsm_client *client,
int q6lsm_deregister_sound_model(struct lsm_client *client);
int q6lsm_set_kw_sensitivity_level(struct lsm_client *client,
				u16 minkeyword, u16 minuser);

void set_lsm_port(int);
int get_lsm_port(void);
#endif /* __Q6LSM_H__ */
+53 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#include "msm-dolby-dap-config.h"
#include "q6voice.h"
#include "q6core.h"
#include "sound/q6lsm.h"

#define EC_PORT_ID_PRIMARY_MI2S_TX    1
#define EC_PORT_ID_SECONDARY_MI2S_TX  2
@@ -69,11 +70,13 @@ enum {
#define SLIMBUS_3_TX_TEXT "SLIMBUS_3_TX"
#define SLIMBUS_4_TX_TEXT "SLIMBUS_4_TX"
#define SLIMBUS_5_TX_TEXT "SLIMBUS_5_TX"
#define TERT_MI2S_TX_TEXT "TERT_MI2S_TX"
#define LSM_FUNCTION_TEXT "LSM Function"
static const char * const mad_audio_mux_text[] = {
	"None",
	SLIMBUS_0_TX_TEXT, SLIMBUS_1_TX_TEXT, SLIMBUS_2_TX_TEXT,
	SLIMBUS_3_TX_TEXT, SLIMBUS_4_TX_TEXT, SLIMBUS_5_TX_TEXT
	SLIMBUS_3_TX_TEXT, SLIMBUS_4_TX_TEXT, SLIMBUS_5_TX_TEXT,
	TERT_MI2S_TX_TEXT
};


@@ -983,9 +986,38 @@ static int msm_routing_lsm_mux_put(struct snd_kcontrol *kcontrol,
	struct snd_soc_dapm_widget *widget = wlist->widgets[0];
	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
	int mux = ucontrol->value.enumerated.item[0];
	int lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;

	pr_debug("%s: LSM enable %ld\n", __func__,
			ucontrol->value.integer.value[0]);
	switch (ucontrol->value.integer.value[0]) {
	case 1:
		lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_0_TX;
		break;
	case 2:
		lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_1_TX;
		break;
	case 3:
		lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_2_TX;
		break;
	case 4:
		lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_3_TX;
		break;
	case 5:
		lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_4_TX;
		break;
	case 6:
		lsm_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
		break;
	case 7:
		lsm_port = AFE_PORT_ID_TERTIARY_MI2S_TX;
		break;
	default:
		pr_err("Default lsm port");
		break;
	}
	set_lsm_port(lsm_port);

	if (ucontrol->value.integer.value[0]) {
		lsm_mux_slim_port = ucontrol->value.integer.value[0];
		snd_soc_dapm_mux_update_power(widget, kcontrol, mux, e);
@@ -1015,6 +1047,12 @@ static int msm_routing_lsm_func_get(struct snd_kcontrol *kcontrol,
		return -EINVAL;
	}

	/*Check for Tertiary TX port*/
	if (!strcmp(kcontrol->id.name, mad_audio_mux_text[7])) {
		ucontrol->value.integer.value[0] = MADSWAUDIO;
		return 0;
	}

	port_id = i * 2 + 1 + SLIMBUS_0_RX;
	mad_type = afe_port_get_mad_type(port_id);
	pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
@@ -1082,6 +1120,12 @@ static int msm_routing_lsm_func_put(struct snd_kcontrol *kcontrol,
		return -EINVAL;
	}

	/*Check for Tertiary TX port*/
	if (!strcmp(kcontrol->id.name, mad_audio_mux_text[7])) {
		port_id = AFE_PORT_ID_TERTIARY_MI2S_TX;
		mad_type = MAD_SW_AUDIO;
	}

	pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
		 mad_type);
	return afe_port_set_mad_type(port_id, mad_type);
@@ -3208,6 +3252,8 @@ static const struct snd_kcontrol_new lsm_function[] = {
		     msm_routing_lsm_func_get, msm_routing_lsm_func_put),
	SOC_ENUM_EXT(SLIMBUS_5_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
		     msm_routing_lsm_func_get, msm_routing_lsm_func_put),
	SOC_ENUM_EXT(TERT_MI2S_TX_TEXT" "LSM_FUNCTION_TEXT, lsm_func_enum,
		    msm_routing_lsm_func_get, msm_routing_lsm_func_put),
};

static const char * const aanc_slim_0_rx_text[] = {
@@ -4503,6 +4549,7 @@ 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"},
	{"LSM1 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
	{"LSM1_UL_HL", NULL, "LSM1 MUX"},

	{"LSM2 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
@@ -4510,6 +4557,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"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 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
	{"LSM2_UL_HL", NULL, "LSM2 MUX"},


@@ -4518,6 +4566,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"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 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
	{"LSM3_UL_HL", NULL, "LSM3 MUX"},


@@ -4526,6 +4575,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"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 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
	{"LSM4_UL_HL", NULL, "LSM4 MUX"},

	{"LSM5 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
@@ -4533,6 +4583,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"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 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
	{"LSM5_UL_HL", NULL, "LSM5 MUX"},

	{"LSM6 MUX", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
+8 −0
Original line number Diff line number Diff line
@@ -1136,6 +1136,11 @@ int afe_port_set_mad_type(u16 port_id, enum afe_mad_type mad_type)
{
	int i;

	if (port_id == AFE_PORT_ID_TERTIARY_MI2S_TX) {
		mad_type = MAD_SW_AUDIO;
		return 0;
	}

	i = port_id - SLIMBUS_0_RX;
	if (i < 0 || i >= ARRAY_SIZE(afe_ports_mad_type)) {
		pr_err("%s: Invalid port_id 0x%x\n", __func__, port_id);
@@ -1149,6 +1154,9 @@ enum afe_mad_type afe_port_get_mad_type(u16 port_id)
{
	int i;

	if (port_id == AFE_PORT_ID_TERTIARY_MI2S_TX)
		return MAD_SW_AUDIO;

	i = port_id - SLIMBUS_0_RX;
	if (i < 0 || i >= ARRAY_SIZE(afe_ports_mad_type)) {
		pr_debug("%s: Non Slimbus port_id 0x%x\n", __func__, port_id);
+12 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#define LSM_ALIGN_BOUNDARY 512
#define LSM_SAMPLE_RATE 16000
#define QLSM_PARAM_ID_MINOR_VERSION 1
static int lsm_afe_port;

enum {
	CMD_STATE_CLEARED = 0,
@@ -574,6 +575,16 @@ exit:
	return rc;
}

void set_lsm_port(int lsm_port)
{
	lsm_afe_port = lsm_port;
}

int get_lsm_port()
{
	return lsm_afe_port;
}

int q6lsm_register_sound_model(struct lsm_client *client,
			       enum lsm_detection_mode mode,
			       bool detectfailure)
@@ -591,7 +602,7 @@ int q6lsm_register_sound_model(struct lsm_client *client,
		return -EINVAL;
	}
	client->mode |= detectfailure << 2;
	client->connect_to_port = AFE_PORT_ID_SLIMBUS_MULTI_CHAN_5_TX;
	client->connect_to_port = get_lsm_port();

	rc = q6lsm_set_params(client);
	if (rc < 0) {