Loading asoc/holi.c +104 −108 Original line number Diff line number Diff line Loading @@ -181,6 +181,7 @@ struct msm_asoc_mach_data { struct device_node *fsa_handle; struct clk *lpass_audio_hw_vote; int core_audio_vote_count; u32 wcd_disabled; }; struct tdm_port { Loading Loading @@ -747,6 +748,70 @@ static struct wcd_mbhc_config wcd_mbhc_cfg = { .moisture_duty_cycle_en = true, }; /* set audio task affinity to core 1 & 2 */ static const unsigned int audio_core_list[] = {1, 2}; static cpumask_t audio_cpu_map = CPU_MASK_NONE; static struct dev_pm_qos_request *msm_audio_req = NULL; static unsigned int qos_client_active_cnt = 0; static void msm_audio_add_qos_request() { int i; int cpu = 0; msm_audio_req = kzalloc(sizeof(struct dev_pm_qos_request) * NR_CPUS, GFP_KERNEL); if (!msm_audio_req) { pr_err("%s failed to alloc mem for qos req.\n", __func__); return; } for (i = 0; i < ARRAY_SIZE(audio_core_list); i++) { if (audio_core_list[i] >= NR_CPUS) pr_err("%s incorrect cpu id: %d specified.\n", __func__, audio_core_list[i]); else cpumask_set_cpu(audio_core_list[i], &audio_cpu_map); } for_each_cpu(cpu, &audio_cpu_map) { dev_pm_qos_add_request(get_cpu_device(cpu), &msm_audio_req[cpu], DEV_PM_QOS_RESUME_LATENCY, PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE); pr_debug("%s set cpu affinity to core %d.\n", __func__, cpu); } } static void msm_audio_remove_qos_request() { int cpu = 0; if (msm_audio_req) { for_each_cpu(cpu, &audio_cpu_map) { dev_pm_qos_remove_request( &msm_audio_req[cpu]); pr_debug("%s remove cpu affinity of core %d.\n", __func__, cpu); } kfree(msm_audio_req); } } static void msm_audio_update_qos_request(u32 latency) { int cpu = 0; if (msm_audio_req) { for_each_cpu(cpu, &audio_cpu_map) { dev_pm_qos_update_request( &msm_audio_req[cpu], latency); pr_debug("%s update latency of core %d to %ul.\n", __func__, cpu, latency); } } } static inline int param_is_mask(int p) { return (p >= SNDRV_PCM_HW_PARAM_FIRST_MASK) && Loading Loading @@ -4277,10 +4342,25 @@ static int msm_snd_cdc_dma_hw_params(struct snd_pcm_substream *substream, static int msm_fe_qos_prepare(struct snd_pcm_substream *substream) { pr_debug("%s: TODO: add new QOS implementation\n", __func__); (void)substream; qos_client_active_cnt++; if (qos_client_active_cnt == 1) msm_audio_update_qos_request(MSM_LL_QOS_VALUE); return 0; } static void msm_fe_qos_shutdown(struct snd_pcm_substream *substream) { (void)substream; if (qos_client_active_cnt > 0) qos_client_active_cnt--; if (qos_client_active_cnt == 0) msm_audio_update_qos_request(PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE); } void mi2s_disable_audio_vote(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; Loading Loading @@ -4510,6 +4590,7 @@ static struct snd_soc_ops msm_mi2s_be_ops = { static struct snd_soc_ops msm_fe_qos_ops = { .prepare = msm_fe_qos_prepare, .shutdown = msm_fe_qos_shutdown, }; static struct snd_soc_ops msm_cdc_dma_be_ops = { Loading Loading @@ -5767,94 +5848,6 @@ static struct snd_soc_dai_link msm_rx_tx_cdc_dma_be_dai_links[] = { }, }; static struct snd_soc_dai_link msm_rx_tx_cdc937x_dma_be_dai_links[] = { /* RX CDC DMA Backend DAI Links */ { .name = LPASS_BE_RX_CDC_DMA_RX_0, .stream_name = "RX CDC DMA0 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_0, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx0_937x), .init = &msm_aux_codec_init, }, { .name = LPASS_BE_RX_CDC_DMA_RX_1, .stream_name = "RX CDC DMA1 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_1, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx1_937x), }, { .name = LPASS_BE_RX_CDC_DMA_RX_2, .stream_name = "RX CDC DMA2 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_2, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx2_937x), }, { .name = LPASS_BE_RX_CDC_DMA_RX_3, .stream_name = "RX CDC DMA3 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_3, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx3_937x), }, /* TX CDC DMA Backend DAI Links */ { .name = LPASS_BE_TX_CDC_DMA_TX_3, .stream_name = "TX CDC DMA3 Capture", .no_pcm = 1, .dpcm_capture = 1, .id = MSM_BACKEND_DAI_TX_CDC_DMA_TX_3, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(tx_dma_tx3_937x), }, { .name = LPASS_BE_TX_CDC_DMA_TX_4, .stream_name = "TX CDC DMA4 Capture", .no_pcm = 1, .dpcm_capture = 1, .id = MSM_BACKEND_DAI_TX_CDC_DMA_TX_4, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(tx_dma_tx4_937x), }, }; static struct snd_soc_dai_link msm_va_cdc_dma_be_dai_links[] = { { .name = LPASS_BE_VA_CDC_DMA_TX_0, Loading Loading @@ -6171,7 +6164,6 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) u32 val = 0; u32 wcn_btfm_intf = 0; const struct of_device_id *match; int is_wcd937x_codec = 1; match = of_match_node(holi_asoc_machine_of_match, dev->of_node); if (!match) { Loading @@ -6180,13 +6172,6 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) return NULL; } rc = of_property_read_u32(dev->of_node, "qcom,is-wcd937x-codec", &is_wcd937x_codec); if (rc) { dev_dbg(dev, "%s: No DT match is-primary-codec\n", __func__); } if (!strcmp(match->data, "codec")) { card = &snd_soc_card_holi_msm; Loading @@ -6205,16 +6190,9 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) sizeof(msm_common_be_dai_links)); total_links += ARRAY_SIZE(msm_common_be_dai_links); if (is_wcd937x_codec) { memcpy(msm_holi_dai_links + total_links, msm_rx_tx_cdc937x_dma_be_dai_links, sizeof(msm_rx_tx_cdc_dma_be_dai_links)); } else { memcpy(msm_holi_dai_links + total_links, msm_rx_tx_cdc_dma_be_dai_links, sizeof(msm_rx_tx_cdc_dma_be_dai_links)); } total_links += ARRAY_SIZE(msm_rx_tx_cdc_dma_be_dai_links); Loading Loading @@ -6397,6 +6375,10 @@ static int msm_aux_codec_init(struct snd_soc_pcm_runtime *rtd) struct snd_card *card = NULL; struct msm_asoc_mach_data *pdata; pdata = snd_soc_card_get_drvdata(rtd->card); if(!pdata) return -EINVAL; bolero_component = snd_soc_rtdcom_lookup(rtd, "bolero_codec"); if (!bolero_component) { pr_err("%s: could not find component for bolero_codec\n", Loading @@ -6404,6 +6386,12 @@ static int msm_aux_codec_init(struct snd_soc_pcm_runtime *rtd) return -EINVAL; } if (pdata->wcd_disabled) { bolero_set_port_map(bolero_component, ARRAY_SIZE(sm_port_map), sm_port_map); return 0; } component = snd_soc_rtdcom_lookup(rtd, WCD938X_DRV_NAME); if (!component) { component = snd_soc_rtdcom_lookup(rtd, WCD937X_DRV_NAME); Loading @@ -6425,7 +6413,6 @@ static int msm_aux_codec_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_ignore_suspend(dapm, "AMIC4"); snd_soc_dapm_sync(dapm); pdata = snd_soc_card_get_drvdata(component->card); if (!pdata->codec_root) { entry = msm_snd_info_create_subdir(card->module, "codecs", card->proc_root); Loading Loading @@ -6633,6 +6620,10 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) if (!pdata) return -ENOMEM; of_property_read_u32(pdev->dev.of_node, "qcom,wcd-disabled", &pdata->wcd_disabled); card = populate_snd_card_dailinks(&pdev->dev); if (!card) { dev_err(&pdev->dev, "%s: Card uninitialized\n", __func__); Loading Loading @@ -6787,6 +6778,9 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) is_initial_boot = true; /* Add QoS request for audio tasks */ msm_audio_add_qos_request(); return 0; err: devm_kfree(&pdev->dev, pdata); Loading @@ -6800,6 +6794,7 @@ static int msm_asoc_machine_remove(struct platform_device *pdev) snd_event_master_deregister(&pdev->dev); snd_soc_unregister_card(card); msm_i2s_auxpcm_deinit(); msm_audio_remove_qos_request(); return 0; } Loading @@ -6817,6 +6812,7 @@ static struct platform_driver holi_asoc_machine_driver = { }; module_platform_driver(holi_asoc_machine_driver); MODULE_SOFTDEP("pre: bt_fm_slim"); MODULE_DESCRIPTION("ALSA SoC msm"); MODULE_LICENSE("GPL v2"); MODULE_ALIAS("platform:" DRV_NAME); Loading asoc/msm_holi_dailink.h +7 −44 Original line number Diff line number Diff line Loading @@ -399,60 +399,36 @@ SND_SOC_DAILINK_DEFS(quat_auxpcm_tx, SND_SOC_DAILINK_DEFS(rx_dma_rx0, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45104")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx0_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45104")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx1, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45106")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx2"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx1_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45106")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx2"), COMP_CODEC("wsa-codec1", "wsa_rx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx2, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45108")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx3"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx2_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45108")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx3"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx3, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45110")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx4"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx3_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45110")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx4"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx3, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45111")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx3_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45111")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); Loading @@ -460,20 +436,7 @@ SND_SOC_DAILINK_DEFS(tx_dma_tx4, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45113")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx2"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("swr-dmic.01", "swr_dmic_tx0"), COMP_CODEC("swr-dmic.02", "swr_dmic_tx1"), COMP_CODEC("swr-dmic.03", "swr_dmic_tx2"), COMP_CODEC("swr-dmic.04", "swr_dmic_tx3")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx4_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45113")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx2"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc"), COMP_CODEC("swr-dmic.01", "swr_dmic_tx0"), COMP_CODEC("swr-dmic.02", "swr_dmic_tx1"), COMP_CODEC("swr-dmic.03", "swr_dmic_tx2"), COMP_CODEC("swr-dmic.04", "swr_dmic_tx3")), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(va_dma_tx0, Loading Loading
asoc/holi.c +104 −108 Original line number Diff line number Diff line Loading @@ -181,6 +181,7 @@ struct msm_asoc_mach_data { struct device_node *fsa_handle; struct clk *lpass_audio_hw_vote; int core_audio_vote_count; u32 wcd_disabled; }; struct tdm_port { Loading Loading @@ -747,6 +748,70 @@ static struct wcd_mbhc_config wcd_mbhc_cfg = { .moisture_duty_cycle_en = true, }; /* set audio task affinity to core 1 & 2 */ static const unsigned int audio_core_list[] = {1, 2}; static cpumask_t audio_cpu_map = CPU_MASK_NONE; static struct dev_pm_qos_request *msm_audio_req = NULL; static unsigned int qos_client_active_cnt = 0; static void msm_audio_add_qos_request() { int i; int cpu = 0; msm_audio_req = kzalloc(sizeof(struct dev_pm_qos_request) * NR_CPUS, GFP_KERNEL); if (!msm_audio_req) { pr_err("%s failed to alloc mem for qos req.\n", __func__); return; } for (i = 0; i < ARRAY_SIZE(audio_core_list); i++) { if (audio_core_list[i] >= NR_CPUS) pr_err("%s incorrect cpu id: %d specified.\n", __func__, audio_core_list[i]); else cpumask_set_cpu(audio_core_list[i], &audio_cpu_map); } for_each_cpu(cpu, &audio_cpu_map) { dev_pm_qos_add_request(get_cpu_device(cpu), &msm_audio_req[cpu], DEV_PM_QOS_RESUME_LATENCY, PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE); pr_debug("%s set cpu affinity to core %d.\n", __func__, cpu); } } static void msm_audio_remove_qos_request() { int cpu = 0; if (msm_audio_req) { for_each_cpu(cpu, &audio_cpu_map) { dev_pm_qos_remove_request( &msm_audio_req[cpu]); pr_debug("%s remove cpu affinity of core %d.\n", __func__, cpu); } kfree(msm_audio_req); } } static void msm_audio_update_qos_request(u32 latency) { int cpu = 0; if (msm_audio_req) { for_each_cpu(cpu, &audio_cpu_map) { dev_pm_qos_update_request( &msm_audio_req[cpu], latency); pr_debug("%s update latency of core %d to %ul.\n", __func__, cpu, latency); } } } static inline int param_is_mask(int p) { return (p >= SNDRV_PCM_HW_PARAM_FIRST_MASK) && Loading Loading @@ -4277,10 +4342,25 @@ static int msm_snd_cdc_dma_hw_params(struct snd_pcm_substream *substream, static int msm_fe_qos_prepare(struct snd_pcm_substream *substream) { pr_debug("%s: TODO: add new QOS implementation\n", __func__); (void)substream; qos_client_active_cnt++; if (qos_client_active_cnt == 1) msm_audio_update_qos_request(MSM_LL_QOS_VALUE); return 0; } static void msm_fe_qos_shutdown(struct snd_pcm_substream *substream) { (void)substream; if (qos_client_active_cnt > 0) qos_client_active_cnt--; if (qos_client_active_cnt == 0) msm_audio_update_qos_request(PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE); } void mi2s_disable_audio_vote(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; Loading Loading @@ -4510,6 +4590,7 @@ static struct snd_soc_ops msm_mi2s_be_ops = { static struct snd_soc_ops msm_fe_qos_ops = { .prepare = msm_fe_qos_prepare, .shutdown = msm_fe_qos_shutdown, }; static struct snd_soc_ops msm_cdc_dma_be_ops = { Loading Loading @@ -5767,94 +5848,6 @@ static struct snd_soc_dai_link msm_rx_tx_cdc_dma_be_dai_links[] = { }, }; static struct snd_soc_dai_link msm_rx_tx_cdc937x_dma_be_dai_links[] = { /* RX CDC DMA Backend DAI Links */ { .name = LPASS_BE_RX_CDC_DMA_RX_0, .stream_name = "RX CDC DMA0 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_0, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx0_937x), .init = &msm_aux_codec_init, }, { .name = LPASS_BE_RX_CDC_DMA_RX_1, .stream_name = "RX CDC DMA1 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_1, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx1_937x), }, { .name = LPASS_BE_RX_CDC_DMA_RX_2, .stream_name = "RX CDC DMA2 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_2, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx2_937x), }, { .name = LPASS_BE_RX_CDC_DMA_RX_3, .stream_name = "RX CDC DMA3 Playback", #if IS_ENABLED(CONFIG_AUDIO_QGKI) .dynamic_be = 1, #endif /* CONFIG_AUDIO_QGKI */ .no_pcm = 1, .dpcm_playback = 1, .id = MSM_BACKEND_DAI_RX_CDC_DMA_RX_3, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_pmdown_time = 1, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(rx_dma_rx3_937x), }, /* TX CDC DMA Backend DAI Links */ { .name = LPASS_BE_TX_CDC_DMA_TX_3, .stream_name = "TX CDC DMA3 Capture", .no_pcm = 1, .dpcm_capture = 1, .id = MSM_BACKEND_DAI_TX_CDC_DMA_TX_3, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(tx_dma_tx3_937x), }, { .name = LPASS_BE_TX_CDC_DMA_TX_4, .stream_name = "TX CDC DMA4 Capture", .no_pcm = 1, .dpcm_capture = 1, .id = MSM_BACKEND_DAI_TX_CDC_DMA_TX_4, .be_hw_params_fixup = msm_be_hw_params_fixup, .ignore_suspend = 1, .ops = &msm_cdc_dma_be_ops, SND_SOC_DAILINK_REG(tx_dma_tx4_937x), }, }; static struct snd_soc_dai_link msm_va_cdc_dma_be_dai_links[] = { { .name = LPASS_BE_VA_CDC_DMA_TX_0, Loading Loading @@ -6171,7 +6164,6 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) u32 val = 0; u32 wcn_btfm_intf = 0; const struct of_device_id *match; int is_wcd937x_codec = 1; match = of_match_node(holi_asoc_machine_of_match, dev->of_node); if (!match) { Loading @@ -6180,13 +6172,6 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) return NULL; } rc = of_property_read_u32(dev->of_node, "qcom,is-wcd937x-codec", &is_wcd937x_codec); if (rc) { dev_dbg(dev, "%s: No DT match is-primary-codec\n", __func__); } if (!strcmp(match->data, "codec")) { card = &snd_soc_card_holi_msm; Loading @@ -6205,16 +6190,9 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) sizeof(msm_common_be_dai_links)); total_links += ARRAY_SIZE(msm_common_be_dai_links); if (is_wcd937x_codec) { memcpy(msm_holi_dai_links + total_links, msm_rx_tx_cdc937x_dma_be_dai_links, sizeof(msm_rx_tx_cdc_dma_be_dai_links)); } else { memcpy(msm_holi_dai_links + total_links, msm_rx_tx_cdc_dma_be_dai_links, sizeof(msm_rx_tx_cdc_dma_be_dai_links)); } total_links += ARRAY_SIZE(msm_rx_tx_cdc_dma_be_dai_links); Loading Loading @@ -6397,6 +6375,10 @@ static int msm_aux_codec_init(struct snd_soc_pcm_runtime *rtd) struct snd_card *card = NULL; struct msm_asoc_mach_data *pdata; pdata = snd_soc_card_get_drvdata(rtd->card); if(!pdata) return -EINVAL; bolero_component = snd_soc_rtdcom_lookup(rtd, "bolero_codec"); if (!bolero_component) { pr_err("%s: could not find component for bolero_codec\n", Loading @@ -6404,6 +6386,12 @@ static int msm_aux_codec_init(struct snd_soc_pcm_runtime *rtd) return -EINVAL; } if (pdata->wcd_disabled) { bolero_set_port_map(bolero_component, ARRAY_SIZE(sm_port_map), sm_port_map); return 0; } component = snd_soc_rtdcom_lookup(rtd, WCD938X_DRV_NAME); if (!component) { component = snd_soc_rtdcom_lookup(rtd, WCD937X_DRV_NAME); Loading @@ -6425,7 +6413,6 @@ static int msm_aux_codec_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_ignore_suspend(dapm, "AMIC4"); snd_soc_dapm_sync(dapm); pdata = snd_soc_card_get_drvdata(component->card); if (!pdata->codec_root) { entry = msm_snd_info_create_subdir(card->module, "codecs", card->proc_root); Loading Loading @@ -6633,6 +6620,10 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) if (!pdata) return -ENOMEM; of_property_read_u32(pdev->dev.of_node, "qcom,wcd-disabled", &pdata->wcd_disabled); card = populate_snd_card_dailinks(&pdev->dev); if (!card) { dev_err(&pdev->dev, "%s: Card uninitialized\n", __func__); Loading Loading @@ -6787,6 +6778,9 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) is_initial_boot = true; /* Add QoS request for audio tasks */ msm_audio_add_qos_request(); return 0; err: devm_kfree(&pdev->dev, pdata); Loading @@ -6800,6 +6794,7 @@ static int msm_asoc_machine_remove(struct platform_device *pdev) snd_event_master_deregister(&pdev->dev); snd_soc_unregister_card(card); msm_i2s_auxpcm_deinit(); msm_audio_remove_qos_request(); return 0; } Loading @@ -6817,6 +6812,7 @@ static struct platform_driver holi_asoc_machine_driver = { }; module_platform_driver(holi_asoc_machine_driver); MODULE_SOFTDEP("pre: bt_fm_slim"); MODULE_DESCRIPTION("ALSA SoC msm"); MODULE_LICENSE("GPL v2"); MODULE_ALIAS("platform:" DRV_NAME); Loading
asoc/msm_holi_dailink.h +7 −44 Original line number Diff line number Diff line Loading @@ -399,60 +399,36 @@ SND_SOC_DAILINK_DEFS(quat_auxpcm_tx, SND_SOC_DAILINK_DEFS(rx_dma_rx0, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45104")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx0_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45104")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx1, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45106")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx2"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx1_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45106")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx2"), COMP_CODEC("wsa-codec1", "wsa_rx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx2, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45108")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx3"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx2_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45108")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx3"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx3, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45110")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx4"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx3_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45110")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx4"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx3, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45111")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx3_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45111")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx1"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); Loading @@ -460,20 +436,7 @@ SND_SOC_DAILINK_DEFS(tx_dma_tx4, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45113")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx2"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), COMP_CODEC("swr-dmic.01", "swr_dmic_tx0"), COMP_CODEC("swr-dmic.02", "swr_dmic_tx1"), COMP_CODEC("swr-dmic.03", "swr_dmic_tx2"), COMP_CODEC("swr-dmic.04", "swr_dmic_tx3")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx4_937x, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45113")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx2"), COMP_CODEC("wcd937x_codec", "wcd937x_cdc"), COMP_CODEC("swr-dmic.01", "swr_dmic_tx0"), COMP_CODEC("swr-dmic.02", "swr_dmic_tx1"), COMP_CODEC("swr-dmic.03", "swr_dmic_tx2"), COMP_CODEC("swr-dmic.04", "swr_dmic_tx3")), COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(va_dma_tx0, Loading