thermal: tsens: Pass register offsets as private data
authorAmit Kucheria <amit.kucheria@linaro.org>
Wed, 12 Sep 2018 09:52:52 +0000 (15:22 +0530)
committerEduardo Valentin <edubezval@gmail.com>
Tue, 23 Oct 2018 00:34:33 +0000 (17:34 -0700)
Registers have moved around across TSENS generations. For example, the
CTRL register was at offset 0x0 in the SROT region on msm8916 but is at
offset 0x4 in newer v2 based TSENS HW blocks.

Allow passing offsets of important registers so that we can continue to
use common functions.

Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
drivers/thermal/qcom/tsens-8916.c
drivers/thermal/qcom/tsens-8974.c
drivers/thermal/qcom/tsens-v2.c
drivers/thermal/qcom/tsens.c
drivers/thermal/qcom/tsens.h

index c4955c85e922321f72f86a736324f1f63da291e2..c6dd620ac029fc788bffd4adc8622551df6977e5 100644 (file)
@@ -100,5 +100,6 @@ static const struct tsens_ops ops_8916 = {
 const struct tsens_data data_8916 = {
        .num_sensors    = 5,
        .ops            = &ops_8916,
+       .reg_offsets    = { [SROT_CTRL_OFFSET] = 0x0 },
        .hw_ids         = (unsigned int []){0, 1, 2, 4, 5 },
 };
index 7e149edbfeb69c8a853673945363939c5fed6113..3d3fda3d731b30dd48f5ffaaee23fe87d185b0df 100644 (file)
@@ -232,4 +232,5 @@ static const struct tsens_ops ops_8974 = {
 const struct tsens_data data_8974 = {
        .num_sensors    = 11,
        .ops            = &ops_8974,
+       .reg_offsets    = { [SROT_CTRL_OFFSET] = 0x0 },
 };
index 1bdef92e45213fd0a4dc3f294743edc4586dbef1..381a212872bfb4151b3606bea23d821403997741 100644 (file)
@@ -68,10 +68,12 @@ static const struct tsens_ops ops_generic_v2 = {
 
 const struct tsens_data data_tsens_v2 = {
        .ops            = &ops_generic_v2,
+       .reg_offsets    = { [SROT_CTRL_OFFSET] = 0x4 },
 };
 
 /* Kept around for backward compatibility with old msm8996.dtsi */
 const struct tsens_data data_8996 = {
        .num_sensors    = 13,
        .ops            = &ops_generic_v2,
+       .reg_offsets    = { [SROT_CTRL_OFFSET] = 0x4 },
 };
index 9a8e8f7b4ae15b640b537c078943bf69a9a1e140..f1ec9bbe4717e6f0f5c3aea4fb19b5963a189d19 100644 (file)
@@ -144,6 +144,9 @@ static int tsens_probe(struct platform_device *pdev)
                else
                        tmdev->sensor[i].hw_id = i;
        }
+       for (i = 0; i < REG_ARRAY_SIZE; i++) {
+               tmdev->reg_offsets[i] = data->reg_offsets[i];
+       }
 
        if (!tmdev->ops || !tmdev->ops->init || !tmdev->ops->get_temp)
                return -EINVAL;
index b9c4bcf255faaccfdaba4d319b619171f0597d3d..7b7feee5dc4633b72893ddf36ec69c8405f7c318 100644 (file)
@@ -48,15 +48,23 @@ struct tsens_ops {
        int (*get_trend)(struct tsens_device *, int, enum thermal_trend *);
 };
 
+enum reg_list {
+       SROT_CTRL_OFFSET,
+
+       REG_ARRAY_SIZE,
+};
+
 /**
  * struct tsens_data - tsens instance specific data
  * @num_sensors: Max number of sensors supported by platform
  * @ops: operations the tsens instance supports
  * @hw_ids: Subset of sensors ids supported by platform, if not the first n
+ * @reg_offsets: Register offsets for commonly used registers
  */
 struct tsens_data {
        const u32               num_sensors;
        const struct tsens_ops  *ops;
+       const u16               reg_offsets[REG_ARRAY_SIZE];
        unsigned int            *hw_ids;
 };
 
@@ -72,6 +80,7 @@ struct tsens_device {
        struct regmap                   *tm_map;
        struct regmap                   *srot_map;
        u32                             tm_offset;
+       u16                             reg_offsets[REG_ARRAY_SIZE];
        struct tsens_context            ctx;
        const struct tsens_ops          *ops;
        struct tsens_sensor             sensor[0];