From: Muzaffer Kadir <[email protected]>

Add MSM8952 support for tsens.

Downstream does a lot of advanced things with calculations.
But seems like using tsens-v1 directly works too.

Link: 
https://android.googlesource.com/kernel/msm.git/+/refs/tags/android-wear-7.0.0_r0.3/drivers/thermal/msm-tsens.c#1621
Signed-off-by: Muzaffer Kadir <[email protected]>
---
 drivers/thermal/qcom/tsens-v1.c | 44 +++++++++++++++++++++++++++++++++++++++++
 drivers/thermal/qcom/tsens.c    |  3 +++
 drivers/thermal/qcom/tsens.h    |  2 +-
 3 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/qcom/tsens-v1.c b/drivers/thermal/qcom/tsens-v1.c
index faa5d00788ca..f4201748ea29 100644
--- a/drivers/thermal/qcom/tsens-v1.c
+++ b/drivers/thermal/qcom/tsens-v1.c
@@ -145,6 +145,37 @@ static const struct reg_field 
tsens_v1_regfields[MAX_REGFIELDS] = {
        [TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
 };
 
+static int __init init_8952(struct tsens_priv *priv)
+{
+       for (int i = 0; i < priv->num_sensors; ++i)
+               priv->sensor[i].slope = 3200;
+
+       priv->sensor[0].p1_calib_offset = 2;
+       priv->sensor[0].p2_calib_offset = -1;
+       priv->sensor[1].p1_calib_offset = -4;
+       priv->sensor[1].p2_calib_offset = -4;
+       priv->sensor[2].p1_calib_offset = 4;
+       priv->sensor[2].p2_calib_offset = 5;
+       priv->sensor[3].p1_calib_offset = 1;
+       priv->sensor[3].p2_calib_offset = 1;
+       priv->sensor[4].p1_calib_offset = 2;
+       priv->sensor[4].p2_calib_offset = 3;
+       priv->sensor[5].p1_calib_offset = -1;
+       priv->sensor[5].p2_calib_offset = -1;
+       priv->sensor[6].p1_calib_offset = 0;
+       priv->sensor[6].p2_calib_offset = -1;
+       priv->sensor[7].p1_calib_offset = 3;
+       priv->sensor[7].p2_calib_offset = 4;
+       priv->sensor[8].p1_calib_offset = 2;
+       priv->sensor[8].p2_calib_offset = 4;
+       priv->sensor[9].p1_calib_offset = 0;
+       priv->sensor[9].p2_calib_offset = 0;
+       priv->sensor[10].p1_calib_offset = -3;
+       priv->sensor[10].p2_calib_offset = -2;
+
+       return init_common(priv);
+}
+
 static int __init init_8956(struct tsens_priv *priv) {
        priv->sensor[0].slope = 3313;
        priv->sensor[1].slope = 3275;
@@ -223,6 +254,19 @@ struct tsens_plat_data data_8937 = {
        .fields         = tsens_v1_regfields,
 };
 
+static const struct tsens_ops ops_8952 = {
+       .init           = init_8952,
+       .calibrate      = tsens_calibrate_common,
+       .get_temp       = get_temp_tsens_valid,
+};
+
+struct tsens_plat_data data_8952 = {
+       .num_sensors    = 11,
+       .ops            = &ops_8952,
+       .feat           = &tsens_v1_feat,
+       .fields         = tsens_v1_regfields,
+};
+
 static const struct tsens_ops ops_8956 = {
        .init           = init_8956,
        .calibrate      = tsens_calibrate_common,
diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index b5ec70201e2f..4d7013fc79d6 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -1191,6 +1191,9 @@ static const struct of_device_id tsens_table[] = {
        }, {
                .compatible = "qcom,msm8939-tsens",
                .data = &data_8939,
+       }, {
+               .compatible = "qcom,msm8952-tsens",
+               .data = &data_8952,
        }, {
                .compatible = "qcom,msm8956-tsens",
                .data = &data_8956,
diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
index e8376accdff3..a35b15312961 100644
--- a/drivers/thermal/qcom/tsens.h
+++ b/drivers/thermal/qcom/tsens.h
@@ -669,7 +669,7 @@ extern struct tsens_plat_data data_8960;
 extern struct tsens_plat_data data_8226, data_8909, data_8916, data_8939, 
data_8974, data_9607;
 
 /* TSENS v1 targets */
-extern struct tsens_plat_data data_tsens_v1, data_8937, data_8976, data_8956;
+extern struct tsens_plat_data data_tsens_v1, data_8937, data_8952, data_8976, 
data_8956;
 
 /* TSENS v1 with no RPM targets */
 extern const struct tsens_plat_data data_ipq5018;

-- 
2.55.0


Reply via email to