diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index 79aefc8f83..67a6220bdf 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -33,6 +33,12 @@ SND_SOC_DAILINK_DEFS(slimbus_7_tx, "btfm_bt_sco_slim_tx")), DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); +SND_SOC_DAILINK_DEFS(slimbus_8_tx, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("btfmslim_slave", + "btfm_fm_slim_tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + SND_SOC_DAILINK_DEFS(btfm_0_rx, DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), DAILINK_COMP_ARRAY(COMP_CODEC("btfmcodec_dev", diff --git a/asoc/pineapple.c b/asoc/pineapple.c index a89bad24ee..2ba809975c 100644 --- a/asoc/pineapple.c +++ b/asoc/pineapple.c @@ -613,6 +613,42 @@ static struct snd_soc_dai_link msm_wcn_be_dai_links[] = { SND_SOC_DAILINK_REG(slimbus_7_tx), }, }; + +static struct snd_soc_dai_link msm_wcn_btfm_be_dai_links[] = { + { + .name = LPASS_BE_SLIMBUS_7_RX, + .stream_name = LPASS_BE_SLIMBUS_7_RX, + .playback_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .init = &msm_wcn_init, + .ops = &msm_common_be_ops, + /* dai link has playback support */ + .ignore_pmdown_time = 1, + .ignore_suspend = 1, + SND_SOC_DAILINK_REG(slimbus_7_rx), + }, + { + .name = LPASS_BE_SLIMBUS_7_TX, + .stream_name = LPASS_BE_SLIMBUS_7_TX, + .capture_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ops = &msm_common_be_ops, + .ignore_suspend = 1, + SND_SOC_DAILINK_REG(slimbus_7_tx), + }, + { + .name = LPASS_BE_SLIMBUS_8_TX, + .stream_name = LPASS_BE_SLIMBUS_8_TX, + .capture_only = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ops = &msm_common_be_ops, + .ignore_suspend = 1, + SND_SOC_DAILINK_REG(slimbus_8_tx), + }, +}; #else static struct snd_soc_dai_link msm_wcn_be_dai_links[] = { { @@ -1274,7 +1310,7 @@ static struct snd_soc_dai_link msm_pineapple_dai_links[ ARRAY_SIZE(msm_va_cdc_dma_be_dai_links) + ARRAY_SIZE(ext_disp_be_dai_link) + ARRAY_SIZE(msm_common_be_dai_links) + - ARRAY_SIZE(msm_wcn_be_dai_links) + + ARRAY_SIZE(msm_wcn_btfm_be_dai_links) + ARRAY_SIZE(msm_mi2s_dai_links) + ARRAY_SIZE(msm_tdm_dai_links)]; @@ -1613,6 +1649,16 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev, int w msm_wcn_be_dai_links, sizeof(msm_wcn_be_dai_links)); total_links += ARRAY_SIZE(msm_wcn_be_dai_links); + } else { + rc = of_property_read_u32(dev->of_node, "qcom,wcn-btfm", &val); + if (!rc && val) { + dev_dbg(dev, "%s(): WCN BT FM support present\n", + __func__); + memcpy(msm_pineapple_dai_links + total_links, + msm_wcn_btfm_be_dai_links, + sizeof(msm_wcn_btfm_be_dai_links)); + total_links += ARRAY_SIZE(msm_wcn_btfm_be_dai_links); + } } dailink = msm_pineapple_dai_links;