diff --git a/asoc/Kbuild b/asoc/Kbuild index 84aaa73b3eeb..6bfe53412acb 100755 --- a/asoc/Kbuild +++ b/asoc/Kbuild @@ -186,7 +186,7 @@ ifdef CONFIG_SND_SOC_SA8155 MACHINE_OBJS += sa8155.o endif -# for gvmgh sound card driver +# for gvm sound card driver ifdef CONFIG_SND_SOC_GVM_AUTO_SPF SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o endif diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index 24de137ad11f..a7b3a5a0e8d4 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -2961,6 +2961,8 @@ static void wcd937x_soc_codec_remove(struct snd_soc_component *component) wcd937x->register_notifier(wcd937x->handle, &wcd937x->nblock, false); + wcd937x_mbhc_deinit(component); + return; } diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index eae9dfb280b2..1a976b86007d 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -3961,6 +3961,7 @@ static void wcd938x_soc_codec_remove(struct snd_soc_component *component) wcd938x->register_notifier(wcd938x->handle, &wcd938x->nblock, false); + wcd938x_mbhc_deinit(component); } static int wcd938x_soc_codec_suspend(struct snd_soc_component *component) diff --git a/asoc/gvm_auto_spf_dummy.c b/asoc/gvm_auto_spf_dummy.c index b5e248ed5830..311522882529 100644 --- a/asoc/gvm_auto_spf_dummy.c +++ b/asoc/gvm_auto_spf_dummy.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -30,8 +31,6 @@ #include #include #include "msm_dailink.h" -#include -#include #include @@ -324,7 +323,7 @@ static struct snd_soc_dai_link msm_common_dai_links[] = { }, }; -static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { +static struct snd_soc_dai_link msm_gvm_auto_dai_links[] = { /* BackEnd DAI Links */ { .name = "PRI_TDM_RX_0_DUMMY", @@ -467,6 +466,26 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { SND_SOC_DAILINK_REG(sep_tdm_tx_0_dummy), }, { + .name = "OCT_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_WSA2-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(oct_tdm_rx_0_dummy), + }, + { + .name = "OCT_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_WSA2-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(oct_tdm_tx_0_dummy), + }, + { .name = "HS_IF0_TDM_RX_0_DUMMY", .stream_name = "TDM-LPAIF_SDR-RX-PRIMARY", .dpcm_playback = 1, @@ -526,6 +545,46 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { .ignore_pmdown_time = 1, SND_SOC_DAILINK_REG(hs_if2_tdm_tx_0_dummy), }, + { + .name = "HS_IF3_TDM_RX_0", + .stream_name = "TDM-LPAIF_SDR-RX-QUATERNARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if3_tdm_rx_0_dummy), + }, + { + .name = "HS_IF3_TDM_TX_0", + .stream_name = "TDM-LPAIF_SDR-TX-QUATERNARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if3_tdm_tx_0_dummy), + }, + { + .name = "HS_IF4_TDM_RX_0", + .stream_name = "TDM-LPAIF_SDR-RX-QUINARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if4_tdm_rx_0_dummy), + }, + { + .name = "HS_IF4_TDM_TX_0", + .stream_name = "TDM-LPAIF_SDR-TX-QUINARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if4_tdm_tx_0_dummy), + }, }; static struct snd_soc_dai_link msm_talos_dai_links[] = { @@ -632,17 +691,7 @@ static struct snd_soc_dai_link msm_talos_dai_links[] = { }, }; -struct snd_soc_card snd_soc_card_auto_hana_dummy_msm = { - .name = "gvmauto-8155-snd-card", -}; - -struct snd_soc_card snd_soc_card_auto_talos_dummy_msm = { - .name = "gvmauto-6155-snd-card", -}; - -struct snd_soc_card snd_soc_card_auto_makena_dummy_msm = { - .name = "gvmauto-8295-snd-card", -}; +struct snd_soc_card snd_soc_card_gvm_auto_dummy_msm; static int msm_populate_dai_link_component_of_node( struct snd_soc_card *card) @@ -751,21 +800,11 @@ static const struct of_device_id gvm_asoc_machine_of_match[] = { .data = "adp_star_codec"}, {}, }; -static struct snd_soc_dai_link msm_auto_dai_links[ - ARRAY_SIZE(msm_common_dai_links)]; - -static struct snd_soc_dai_link msm_auto_talos_dai_links[ - ARRAY_SIZE(msm_talos_dai_links)]; - -static struct snd_soc_dai_link msm_auto_gvm8295_dai_links[ - ARRAY_SIZE(msm_gvm8295_dai_links)]; static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) { struct snd_soc_card *card = NULL; - struct snd_soc_dai_link *dailink; - int total_links; - const struct of_device_id *match; + const struct of_device_id *match = NULL; match = of_match_node(gvm_asoc_machine_of_match, dev->of_node); if (!match) { @@ -774,34 +813,18 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) return NULL; } + card = &snd_soc_card_gvm_auto_dummy_msm; + if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) { - card = &snd_soc_card_auto_hana_dummy_msm; - total_links = ARRAY_SIZE(msm_common_dai_links); - memcpy(msm_auto_dai_links, - msm_common_dai_links, - sizeof(msm_common_dai_links)); - - dailink = msm_auto_dai_links; + card->dai_link = msm_common_dai_links; + card->num_links = ARRAY_SIZE(msm_common_dai_links); } else if (!strcmp(match->compatible, "qcom,6155-spf-asoc-snd-adp-star")) { - card = &snd_soc_card_auto_talos_dummy_msm; - total_links = ARRAY_SIZE(msm_talos_dai_links); - memcpy(msm_auto_talos_dai_links, - msm_talos_dai_links, - sizeof(msm_talos_dai_links)); - dailink = msm_auto_talos_dai_links; + card->dai_link = msm_talos_dai_links; + card->num_links = ARRAY_SIZE(msm_talos_dai_links); } else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) { - card = &snd_soc_card_auto_makena_dummy_msm; - total_links = ARRAY_SIZE(msm_gvm8295_dai_links); - memcpy(msm_auto_gvm8295_dai_links, - msm_gvm8295_dai_links, - sizeof(msm_gvm8295_dai_links)); - dailink = msm_auto_gvm8295_dai_links; - } - - if (card) { - card->dai_link = dailink; - card->num_links = total_links; - } + card->dai_link = msm_gvm_auto_dai_links; + card->num_links = ARRAY_SIZE(msm_gvm_auto_dai_links); +} return card; } @@ -827,29 +850,42 @@ void msm_common_set_pdata(struct snd_soc_card *card, pdata->common_pdata = common_pdata; } -static int auto_spf_dummy_ssr_cb(struct notifier_block *this, - unsigned long code, - void *data) +#define AUTO_VIRT_SNDCARD_ONLINE 0 +#define AUTO_VIRT_SNDCARD_OFFLINE 1 + +static long virt_sndcard_ioctl(struct file *f, + unsigned int cmd, unsigned long arg) { + int ret = 0; struct snd_soc_card *card = platform_get_drvdata(spdev); - switch (code) { - case SUBSYS_BEFORE_SHUTDOWN: + switch (cmd) { + case AUTO_VIRT_SNDCARD_OFFLINE: snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n"); break; - case SUBSYS_AFTER_POWERUP: + case AUTO_VIRT_SNDCARD_ONLINE: snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE dev_info(&spdev->dev, "ssr complete, mark sndcard online\n"); break; default: + pr_err("%s: ioctl not found\n", __func__); + ret = -EFAULT; break; } - return 0; + + return ret; } -static struct notifier_block auto_spf_dummy_ssr_notifier = { - .notifier_call = auto_spf_dummy_ssr_cb, +static const struct file_operations virt_sndcard_ctl_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = virt_sndcard_ioctl, +}; + +static struct miscdevice virt_sndcard_ctl_misc = { + .minor = MISC_DYNAMIC_MINOR, + .name = "virt_sndcard_ctl", + .fops = &virt_sndcard_ctl_fops, }; static int msm_asoc_machine_probe(struct platform_device *pdev) @@ -915,8 +951,11 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) spdev = pdev; - subsys_notif_register_notifier("adsp", &auto_spf_dummy_ssr_notifier); - dev_info(&pdev->dev, "Audio driver register for SSR complete\n"); + ret = misc_register(&virt_sndcard_ctl_misc); + if (ret) { + pr_err("Audio virtual sndcard ctrl register fail, ret=%d\n", ret); + } + dev_info(&pdev->dev, "Audio virtual sndcard ctrl register complete\n"); return 0; err: @@ -926,7 +965,7 @@ err: static int msm_asoc_machine_remove(struct platform_device *pdev) { - + misc_deregister(&virt_sndcard_ctl_misc); return 0; } diff --git a/asoc/msm-pcm-routing-auto.c b/asoc/msm-pcm-routing-auto.c index 5819804020bd..5b4a572cef52 100755 --- a/asoc/msm-pcm-routing-auto.c +++ b/asoc/msm-pcm-routing-auto.c @@ -14416,6 +14416,11 @@ static const struct snd_kcontrol_new quat_tdm_rx_3_port_mixer_controls[] = { }; static const struct snd_kcontrol_new quat_tdm_rx_7_port_mixer_controls[] = { + SOC_DOUBLE_EXT("TERT_TDM_TX_7", SND_SOC_NOPM, + MSM_BACKEND_DAI_QUAT_TDM_RX_7, + MSM_BACKEND_DAI_TERT_TDM_TX_7, 1, 0, + msm_routing_get_port_mixer, + msm_routing_put_port_mixer), SOC_DOUBLE_EXT("QUAT_TDM_TX_7", SND_SOC_NOPM, MSM_BACKEND_DAI_QUAT_TDM_RX_7, MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0, @@ -29209,6 +29214,7 @@ static const struct snd_soc_dapm_route intercon_tdm[] = { {"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"}, + {"QUAT_TDM_RX_7 Port Mixer", "TERT_TDM_TX_7", "TERT_TDM_TX_7"}, {"QUAT_TDM_RX_7 Port Mixer", "QUAT_TDM_TX_7", "QUAT_TDM_TX_7"}, {"QUAT_TDM_RX_7 Port Mixer", "QUIN_TDM_TX_7", "QUIN_TDM_TX_7"}, {"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"}, diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index 5363641b5644..c7353b9ae05d 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -1392,6 +1392,16 @@ SND_SOC_DAILINK_DEFS(sep_tdm_tx_0_dummy, DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); +SND_SOC_DAILINK_DEFS(oct_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(oct_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + SND_SOC_DAILINK_DEFS(hs_if0_tdm_rx_0_dummy, DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), @@ -1422,6 +1432,26 @@ SND_SOC_DAILINK_DEFS(hs_if2_tdm_tx_0_dummy, DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); +SND_SOC_DAILINK_DEFS(hs_if3_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if3_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if4_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if4_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + SND_SOC_DAILINK_DEFS(voicemmode1_hostless, DAILINK_COMP_ARRAY(COMP_CPU("VoiceMMode1")), DAILINK_COMP_ARRAY(COMP_CODEC("snd-soc-dummy", "snd-soc-dummy-dai")), diff --git a/asoc/sa8155.c b/asoc/sa8155.c index 78254f73a0fa..c90ab061bc06 100644 --- a/asoc/sa8155.c +++ b/asoc/sa8155.c @@ -5503,7 +5503,7 @@ static int msm_pinctrl_mclk_enable(struct platform_device *pdev) np = of_parse_phandle(pdev->dev.of_node, mclk_gpio_phandle[i], 0); if (!np) { - pr_err("%s: device node %s is null\n", __func__, mclk_gpio_phandle[i]); + pr_debug("%s: device node %s is null\n", __func__, mclk_gpio_phandle[i]); continue; } pdev_np = of_find_device_by_node(np); diff --git a/dsp/audio_notifier.c b/dsp/audio_notifier.c index 9f2d4d5c107f..9c54afb1dbdd 100644 --- a/dsp/audio_notifier.c +++ b/dsp/audio_notifier.c @@ -423,7 +423,7 @@ static int audio_notifier_convert_opcode(unsigned long opcode, int ret = 0; switch (opcode) { - case SUBSYS_BEFORE_SHUTDOWN: + case SUBSYS_AFTER_SHUTDOWN: case SERVREG_NOTIF_SERVICE_STATE_DOWN_V01: *notifier_opcode = AUDIO_NOTIFIER_SERVICE_DOWN; break; diff --git a/dsp/q6asm.c b/dsp/q6asm.c index 167ea186fff3..ed84f225f017 100644 --- a/dsp/q6asm.c +++ b/dsp/q6asm.c @@ -11362,7 +11362,7 @@ static int q6asm_get_asm_topology_apptype(struct q6asm_cal_info *cal_info, struc goto unlock; } } else { - cal_block = q6asm_find_cal_by_buf_number(ASM_TOPOLOGY_CAL, 0, 0, ac->fedai_id); + cal_block = q6asm_find_cal_by_buf_number(ASM_TOPOLOGY_CAL, 0, 0, path); if (cal_block == NULL) { pr_debug("%s: Couldn't find cal_block with buf_number, re-routing " "search using CAL type only\n", __func__);