asoc: sdm660: update machine driver for QCS605 LC variant
Add clock support for digital codec MCLK in machine driver
And support for logic of parsing digital codec node only.
Change-Id: I13da7a737f4bce0dbf83dea944e47341356941a1
Signed-off-by: Viraja Kommaraju <virajak@codeaurora.org>
diff --git a/asoc/sdm660-common.c b/asoc/sdm660-common.c
index f2376b4..3695ae5 100644
--- a/asoc/sdm660-common.c
+++ b/asoc/sdm660-common.c
@@ -3043,10 +3043,30 @@
index = of_property_match_string(cdev->of_node,
"asoc-codec-names",
PMIC_INT_ANALOG_CODEC);
+ phandle = of_parse_phandle(
+ cdev->of_node,
+ "asoc-codec",
+ index);
+ dai_link[i].codecs[ANA_CDC].of_node =
+ phandle;
+ }
+ }
+ if (pdata->snd_card_val == INT_DIG_SND_CARD) {
+ if ((dai_link[i].id ==
+ MSM_BACKEND_DAI_INT0_MI2S_RX) ||
+ (dai_link[i].id ==
+ MSM_BACKEND_DAI_INT1_MI2S_RX) ||
+ (dai_link[i].id ==
+ MSM_BACKEND_DAI_INT2_MI2S_TX) ||
+ (dai_link[i].id ==
+ MSM_BACKEND_DAI_INT3_MI2S_TX)) {
+ index = of_property_match_string(cdev->of_node,
+ "asoc-codec-names",
+ MSM_INT_DIGITAL_CODEC);
phandle = of_parse_phandle(cdev->of_node,
"asoc-codec",
index);
- dai_link[i].codecs[ANA_CDC].of_node = phandle;
+ dai_link[i].codec_of_node = phandle;
}
}
}
@@ -3342,6 +3362,8 @@
.data = "tasha_codec"},
{ .compatible = "qcom,sdm670-asoc-snd-tavil",
.data = "tavil_codec"},
+ { .compatible = "qcom,qcs605-dig-asoc-snd",
+ .data = "digital_codec"},
{},
};
@@ -3388,6 +3410,11 @@
ret = msm_int_cdc_init(pdev, pdata, &card, &mbhc_cfg);
if (ret)
goto err;
+ } else if (!strcmp(match->data, "digital_codec")) {
+ pdata->snd_card_val = INT_DIG_SND_CARD;
+ ret = msm_int_cdc_init(pdev, pdata, &card, NULL);
+ if (ret)
+ goto err;
} else {
dev_err(&pdev->dev,
"%s: Not a matching DT sound node\n", __func__);
@@ -3408,6 +3435,11 @@
"qcom,cdc-ext-spk-gpios", 0);
}
+ if (pdata->snd_card_val == INT_DIG_SND_CARD) {
+ /*reading the gpio configurations from dtsi file*/
+ pdata->dmic_gpio_p = of_parse_phandle(pdev->dev.of_node,
+ "qcom,cdc-dmic-gpios", 0);
+ }
pdata->mi2s_gpio_p[PRIM_MI2S] = of_parse_phandle(pdev->dev.of_node,
"qcom,pri-mi2s-gpios", 0);
pdata->mi2s_gpio_p[SEC_MI2S] = of_parse_phandle(pdev->dev.of_node,
@@ -3479,7 +3511,7 @@
ret);
goto err;
}
- if (pdata->snd_card_val != INT_SND_CARD)
+ if (pdata->snd_card_val > INT_MAX_SND_CARD)
msm_ext_register_audio_notifier(pdev);
return 0;
@@ -3510,7 +3542,7 @@
struct snd_soc_card *card = platform_get_drvdata(pdev);
struct msm_asoc_mach_data *pdata = snd_soc_card_get_drvdata(card);
- if (pdata->snd_card_val == INT_SND_CARD)
+ if (pdata->snd_card_val <= INT_MAX_SND_CARD)
mutex_destroy(&pdata->cdc_int_mclk0_mutex);
if (gpio_is_valid(pdata->us_euro_gpio)) {
@@ -3526,7 +3558,7 @@
pdata->hph_en0_gpio = 0;
}
- if (pdata->snd_card_val != INT_SND_CARD)
+ if (pdata->snd_card_val > INT_MAX_SND_CARD)
audio_notifier_deregister("sdm660");
snd_soc_unregister_card(card);