Loading include/sound/q6lsm.h +3 −2 Original line number Diff line number Diff line Loading @@ -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__ */ sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +53 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 }; Loading Loading @@ -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); Loading Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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[] = { Loading Loading @@ -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"}, Loading @@ -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"}, Loading @@ -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"}, Loading @@ -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"}, Loading @@ -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"}, Loading sound/soc/msm/qdsp6v2/q6afe.c +8 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading sound/soc/msm/qdsp6v2/q6lsm.c +12 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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) Loading @@ -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) { Loading Loading
include/sound/q6lsm.h +3 −2 Original line number Diff line number Diff line Loading @@ -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__ */
sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +53 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 }; Loading Loading @@ -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); Loading Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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[] = { Loading Loading @@ -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"}, Loading @@ -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"}, Loading @@ -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"}, Loading @@ -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"}, Loading @@ -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"}, Loading
sound/soc/msm/qdsp6v2/q6afe.c +8 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading
sound/soc/msm/qdsp6v2/q6lsm.c +12 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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) Loading @@ -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) { Loading