static int swclk_gate_enable(struct clk_hw *hw)
 {
        struct rx_macro *rx = to_rx_macro(hw);
+       int ret;
+
+       ret = clk_prepare_enable(rx->mclk);
+       if (ret) {
+               dev_err(rx->dev, "unable to prepare mclk\n");
+               return ret;
+       }
 
        rx_macro_mclk_enable(rx, true);
        if (rx->reset_swr)
                           CDC_RX_SWR_CLK_EN_MASK, 0);
 
        rx_macro_mclk_enable(rx, false);
+       clk_disable_unprepare(rx->mclk);
 }
 
 static int swclk_gate_is_enabled(struct clk_hw *hw)
        struct clk_init_data init;
        int ret;
 
-       parent_clk_name = __clk_get_name(rx->mclk);
+       parent_clk_name = __clk_get_name(rx->npl);
 
        init.name = clk_name;
        init.ops = &swclk_gate_ops;