]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: codecs: lpass-tx-macro: Add SM6115 support
authorKonrad Dybcio <konrad.dybcio@linaro.org>
Fri, 25 Aug 2023 17:23:13 +0000 (19:23 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 11 Sep 2023 00:24:05 +0000 (01:24 +0100)
SM6115 has a TX macro, which surprisingly doesn't host a SWR master.
Conditionally skip the SWR reset sequence on this platform.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20230825-topic-6115tx-v1-2-ebed201ad54b@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/lpass-macro-common.h
sound/soc/codecs/lpass-tx-macro.c

index 4eb886565ea3677634f9978df976ee712da10356..d3684c7ab9305d4f5aefbfd8bc599953abf84964 100644 (file)
@@ -8,6 +8,8 @@
 
 /* NPL clock is expected */
 #define LPASS_MACRO_FLAG_HAS_NPL_CLOCK         BIT(0)
+/* The soundwire block should be internally reset at probe */
+#define LPASS_MACRO_FLAG_RESET_SWR             BIT(1)
 
 struct lpass_macro {
        struct device *macro_pd;
index 3e33418898e8260710c11b751ae6f52dc7ff0665..82f9873ffada0af35a6729ee5ee530055d82417b 100644 (file)
@@ -2045,15 +2045,19 @@ static int tx_macro_probe(struct platform_device *pdev)
        if (ret)
                goto err_fsgen;
 
+
        /* reset soundwire block */
-       regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL,
-                          CDC_TX_SWR_RESET_MASK, CDC_TX_SWR_RESET_ENABLE);
+       if (flags & LPASS_MACRO_FLAG_RESET_SWR)
+               regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL,
+                                  CDC_TX_SWR_RESET_MASK, CDC_TX_SWR_RESET_ENABLE);
 
        regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL,
                           CDC_TX_SWR_CLK_EN_MASK,
                           CDC_TX_SWR_CLK_ENABLE);
-       regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL,
-                          CDC_TX_SWR_RESET_MASK, 0x0);
+
+       if (flags & LPASS_MACRO_FLAG_RESET_SWR)
+               regmap_update_bits(tx->regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL,
+                                  CDC_TX_SWR_RESET_MASK, 0x0);
 
        ret = devm_snd_soc_register_component(dev, &tx_macro_component_drv,
                                              tx_macro_dai,
@@ -2158,18 +2162,22 @@ static const struct dev_pm_ops tx_macro_pm_ops = {
 static const struct of_device_id tx_macro_dt_match[] = {
        {
                .compatible = "qcom,sc7280-lpass-tx-macro",
+               .data = (void *)(LPASS_MACRO_FLAG_HAS_NPL_CLOCK | LPASS_MACRO_FLAG_RESET_SWR),
+       }, {
+               .compatible = "qcom,sm6115-lpass-tx-macro",
                .data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
        }, {
                .compatible = "qcom,sm8250-lpass-tx-macro",
-               .data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
+               .data = (void *)(LPASS_MACRO_FLAG_HAS_NPL_CLOCK | LPASS_MACRO_FLAG_RESET_SWR),
        }, {
                .compatible = "qcom,sm8450-lpass-tx-macro",
-               .data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
+               .data = (void *)(LPASS_MACRO_FLAG_HAS_NPL_CLOCK | LPASS_MACRO_FLAG_RESET_SWR),
        }, {
                .compatible = "qcom,sm8550-lpass-tx-macro",
+               .data = (void *)LPASS_MACRO_FLAG_RESET_SWR,
        }, {
                .compatible = "qcom,sc8280xp-lpass-tx-macro",
-               .data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
+               .data = (void *)(LPASS_MACRO_FLAG_HAS_NPL_CLOCK | LPASS_MACRO_FLAG_RESET_SWR),
        },
        { }
 };