struct regmap *regmap;
        int ret;
 
-       pm_runtime_enable(&pdev->dev);
-       ret = pm_clk_create(&pdev->dev);
+       ret = devm_pm_runtime_enable(&pdev->dev);
+       if (ret < 0)
+               return ret;
+
+       ret = devm_pm_clk_create(&pdev->dev);
        if (ret < 0)
                return ret;
 
        ret = pm_clk_add(&pdev->dev, "xo");
        if (ret < 0) {
                dev_err(&pdev->dev, "Failed to acquire XO clock\n");
-               goto disable_pm_runtime;
+               return ret;
        }
 
        ret = pm_clk_add(&pdev->dev, "iface");
        if (ret < 0) {
                dev_err(&pdev->dev, "Failed to acquire iface clock\n");
-               goto disable_pm_runtime;
+               return ret;
        }
 
        ret = pm_runtime_get(&pdev->dev);
        if (ret)
-               goto destroy_pm_clk;
+               return ret;
 
        regmap = qcom_cc_map(pdev, &cam_cc_sc7180_desc);
        if (IS_ERR(regmap)) {
                ret = PTR_ERR(regmap);
                pm_runtime_put(&pdev->dev);
-               goto destroy_pm_clk;
+               return ret;
        }
 
        clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
        pm_runtime_put(&pdev->dev);
        if (ret < 0) {
                dev_err(&pdev->dev, "Failed to register CAM CC clocks\n");
-               goto destroy_pm_clk;
+               return ret;
        }
 
        return 0;
-
-destroy_pm_clk:
-       pm_clk_destroy(&pdev->dev);
-
-disable_pm_runtime:
-       pm_runtime_disable(&pdev->dev);
-
-       return ret;
 }
 
 static const struct dev_pm_ops cam_cc_pm_ops = {
 
        if (IS_ERR(cc->base))
                return PTR_ERR(cc->base);
 
-       pm_runtime_enable(dev);
-       err = pm_clk_create(dev);
+       err = devm_pm_runtime_enable(dev);
        if (err)
-               goto pm_clk_err;
+               return err;
+
+       err = devm_pm_clk_create(dev);
+       if (err)
+               return err;
 
        err = of_pm_clk_add_clks(dev);
        if (err < 0) {
                dev_dbg(dev, "Failed to get lpass core voting clocks\n");
-               goto clk_reg_err;
+               return err;
        }
 
        for (i = 0; i < data->onecell_data->num; i++) {
 
                err = devm_clk_hw_register(dev, &data->gfm_clks[i]->hw);
                if (err)
-                       goto clk_reg_err;
+                       return err;
 
        }
 
        err = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get,
                                          data->onecell_data);
        if (err)
-               goto clk_reg_err;
+               return err;
 
        return 0;
-
-clk_reg_err:
-       pm_clk_destroy(dev);
-pm_clk_err:
-       pm_runtime_disable(dev);
-       return err;
 }
 
 static const struct of_device_id lpass_gfm_clk_match_table[] = {
 
        .num_gdscs = ARRAY_SIZE(lpass_audio_hm_sc7180_gdscs),
 };
 
