thermal/drivers/qcom/lmh: Add support for sm8150
authorThara Gopinath <thara.gopinath@linaro.org>
Thu, 6 Jan 2022 17:31:36 +0000 (12:31 -0500)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Tue, 8 Mar 2022 20:26:09 +0000 (21:26 +0100)
Add compatible to support LMh for sm8150 SoC.
sm8150 does not require explicit enabling for various LMh subsystems.
Add a variable indicating the same as match data which is set for sdm845.
Execute the piece of code enabling various LMh subsystems only if
enable algorithm match data is present.

Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20220106173138.411097-2-thara.gopinath@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/thermal/qcom/lmh.c

index eafa752..c7f91cb 100644 (file)
@@ -28,6 +28,8 @@
 
 #define LMH_REG_DCVS_INTR_CLR          0x8
 
+#define LMH_ENABLE_ALGOS               1
+
 struct lmh_hw_data {
        void __iomem *base;
        struct irq_domain *domain;
@@ -90,6 +92,7 @@ static int lmh_probe(struct platform_device *pdev)
        struct device_node *cpu_node;
        struct lmh_hw_data *lmh_data;
        int temp_low, temp_high, temp_arm, cpu_id, ret;
+       unsigned int enable_alg;
        u32 node_id;
 
        lmh_data = devm_kzalloc(dev, sizeof(*lmh_data), GFP_KERNEL);
@@ -141,32 +144,36 @@ static int lmh_probe(struct platform_device *pdev)
        if (!qcom_scm_lmh_dcvsh_available())
                return -EINVAL;
 
-       ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
-                                LMH_NODE_DCVS, node_id, 0);
-       if (ret)
-               dev_err(dev, "Error %d enabling current subfunction\n", ret);
-
-       ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
-                                LMH_NODE_DCVS, node_id, 0);
-       if (ret)
-               dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
-
-       ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
-                                LMH_NODE_DCVS, node_id, 0);
-       if (ret)
-               dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
-
-       ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
-                                LMH_NODE_DCVS, node_id, 0);
-       if (ret) {
-               dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
-               return ret;
-       }
-
-       ret = qcom_scm_lmh_profile_change(0x1);
-       if (ret) {
-               dev_err(dev, "Error %d changing profile\n", ret);
-               return ret;
+       enable_alg = (uintptr_t)of_device_get_match_data(dev);
+
+       if (enable_alg) {
+               ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
+                                        LMH_NODE_DCVS, node_id, 0);
+               if (ret)
+                       dev_err(dev, "Error %d enabling current subfunction\n", ret);
+
+               ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
+                                        LMH_NODE_DCVS, node_id, 0);
+               if (ret)
+                       dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
+
+               ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
+                                        LMH_NODE_DCVS, node_id, 0);
+               if (ret)
+                       dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
+
+               ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
+                                        LMH_NODE_DCVS, node_id, 0);
+               if (ret) {
+                       dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
+                       return ret;
+               }
+
+               ret = qcom_scm_lmh_profile_change(0x1);
+               if (ret) {
+                       dev_err(dev, "Error %d changing profile\n", ret);
+                       return ret;
+               }
        }
 
        /* Set default thermal trips */
@@ -213,7 +220,8 @@ static int lmh_probe(struct platform_device *pdev)
 }
 
 static const struct of_device_id lmh_table[] = {
-       { .compatible = "qcom,sdm845-lmh", },
+       { .compatible = "qcom,sdm845-lmh", .data = (void *)LMH_ENABLE_ALGOS},
+       { .compatible = "qcom,sm8150-lmh", },
        {}
 };
 MODULE_DEVICE_TABLE(of, lmh_table);