ASoC: codecs: lpass: do not reset soundwire block on clk enable
[platform/kernel/linux-starfive.git] / sound / soc / codecs / lpass-wsa-macro.c
index 5cfe96f..e6b85f3 100644 (file)
@@ -2270,17 +2270,10 @@ static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable)
                }
                wsa_macro_mclk_enable(wsa, true);
 
-               /* reset swr ip */
-               regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
-                                  CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_ENABLE);
-
                regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
                                   CDC_WSA_SWR_CLK_EN_MASK,
                                   CDC_WSA_SWR_CLK_ENABLE);
 
-               /* Bring out of reset */
-               regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
-                                  CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_DISABLE);
        } else {
                regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
                                   CDC_WSA_SWR_CLK_EN_MASK, 0);
@@ -2451,10 +2444,16 @@ static int wsa_macro_probe(struct platform_device *pdev)
        if (ret)
                goto err_fsgen;
 
-       ret = wsa_macro_register_mclk_output(wsa);
-       if (ret)
-               goto err_clkout;
+       /* reset swr ip */
+       regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
+                          CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_ENABLE);
 
+       regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
+                          CDC_WSA_SWR_CLK_EN_MASK, CDC_WSA_SWR_CLK_ENABLE);
+
+       /* Bring out of reset */
+       regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
+                          CDC_WSA_SWR_RST_EN_MASK, CDC_WSA_SWR_RST_DISABLE);
 
        ret = devm_snd_soc_register_component(dev, &wsa_macro_component_drv,
                                              wsa_macro_dai,
@@ -2468,6 +2467,10 @@ static int wsa_macro_probe(struct platform_device *pdev)
        pm_runtime_set_active(dev);
        pm_runtime_enable(dev);
 
+       ret = wsa_macro_register_mclk_output(wsa);
+       if (ret)
+               goto err_clkout;
+
        return 0;
 
 err_clkout: