Loading asoc/Kbuild +1 −1 Original line number Original line Diff line number Diff line Loading @@ -186,7 +186,7 @@ ifdef CONFIG_SND_SOC_SA8155 MACHINE_OBJS += sa8155.o MACHINE_OBJS += sa8155.o endif endif # for gvmgh sound card driver # for gvm sound card driver ifdef CONFIG_SND_SOC_GVM_AUTO_SPF ifdef CONFIG_SND_SOC_GVM_AUTO_SPF SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o endif endif Loading asoc/codecs/wcd937x/wcd937x.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -2961,6 +2961,8 @@ static void wcd937x_soc_codec_remove(struct snd_soc_component *component) wcd937x->register_notifier(wcd937x->handle, wcd937x->register_notifier(wcd937x->handle, &wcd937x->nblock, &wcd937x->nblock, false); false); wcd937x_mbhc_deinit(component); return; return; } } Loading asoc/codecs/wcd938x/wcd938x.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -3961,6 +3961,7 @@ static void wcd938x_soc_codec_remove(struct snd_soc_component *component) wcd938x->register_notifier(wcd938x->handle, wcd938x->register_notifier(wcd938x->handle, &wcd938x->nblock, &wcd938x->nblock, false); false); wcd938x_mbhc_deinit(component); } } static int wcd938x_soc_codec_suspend(struct snd_soc_component *component) static int wcd938x_soc_codec_suspend(struct snd_soc_component *component) Loading asoc/gvm_auto_spf_dummy.c +101 −62 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <linux/slab.h> #include <linux/slab.h> #include <linux/io.h> #include <linux/io.h> #include <linux/module.h> #include <linux/module.h> #include <linux/miscdevice.h> #include <linux/input.h> #include <linux/input.h> #include <linux/of_device.h> #include <linux/of_device.h> #include <linux/pm_qos.h> #include <linux/pm_qos.h> Loading @@ -30,8 +31,6 @@ #include <sound/info.h> #include <sound/info.h> #include <dsp/audio_notifier.h> #include <dsp/audio_notifier.h> #include "msm_dailink.h" #include "msm_dailink.h" #include <soc/qcom/subsystem_restart.h> #include <soc/qcom/subsystem_notif.h> #include <soc/qcom/boot_stats.h> #include <soc/qcom/boot_stats.h> Loading Loading @@ -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 */ /* BackEnd DAI Links */ { { .name = "PRI_TDM_RX_0_DUMMY", .name = "PRI_TDM_RX_0_DUMMY", Loading Loading @@ -467,6 +466,26 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { SND_SOC_DAILINK_REG(sep_tdm_tx_0_dummy), 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", .name = "HS_IF0_TDM_RX_0_DUMMY", .stream_name = "TDM-LPAIF_SDR-RX-PRIMARY", .stream_name = "TDM-LPAIF_SDR-RX-PRIMARY", .dpcm_playback = 1, .dpcm_playback = 1, Loading Loading @@ -526,6 +545,46 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { .ignore_pmdown_time = 1, .ignore_pmdown_time = 1, SND_SOC_DAILINK_REG(hs_if2_tdm_tx_0_dummy), 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[] = { static struct snd_soc_dai_link msm_talos_dai_links[] = { Loading Loading @@ -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 = { struct snd_soc_card snd_soc_card_gvm_auto_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", }; static int msm_populate_dai_link_component_of_node( static int msm_populate_dai_link_component_of_node( struct snd_soc_card *card) struct snd_soc_card *card) Loading Loading @@ -751,21 +800,11 @@ static const struct of_device_id gvm_asoc_machine_of_match[] = { .data = "adp_star_codec"}, .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) static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) { { struct snd_soc_card *card = NULL; struct snd_soc_card *card = NULL; struct snd_soc_dai_link *dailink; const struct of_device_id *match = NULL; int total_links; const struct of_device_id *match; match = of_match_node(gvm_asoc_machine_of_match, dev->of_node); match = of_match_node(gvm_asoc_machine_of_match, dev->of_node); if (!match) { if (!match) { Loading @@ -774,33 +813,17 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) return NULL; return NULL; } } if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) { card = &snd_soc_card_gvm_auto_dummy_msm; 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; if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) { 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")) { } else if (!strcmp(match->compatible, "qcom,6155-spf-asoc-snd-adp-star")) { card = &snd_soc_card_auto_talos_dummy_msm; card->dai_link = msm_talos_dai_links; total_links = ARRAY_SIZE(msm_talos_dai_links); card->num_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; } else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) { } else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) { card = &snd_soc_card_auto_makena_dummy_msm; card->dai_link = msm_gvm_auto_dai_links; total_links = ARRAY_SIZE(msm_gvm8295_dai_links); card->num_links = ARRAY_SIZE(msm_gvm_auto_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; } } return card; return card; Loading @@ -827,29 +850,42 @@ void msm_common_set_pdata(struct snd_soc_card *card, pdata->common_pdata = common_pdata; pdata->common_pdata = common_pdata; } } static int auto_spf_dummy_ssr_cb(struct notifier_block *this, #define AUTO_VIRT_SNDCARD_ONLINE 0 unsigned long code, #define AUTO_VIRT_SNDCARD_OFFLINE 1 void *data) 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); struct snd_soc_card *card = platform_get_drvdata(spdev); switch (code) { switch (cmd) { case SUBSYS_BEFORE_SHUTDOWN: case AUTO_VIRT_SNDCARD_OFFLINE: snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n"); dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n"); break; break; case SUBSYS_AFTER_POWERUP: case AUTO_VIRT_SNDCARD_ONLINE: snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE dev_info(&spdev->dev, "ssr complete, mark sndcard online\n"); dev_info(&spdev->dev, "ssr complete, mark sndcard online\n"); break; break; default: default: pr_err("%s: ioctl not found\n", __func__); ret = -EFAULT; break; break; } } return 0; return ret; } } static struct notifier_block auto_spf_dummy_ssr_notifier = { static const struct file_operations virt_sndcard_ctl_fops = { .notifier_call = auto_spf_dummy_ssr_cb, .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) static int msm_asoc_machine_probe(struct platform_device *pdev) Loading Loading @@ -915,8 +951,11 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) spdev = pdev; spdev = pdev; subsys_notif_register_notifier("adsp", &auto_spf_dummy_ssr_notifier); ret = misc_register(&virt_sndcard_ctl_misc); dev_info(&pdev->dev, "Audio driver register for SSR complete\n"); 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; return 0; err: err: Loading @@ -926,7 +965,7 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) static int msm_asoc_machine_remove(struct platform_device *pdev) static int msm_asoc_machine_remove(struct platform_device *pdev) { { misc_deregister(&virt_sndcard_ctl_misc); return 0; return 0; } } Loading asoc/msm-pcm-routing-auto.c +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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[] = { 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, SOC_DOUBLE_EXT("QUAT_TDM_TX_7", SND_SOC_NOPM, MSM_BACKEND_DAI_QUAT_TDM_RX_7, MSM_BACKEND_DAI_QUAT_TDM_RX_7, MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0, MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0, Loading Loading @@ -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 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"}, {"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", "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 Port Mixer", "QUIN_TDM_TX_7", "QUIN_TDM_TX_7"}, {"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"}, {"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"}, Loading
asoc/Kbuild +1 −1 Original line number Original line Diff line number Diff line Loading @@ -186,7 +186,7 @@ ifdef CONFIG_SND_SOC_SA8155 MACHINE_OBJS += sa8155.o MACHINE_OBJS += sa8155.o endif endif # for gvmgh sound card driver # for gvm sound card driver ifdef CONFIG_SND_SOC_GVM_AUTO_SPF ifdef CONFIG_SND_SOC_GVM_AUTO_SPF SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o endif endif Loading
asoc/codecs/wcd937x/wcd937x.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -2961,6 +2961,8 @@ static void wcd937x_soc_codec_remove(struct snd_soc_component *component) wcd937x->register_notifier(wcd937x->handle, wcd937x->register_notifier(wcd937x->handle, &wcd937x->nblock, &wcd937x->nblock, false); false); wcd937x_mbhc_deinit(component); return; return; } } Loading
asoc/codecs/wcd938x/wcd938x.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -3961,6 +3961,7 @@ static void wcd938x_soc_codec_remove(struct snd_soc_component *component) wcd938x->register_notifier(wcd938x->handle, wcd938x->register_notifier(wcd938x->handle, &wcd938x->nblock, &wcd938x->nblock, false); false); wcd938x_mbhc_deinit(component); } } static int wcd938x_soc_codec_suspend(struct snd_soc_component *component) static int wcd938x_soc_codec_suspend(struct snd_soc_component *component) Loading
asoc/gvm_auto_spf_dummy.c +101 −62 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <linux/slab.h> #include <linux/slab.h> #include <linux/io.h> #include <linux/io.h> #include <linux/module.h> #include <linux/module.h> #include <linux/miscdevice.h> #include <linux/input.h> #include <linux/input.h> #include <linux/of_device.h> #include <linux/of_device.h> #include <linux/pm_qos.h> #include <linux/pm_qos.h> Loading @@ -30,8 +31,6 @@ #include <sound/info.h> #include <sound/info.h> #include <dsp/audio_notifier.h> #include <dsp/audio_notifier.h> #include "msm_dailink.h" #include "msm_dailink.h" #include <soc/qcom/subsystem_restart.h> #include <soc/qcom/subsystem_notif.h> #include <soc/qcom/boot_stats.h> #include <soc/qcom/boot_stats.h> Loading Loading @@ -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 */ /* BackEnd DAI Links */ { { .name = "PRI_TDM_RX_0_DUMMY", .name = "PRI_TDM_RX_0_DUMMY", Loading Loading @@ -467,6 +466,26 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { SND_SOC_DAILINK_REG(sep_tdm_tx_0_dummy), 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", .name = "HS_IF0_TDM_RX_0_DUMMY", .stream_name = "TDM-LPAIF_SDR-RX-PRIMARY", .stream_name = "TDM-LPAIF_SDR-RX-PRIMARY", .dpcm_playback = 1, .dpcm_playback = 1, Loading Loading @@ -526,6 +545,46 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = { .ignore_pmdown_time = 1, .ignore_pmdown_time = 1, SND_SOC_DAILINK_REG(hs_if2_tdm_tx_0_dummy), 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[] = { static struct snd_soc_dai_link msm_talos_dai_links[] = { Loading Loading @@ -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 = { struct snd_soc_card snd_soc_card_gvm_auto_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", }; static int msm_populate_dai_link_component_of_node( static int msm_populate_dai_link_component_of_node( struct snd_soc_card *card) struct snd_soc_card *card) Loading Loading @@ -751,21 +800,11 @@ static const struct of_device_id gvm_asoc_machine_of_match[] = { .data = "adp_star_codec"}, .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) static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) { { struct snd_soc_card *card = NULL; struct snd_soc_card *card = NULL; struct snd_soc_dai_link *dailink; const struct of_device_id *match = NULL; int total_links; const struct of_device_id *match; match = of_match_node(gvm_asoc_machine_of_match, dev->of_node); match = of_match_node(gvm_asoc_machine_of_match, dev->of_node); if (!match) { if (!match) { Loading @@ -774,33 +813,17 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) return NULL; return NULL; } } if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) { card = &snd_soc_card_gvm_auto_dummy_msm; 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; if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) { 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")) { } else if (!strcmp(match->compatible, "qcom,6155-spf-asoc-snd-adp-star")) { card = &snd_soc_card_auto_talos_dummy_msm; card->dai_link = msm_talos_dai_links; total_links = ARRAY_SIZE(msm_talos_dai_links); card->num_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; } else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) { } else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) { card = &snd_soc_card_auto_makena_dummy_msm; card->dai_link = msm_gvm_auto_dai_links; total_links = ARRAY_SIZE(msm_gvm8295_dai_links); card->num_links = ARRAY_SIZE(msm_gvm_auto_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; } } return card; return card; Loading @@ -827,29 +850,42 @@ void msm_common_set_pdata(struct snd_soc_card *card, pdata->common_pdata = common_pdata; pdata->common_pdata = common_pdata; } } static int auto_spf_dummy_ssr_cb(struct notifier_block *this, #define AUTO_VIRT_SNDCARD_ONLINE 0 unsigned long code, #define AUTO_VIRT_SNDCARD_OFFLINE 1 void *data) 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); struct snd_soc_card *card = platform_get_drvdata(spdev); switch (code) { switch (cmd) { case SUBSYS_BEFORE_SHUTDOWN: case AUTO_VIRT_SNDCARD_OFFLINE: snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n"); dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n"); break; break; case SUBSYS_AFTER_POWERUP: case AUTO_VIRT_SNDCARD_ONLINE: snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE dev_info(&spdev->dev, "ssr complete, mark sndcard online\n"); dev_info(&spdev->dev, "ssr complete, mark sndcard online\n"); break; break; default: default: pr_err("%s: ioctl not found\n", __func__); ret = -EFAULT; break; break; } } return 0; return ret; } } static struct notifier_block auto_spf_dummy_ssr_notifier = { static const struct file_operations virt_sndcard_ctl_fops = { .notifier_call = auto_spf_dummy_ssr_cb, .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) static int msm_asoc_machine_probe(struct platform_device *pdev) Loading Loading @@ -915,8 +951,11 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) spdev = pdev; spdev = pdev; subsys_notif_register_notifier("adsp", &auto_spf_dummy_ssr_notifier); ret = misc_register(&virt_sndcard_ctl_misc); dev_info(&pdev->dev, "Audio driver register for SSR complete\n"); 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; return 0; err: err: Loading @@ -926,7 +965,7 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) static int msm_asoc_machine_remove(struct platform_device *pdev) static int msm_asoc_machine_remove(struct platform_device *pdev) { { misc_deregister(&virt_sndcard_ctl_misc); return 0; return 0; } } Loading
asoc/msm-pcm-routing-auto.c +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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[] = { 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, SOC_DOUBLE_EXT("QUAT_TDM_TX_7", SND_SOC_NOPM, MSM_BACKEND_DAI_QUAT_TDM_RX_7, MSM_BACKEND_DAI_QUAT_TDM_RX_7, MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0, MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0, Loading Loading @@ -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 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"}, {"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"}, {"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", "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 Port Mixer", "QUIN_TDM_TX_7", "QUIN_TDM_TX_7"}, {"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"}, {"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"},