-static void lpass_pm_runtime_disable(void *data)
-{
-       pm_runtime_disable(data);
-}
-
-static void lpass_pm_clk_destroy(void *data)
-{
-       pm_clk_destroy(data);
-}
-
 static int lpass_create_pm_clks(struct platform_device *pdev)
 {
        int ret;
 
        pm_runtime_use_autosuspend(&pdev->dev);
        pm_runtime_set_autosuspend_delay(&pdev->dev, 500);
-       pm_runtime_enable(&pdev->dev);
 
-       ret = devm_add_action_or_reset(&pdev->dev, lpass_pm_runtime_disable, &pdev->dev);
+       ret = devm_pm_runtime_enable(&pdev->dev);
        if (ret)
                return ret;
 
-       ret = pm_clk_create(&pdev->dev);
-       if (ret)
-               return ret;
-       ret = devm_add_action_or_reset(&pdev->dev, lpass_pm_clk_destroy, &pdev->dev);
+       ret = devm_pm_clk_create(&pdev->dev);
        if (ret)
                return ret;
 
 
 {
        int ret;
 
-       pm_runtime_enable(&pdev->dev);
-       ret = pm_clk_create(&pdev->dev);
+       ret = devm_pm_runtime_enable(&pdev->dev);
        if (ret)
-               goto disable_pm_runtime;
+               return ret;
+
+       ret = devm_pm_clk_create(&pdev->dev);
+       if (ret)
+               return ret;
 
        ret = pm_clk_add(&pdev->dev, "cfg_ahb");
        if (ret < 0) {
                dev_err(&pdev->dev, "failed to acquire iface clock\n");
-               goto destroy_pm_clk;
+               return ret;
        }
 
        ret = qcom_cc_probe(pdev, &mss_sc7180_desc);
        if (ret < 0)
-               goto destroy_pm_clk;
-
-       return 0;
-
-destroy_pm_clk:
-       pm_clk_destroy(&pdev->dev);
-
-disable_pm_runtime:
-       pm_runtime_disable(&pdev->dev);
-
-       return ret;
-}
-
-static int mss_sc7180_remove(struct platform_device *pdev)
-{
-       pm_clk_destroy(&pdev->dev);
-       pm_runtime_disable(&pdev->dev);
+               return ret;
 
        return 0;
 }
 
 static struct platform_driver mss_sc7180_driver = {
        .probe          = mss_sc7180_probe,
-       .remove         = mss_sc7180_remove,
        .driver         = {
                .name           = "sc7180-mss",
                .of_match_table = mss_sc7180_match_table,
 
        const struct qcom_cc_desc *desc;
        int ret;
 
-       pm_runtime_enable(&pdev->dev);
-       ret = pm_clk_create(&pdev->dev);
+       ret = devm_pm_runtime_enable(&pdev->dev);
        if (ret)
-               goto disable_pm_runtime;
+               return ret;
+
+       ret = devm_pm_clk_create(&pdev->dev);
+       if (ret)
+               return ret;
 
        ret = pm_clk_add(&pdev->dev, NULL);
        if (ret < 0) {
                dev_err(&pdev->dev, "failed to acquire iface clock\n");
-               goto destroy_pm_clk;
+               return ret;
        }
 
        q6sstop_regmap_config.name = "q6sstop_tcsr";
 
        ret = qcom_cc_probe_by_index(pdev, 1, desc);
        if (ret)
-               goto destroy_pm_clk;
+               return ret;
 
        q6sstop_regmap_config.name = "q6sstop_cc";
        desc = &q6sstop_qcs404_desc;
 
        ret = qcom_cc_probe_by_index(pdev, 0, desc);
        if (ret)
-               goto destroy_pm_clk;
-
-       return 0;
-
-destroy_pm_clk:
-       pm_clk_destroy(&pdev->dev);
-
-disable_pm_runtime:
-       pm_runtime_disable(&pdev->dev);
-
-       return ret;
-}
-
-static int q6sstopcc_qcs404_remove(struct platform_device *pdev)
-{
-       pm_clk_destroy(&pdev->dev);
-       pm_runtime_disable(&pdev->dev);
+               return ret;
 
        return 0;
 }
 
 static struct platform_driver q6sstopcc_qcs404_driver = {
        .probe          = q6sstopcc_qcs404_probe,
-       .remove         = q6sstopcc_qcs404_remove,
        .driver         = {
                .name   = "qcs404-q6sstopcc",
                .of_match_table = q6sstopcc_qcs404_match_table,
 
 {
        int ret;
 
-       pm_runtime_enable(&pdev->dev);
-       ret = pm_clk_create(&pdev->dev);
+       ret = devm_pm_runtime_enable(&pdev->dev);
        if (ret)
-               goto disable_pm_runtime;
+               return ret;
+
+       ret = devm_pm_clk_create(&pdev->dev);
+       if (ret)
+               return ret;
 
        ret = pm_clk_add(&pdev->dev, NULL);
        if (ret < 0) {
                dev_err(&pdev->dev, "failed to acquire iface clock\n");
-               goto destroy_pm_clk;
+               return ret;
        }
 
        ret = qcom_cc_probe(pdev, &turingcc_desc);
        if (ret < 0)
-               goto destroy_pm_clk;
-
-       return 0;
-
-destroy_pm_clk:
-       pm_clk_destroy(&pdev->dev);
-
-disable_pm_runtime:
-       pm_runtime_disable(&pdev->dev);
-
-       return ret;
-}
-
-static int turingcc_remove(struct platform_device *pdev)
-{
-       pm_clk_destroy(&pdev->dev);
-       pm_runtime_disable(&pdev->dev);
+               return ret;
 
        return 0;
 }
 
 static struct platform_driver turingcc_driver = {
        .probe          = turingcc_probe,
-       .remove         = turingcc_remove,
        .driver         = {
                .name   = "qcs404-turingcc",
                .of_match_table = turingcc_match_table,