struct regmap *regmap = wsa->regmap;
 
        if (enable) {
+               int ret;
+
+               ret = clk_prepare_enable(wsa->mclk);
+               if (ret) {
+                       dev_err(wsa->dev, "failed to enable mclk\n");
+                       return ret;
+               }
                wsa_macro_mclk_enable(wsa, true);
 
                /* reset swr ip */
                regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL,
                                   CDC_WSA_SWR_CLK_EN_MASK, 0);
                wsa_macro_mclk_enable(wsa, false);
+               clk_disable_unprepare(wsa->mclk);
        }
 
        return 0;
        struct clk_init_data init;
        int ret;
 
-       parent_clk_name = __clk_get_name(wsa->mclk);
+       parent_clk_name = __clk_get_name(wsa->npl);
 
        init.name = clk_name;
        init.ops = &swclk_gate_ops;