lkml.org 
[lkml]   [2019]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/15] drivers: thermal: tsens: Get rid of id field in tsens_sensor
    Date
    There are two fields - id and hw_id - to track what sensor an action was
    to performed on. This was because the sensors connected to a TSENS IP
    might not be contiguous i.e. 1, 2, 4, 5 with 3 being skipped.

    This causes confusion in the code which uses hw_id sometimes and id
    other times (tsens_get_temp, tsens_get_trend).

    Switch to only using the hw_id field to track the physical ID of the
    sensor. When we iterate through all the sensors connected to an IP
    block, we use an index i to loop through the list of sensors, and then
    return the actual hw_id that is registered on that index.

    Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
    ---
    drivers/thermal/qcom/tsens-8960.c | 4 ++--
    drivers/thermal/qcom/tsens-common.c | 16 +++++++++-------
    drivers/thermal/qcom/tsens.c | 11 +++++------
    drivers/thermal/qcom/tsens.h | 10 ++++------
    4 files changed, 20 insertions(+), 21 deletions(-)

    diff --git a/drivers/thermal/qcom/tsens-8960.c b/drivers/thermal/qcom/tsens-8960.c
    index 8d9b721dadb6..3e1436fda1eb 100644
    --- a/drivers/thermal/qcom/tsens-8960.c
    +++ b/drivers/thermal/qcom/tsens-8960.c
    @@ -243,11 +243,11 @@ static inline int code_to_mdegC(u32 adc_code, const struct tsens_sensor *s)
    return adc_code * slope + offset;
    }

    -static int get_temp_8960(struct tsens_priv *priv, int id, int *temp)
    +static int get_temp_8960(struct tsens_sensor *s, int *temp)
    {
    int ret;
    u32 code, trdy;
    - const struct tsens_sensor *s = &priv->sensor[id];
    + struct tsens_priv *priv = s->priv;
    unsigned long timeout;

    timeout = jiffies + usecs_to_jiffies(TIMEOUT_US);
    diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c
    index 528df8801254..c037bdf92c66 100644
    --- a/drivers/thermal/qcom/tsens-common.c
    +++ b/drivers/thermal/qcom/tsens-common.c
    @@ -83,11 +83,12 @@ static inline int code_to_degc(u32 adc_code, const struct tsens_sensor *s)
    return degc;
    }

    -int get_temp_tsens_valid(struct tsens_priv *priv, int i, int *temp)
    +int get_temp_tsens_valid(struct tsens_sensor *s, int *temp)
    {
    - struct tsens_sensor *s = &priv->sensor[i];
    - u32 temp_idx = LAST_TEMP_0 + s->hw_id;
    - u32 valid_idx = VALID_0 + s->hw_id;
    + struct tsens_priv *priv = s->priv;
    + int hw_id = s->hw_id;
    + u32 temp_idx = LAST_TEMP_0 + hw_id;
    + u32 valid_idx = VALID_0 + hw_id;
    u32 last_temp = 0, valid, mask;
    int ret;

    @@ -123,12 +124,13 @@ int get_temp_tsens_valid(struct tsens_priv *priv, int i, int *temp)
    return 0;
    }

    -int get_temp_common(struct tsens_priv *priv, int i, int *temp)
    +int get_temp_common(struct tsens_sensor *s, int *temp)
    {
    - struct tsens_sensor *s = &priv->sensor[i];
    + struct tsens_priv *priv = s->priv;
    + int hw_id = s->hw_id;
    int last_temp = 0, ret;

    - ret = regmap_field_read(priv->rf[LAST_TEMP_0 + s->hw_id], &last_temp);
    + ret = regmap_field_read(priv->rf[LAST_TEMP_0 + hw_id], &last_temp);
    if (ret)
    return ret;

    diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
    index 0627d8615c30..6ed687a6e53c 100644
    --- a/drivers/thermal/qcom/tsens.c
    +++ b/drivers/thermal/qcom/tsens.c
    @@ -14,19 +14,19 @@

    static int tsens_get_temp(void *data, int *temp)
    {
    - const struct tsens_sensor *s = data;
    + struct tsens_sensor *s = data;
    struct tsens_priv *priv = s->priv;

    - return priv->ops->get_temp(priv, s->id, temp);
    + return priv->ops->get_temp(s, temp);
    }

    static int tsens_get_trend(void *data, int trip, enum thermal_trend *trend)
    {
    - const struct tsens_sensor *s = data;
    + struct tsens_sensor *s = data;
    struct tsens_priv *priv = s->priv;

    if (priv->ops->get_trend)
    - return priv->ops->get_trend(priv, s->id, trend);
    + return priv->ops->get_trend(s, trend);

    return -ENOTSUPP;
    }
    @@ -86,8 +86,7 @@ static int tsens_register(struct tsens_priv *priv)

    for (i = 0; i < priv->num_sensors; i++) {
    priv->sensor[i].priv = priv;
    - priv->sensor[i].id = i;
    - tzd = devm_thermal_zone_of_sensor_register(priv->dev, i,
    + tzd = devm_thermal_zone_of_sensor_register(priv->dev, priv->sensor[i].hw_id,
    &priv->sensor[i],
    &tsens_of_ops);
    if (IS_ERR(tzd))
    diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
    index 2fd94997245b..d022e726d074 100644
    --- a/drivers/thermal/qcom/tsens.h
    +++ b/drivers/thermal/qcom/tsens.h
    @@ -31,7 +31,6 @@ enum tsens_ver {
    * @priv: tsens device instance that this sensor is connected to
    * @tzd: pointer to the thermal zone that this sensor is in
    * @offset: offset of temperature adjustment curve
    - * @id: Sensor ID
    * @hw_id: HW ID can be used in case of platform-specific IDs
    * @slope: slope of temperature adjustment curve
    * @status: 8960-specific variable to track 8960 and 8660 status register offset
    @@ -40,7 +39,6 @@ struct tsens_sensor {
    struct tsens_priv *priv;
    struct thermal_zone_device *tzd;
    int offset;
    - unsigned int id;
    unsigned int hw_id;
    int slope;
    u32 status;
    @@ -61,13 +59,13 @@ struct tsens_ops {
    /* mandatory callbacks */
    int (*init)(struct tsens_priv *priv);
    int (*calibrate)(struct tsens_priv *priv);
    - int (*get_temp)(struct tsens_priv *priv, int i, int *temp);
    + int (*get_temp)(struct tsens_sensor *s, int *temp);
    /* optional callbacks */
    int (*enable)(struct tsens_priv *priv, int i);
    void (*disable)(struct tsens_priv *priv);
    int (*suspend)(struct tsens_priv *priv);
    int (*resume)(struct tsens_priv *priv);
    - int (*get_trend)(struct tsens_priv *priv, int i, enum thermal_trend *trend);
    + int (*get_trend)(struct tsens_sensor *s, enum thermal_trend *trend);
    };

    #define REG_FIELD_FOR_EACH_SENSOR11(_name, _offset, _startbit, _stopbit) \
    @@ -313,8 +311,8 @@ struct tsens_priv {
    char *qfprom_read(struct device *dev, const char *cname);
    void compute_intercept_slope(struct tsens_priv *priv, u32 *pt1, u32 *pt2, u32 mode);
    int init_common(struct tsens_priv *priv);
    -int get_temp_tsens_valid(struct tsens_priv *priv, int i, int *temp);
    -int get_temp_common(struct tsens_priv *priv, int i, int *temp);
    +int get_temp_tsens_valid(struct tsens_sensor *s, int *temp);
    +int get_temp_common(struct tsens_sensor *s, int *temp);

    /* TSENS target */
    extern const struct tsens_plat_data data_8960;
    --
    2.17.1
    \
     
     \ /
      Last update: 2019-07-26 00:21    [W:4.113 / U:0.224 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site