Loading sound/soc/msm/msm-dai-fe.c +43 −0 Original line number Diff line number Diff line Loading @@ -608,6 +608,49 @@ static struct snd_soc_dai_driver msm_fe_dais[] = { .name = "INT_HFP_BT_HOSTLESS", .probe = fe_dai_probe, }, { .playback = { .stream_name = "USBAUDIO_HOSTLESS Playback", .aif_name = "USBAUDIO_DL_HL", .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 | SNDRV_PCM_RATE_384000, .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 = 8, .rate_min = 8000, .rate_max = 384000, }, .capture = { .stream_name = "USBAUDIO_HOSTLESS Capture", .aif_name = "USBAUDIO_UL_HL", .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 | SNDRV_PCM_RATE_384000, .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 = 8, .rate_min = 8000, .rate_max = 384000, }, .ops = &msm_fe_dai_ops, .name = "USBAUDIO_HOSTLESS", .probe = fe_dai_probe, }, { .playback = { .stream_name = "AFE Playback", Loading sound/soc/msm/msm8998.c +16 −0 Original line number Diff line number Diff line Loading @@ -4983,6 +4983,22 @@ static struct snd_soc_dai_link msm_common_misc_fe_dai_links[] = { .ignore_pmdown_time = 1, .be_id = MSM_FRONTEND_DAI_MULTIMEDIA6, }, { .name = "USB Audio Hostless", .stream_name = "USB Audio Hostless", .cpu_dai_name = "USBAUDIO_HOSTLESS", .platform_name = "msm-pcm-hostless", .dynamic = 1, .dpcm_playback = 1, .dpcm_capture = 1, .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, .no_host_mode = SND_SOC_DAI_LINK_NO_HOST, .ignore_suspend = 1, .ignore_pmdown_time = 1, .codec_dai_name = "snd-soc-dummy-dai", .codec_name = "snd-soc-dummy", }, }; static struct snd_soc_dai_link msm_common_be_dai_links[] = { Loading sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +56 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ static int sec_mi2s_switch_enable; static int tert_mi2s_switch_enable; static int quat_mi2s_switch_enable; static int fm_pcmrx_switch_enable; static int usb_switch_enable; static int lsm_mux_slim_port; static int slim0_rx_aanc_fb_port; static int msm_route_ec_ref_rx; Loading Loading @@ -1695,6 +1696,35 @@ static int msm_routing_put_hfp_switch_mixer(struct snd_kcontrol *kcontrol, return 1; } static int msm_routing_get_usb_switch_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = usb_switch_enable; pr_debug("%s: HFP Switch enable %ld\n", __func__, ucontrol->value.integer.value[0]); return 0; } static int msm_routing_put_usb_switch_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_dapm_widget_list *wlist = dapm_kcontrol_get_wlist(kcontrol); struct snd_soc_dapm_widget *widget = wlist->widgets[0]; struct snd_soc_dapm_update *update = NULL; pr_debug("%s: USB Switch enable %ld\n", __func__, ucontrol->value.integer.value[0]); if (ucontrol->value.integer.value[0]) snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1, update); else snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0, update); usb_switch_enable = ucontrol->value.integer.value[0]; return 1; } static int msm_routing_get_pri_mi2s_switch_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -7024,6 +7054,12 @@ static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = { msm_routing_put_port_mixer), }; static const struct snd_kcontrol_new usb_rx_port_mixer_controls[] = { SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_RX, MSM_BACKEND_DAI_USB_TX, 1, 0, msm_routing_get_port_mixer, msm_routing_put_port_mixer), }; static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = { SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer, Loading Loading @@ -7693,6 +7729,11 @@ static const struct snd_kcontrol_new hfp_slim7_switch_mixer_controls = 0, 1, 0, msm_routing_get_hfp_switch_mixer, msm_routing_put_hfp_switch_mixer); static const struct snd_kcontrol_new usb_switch_mixer_controls = SOC_SINGLE_EXT("Switch", SND_SOC_NOPM, 0, 1, 0, msm_routing_get_usb_switch_mixer, msm_routing_put_usb_switch_mixer); static const struct soc_enum lsm_mux_enum = SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mad_audio_mux_text), mad_audio_mux_text); Loading Loading @@ -8630,6 +8671,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("INTHFP_UL_HL", "INT_HFP_BT_HOSTLESS Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("USBAUDIO_DL_HL", "USBAUDIO_HOSTLESS Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("USBAUDIO_UL_HL", "USBAUDIO_HOSTLESS Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback", 0, 0, 0, 0), Loading Loading @@ -9174,6 +9219,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { &hfp_int_switch_mixer_controls), SND_SOC_DAPM_SWITCH("HFP_SLIM7_UL_HL", SND_SOC_NOPM, 0, 0, &hfp_slim7_switch_mixer_controls), SND_SOC_DAPM_SWITCH("USB_DL_HL", SND_SOC_NOPM, 0, 0, &usb_switch_mixer_controls), /* Mux Definitions */ SND_SOC_DAPM_MUX("LSM1 MUX", SND_SOC_NOPM, 0, 0, &lsm1_mux), Loading Loading @@ -9539,6 +9586,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_MIXER("USB_AUDIO_RX_Voice Mixer", SND_SOC_NOPM, 0, 0, usb_audio_rx_voice_mixer_controls, ARRAY_SIZE(usb_audio_rx_voice_mixer_controls)), SND_SOC_DAPM_MIXER("USB_AUDIO_RX Port Mixer", SND_SOC_NOPM, 0, 0, usb_rx_port_mixer_controls, ARRAY_SIZE(usb_rx_port_mixer_controls)), /* Virtual Pins to force backends ON atm */ SND_SOC_DAPM_OUTPUT("BE_OUT"), SND_SOC_DAPM_INPUT("BE_IN"), Loading Loading @@ -11328,6 +11378,12 @@ static const struct snd_soc_dapm_route intercon[] = { {"AFE_PCM_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, {"AFE_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, {"PCM_RX", NULL, "AFE_PCM_RX Port Mixer"}, {"USB_AUDIO_RX Port Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"}, {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Port Mixer"}, {"USB_DL_HL", "Switch", "USBAUDIO_DL_HL"}, {"USB_AUDIO_RX", NULL, "USB_DL_HL"}, {"USBAUDIO_UL_HL", NULL, "USB_AUDIO_TX"}, {"AUX_PCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, {"AUX_PCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, Loading Loading
sound/soc/msm/msm-dai-fe.c +43 −0 Original line number Diff line number Diff line Loading @@ -608,6 +608,49 @@ static struct snd_soc_dai_driver msm_fe_dais[] = { .name = "INT_HFP_BT_HOSTLESS", .probe = fe_dai_probe, }, { .playback = { .stream_name = "USBAUDIO_HOSTLESS Playback", .aif_name = "USBAUDIO_DL_HL", .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 | SNDRV_PCM_RATE_384000, .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 = 8, .rate_min = 8000, .rate_max = 384000, }, .capture = { .stream_name = "USBAUDIO_HOSTLESS Capture", .aif_name = "USBAUDIO_UL_HL", .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_352800 | SNDRV_PCM_RATE_384000, .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 = 8, .rate_min = 8000, .rate_max = 384000, }, .ops = &msm_fe_dai_ops, .name = "USBAUDIO_HOSTLESS", .probe = fe_dai_probe, }, { .playback = { .stream_name = "AFE Playback", Loading
sound/soc/msm/msm8998.c +16 −0 Original line number Diff line number Diff line Loading @@ -4983,6 +4983,22 @@ static struct snd_soc_dai_link msm_common_misc_fe_dai_links[] = { .ignore_pmdown_time = 1, .be_id = MSM_FRONTEND_DAI_MULTIMEDIA6, }, { .name = "USB Audio Hostless", .stream_name = "USB Audio Hostless", .cpu_dai_name = "USBAUDIO_HOSTLESS", .platform_name = "msm-pcm-hostless", .dynamic = 1, .dpcm_playback = 1, .dpcm_capture = 1, .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, .no_host_mode = SND_SOC_DAI_LINK_NO_HOST, .ignore_suspend = 1, .ignore_pmdown_time = 1, .codec_dai_name = "snd-soc-dummy-dai", .codec_name = "snd-soc-dummy", }, }; static struct snd_soc_dai_link msm_common_be_dai_links[] = { Loading
sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c +56 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ static int sec_mi2s_switch_enable; static int tert_mi2s_switch_enable; static int quat_mi2s_switch_enable; static int fm_pcmrx_switch_enable; static int usb_switch_enable; static int lsm_mux_slim_port; static int slim0_rx_aanc_fb_port; static int msm_route_ec_ref_rx; Loading Loading @@ -1695,6 +1696,35 @@ static int msm_routing_put_hfp_switch_mixer(struct snd_kcontrol *kcontrol, return 1; } static int msm_routing_get_usb_switch_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = usb_switch_enable; pr_debug("%s: HFP Switch enable %ld\n", __func__, ucontrol->value.integer.value[0]); return 0; } static int msm_routing_put_usb_switch_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_dapm_widget_list *wlist = dapm_kcontrol_get_wlist(kcontrol); struct snd_soc_dapm_widget *widget = wlist->widgets[0]; struct snd_soc_dapm_update *update = NULL; pr_debug("%s: USB Switch enable %ld\n", __func__, ucontrol->value.integer.value[0]); if (ucontrol->value.integer.value[0]) snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 1, update); else snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, 0, update); usb_switch_enable = ucontrol->value.integer.value[0]; return 1; } static int msm_routing_get_pri_mi2s_switch_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -7024,6 +7054,12 @@ static const struct snd_kcontrol_new primary_mi2s_rx_port_mixer_controls[] = { msm_routing_put_port_mixer), }; static const struct snd_kcontrol_new usb_rx_port_mixer_controls[] = { SOC_SINGLE_EXT("USB_AUDIO_TX", MSM_BACKEND_DAI_USB_RX, MSM_BACKEND_DAI_USB_TX, 1, 0, msm_routing_get_port_mixer, msm_routing_put_port_mixer), }; static const struct snd_kcontrol_new quat_mi2s_rx_port_mixer_controls[] = { SOC_SINGLE_EXT("PRI_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX, MSM_BACKEND_DAI_PRI_MI2S_TX, 1, 0, msm_routing_get_port_mixer, Loading Loading @@ -7693,6 +7729,11 @@ static const struct snd_kcontrol_new hfp_slim7_switch_mixer_controls = 0, 1, 0, msm_routing_get_hfp_switch_mixer, msm_routing_put_hfp_switch_mixer); static const struct snd_kcontrol_new usb_switch_mixer_controls = SOC_SINGLE_EXT("Switch", SND_SOC_NOPM, 0, 1, 0, msm_routing_get_usb_switch_mixer, msm_routing_put_usb_switch_mixer); static const struct soc_enum lsm_mux_enum = SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mad_audio_mux_text), mad_audio_mux_text); Loading Loading @@ -8630,6 +8671,10 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("INTHFP_UL_HL", "INT_HFP_BT_HOSTLESS Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("USBAUDIO_DL_HL", "USBAUDIO_HOSTLESS Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_OUT("USBAUDIO_UL_HL", "USBAUDIO_HOSTLESS Capture", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("HDMI_DL_HL", "HDMI_HOSTLESS Playback", 0, 0, 0, 0), SND_SOC_DAPM_AIF_IN("SEC_I2S_DL_HL", "SEC_I2S_RX_HOSTLESS Playback", 0, 0, 0, 0), Loading Loading @@ -9174,6 +9219,8 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { &hfp_int_switch_mixer_controls), SND_SOC_DAPM_SWITCH("HFP_SLIM7_UL_HL", SND_SOC_NOPM, 0, 0, &hfp_slim7_switch_mixer_controls), SND_SOC_DAPM_SWITCH("USB_DL_HL", SND_SOC_NOPM, 0, 0, &usb_switch_mixer_controls), /* Mux Definitions */ SND_SOC_DAPM_MUX("LSM1 MUX", SND_SOC_NOPM, 0, 0, &lsm1_mux), Loading Loading @@ -9539,6 +9586,9 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = { SND_SOC_DAPM_MIXER("USB_AUDIO_RX_Voice Mixer", SND_SOC_NOPM, 0, 0, usb_audio_rx_voice_mixer_controls, ARRAY_SIZE(usb_audio_rx_voice_mixer_controls)), SND_SOC_DAPM_MIXER("USB_AUDIO_RX Port Mixer", SND_SOC_NOPM, 0, 0, usb_rx_port_mixer_controls, ARRAY_SIZE(usb_rx_port_mixer_controls)), /* Virtual Pins to force backends ON atm */ SND_SOC_DAPM_OUTPUT("BE_OUT"), SND_SOC_DAPM_INPUT("BE_IN"), Loading Loading @@ -11328,6 +11378,12 @@ static const struct snd_soc_dapm_route intercon[] = { {"AFE_PCM_RX Port Mixer", "INTERNAL_FM_TX", "INT_FM_TX"}, {"AFE_PCM_RX Port Mixer", "SLIM_1_TX", "SLIMBUS_1_TX"}, {"PCM_RX", NULL, "AFE_PCM_RX Port Mixer"}, {"USB_AUDIO_RX Port Mixer", "USB_AUDIO_TX", "USB_AUDIO_TX"}, {"USB_AUDIO_RX", NULL, "USB_AUDIO_RX Port Mixer"}, {"USB_DL_HL", "Switch", "USBAUDIO_DL_HL"}, {"USB_AUDIO_RX", NULL, "USB_DL_HL"}, {"USBAUDIO_UL_HL", NULL, "USB_AUDIO_TX"}, {"AUX_PCM_RX Port Mixer", "AUX_PCM_UL_TX", "AUX_PCM_TX"}, {"AUX_PCM_RX Port Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"}, Loading