Messages in this thread | | | Subject | Re: [PATCH v10 6/8] drivers: thermal: tsens: Use get_temp_common for msm8960 | From | Thara Gopinath <> | Date | Thu, 18 Mar 2021 17:15:53 -0400 |
| |
On 2/17/21 2:40 PM, Ansuel Smith wrote: > Rework calibrate function to use common function. Derive the offset from > a missing hardcoded slope table and the data from the nvmem calib > efuses.
You are also changing get_temp to use get_temp_common instead of get_temp_8960 in this patch. Please add it to commit description as well.I will also consider changing the subject header to something more generic like "drivers: thermal: tsens: Replace custom 8960 apis with generic apis" or anything better.
Otherwise, Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
Warm Regards Thara
> > Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> > --- > drivers/thermal/qcom/tsens-8960.c | 56 +++++++++---------------------- > 1 file changed, 15 insertions(+), 41 deletions(-) > > diff --git a/drivers/thermal/qcom/tsens-8960.c b/drivers/thermal/qcom/tsens-8960.c > index 248aaa65b5b0..43ebe4d54672 100644 > --- a/drivers/thermal/qcom/tsens-8960.c > +++ b/drivers/thermal/qcom/tsens-8960.c > @@ -67,6 +67,13 @@ > #define S9_STATUS_OFF 0x3674 > #define S10_STATUS_OFF 0x3678 > > +/* Original slope - 200 to compensate mC to C inaccuracy */ > +u32 tsens_msm8960_slope[] = { > + 976, 976, 954, 976, > + 911, 932, 932, 999, > + 932, 999, 932 > + }; > + > static int suspend_8960(struct tsens_priv *priv) > { > int ret; > @@ -192,9 +199,7 @@ static int calibrate_8960(struct tsens_priv *priv) > { > int i; > char *data; > - > - ssize_t num_read = priv->num_sensors; > - struct tsens_sensor *s = priv->sensor; > + u32 p1[11]; > > data = qfprom_read(priv->dev, "calib"); > if (IS_ERR(data)) > @@ -202,49 +207,18 @@ static int calibrate_8960(struct tsens_priv *priv) > if (IS_ERR(data)) > return PTR_ERR(data); > > - for (i = 0; i < num_read; i++, s++) > - s->offset = data[i]; > + for (i = 0; i < priv->num_sensors; i++) { > + p1[i] = data[i]; > + priv->sensor[i].slope = tsens_msm8960_slope[i]; > + } > + > + compute_intercept_slope(priv, p1, NULL, ONE_PT_CALIB); > > kfree(data); > > return 0; > } > > -/* Temperature on y axis and ADC-code on x-axis */ > -static inline int code_to_mdegC(u32 adc_code, const struct tsens_sensor *s) > -{ > - int slope, offset; > - > - slope = thermal_zone_get_slope(s->tzd); > - offset = CAL_MDEGC - slope * s->offset; > - > - return adc_code * slope + offset; > -} > - > -static int get_temp_8960(const struct tsens_sensor *s, int *temp) > -{ > - int ret; > - u32 code, trdy; > - struct tsens_priv *priv = s->priv; > - unsigned long timeout; > - > - timeout = jiffies + usecs_to_jiffies(TIMEOUT_US); > - do { > - ret = regmap_read(priv->tm_map, INT_STATUS_ADDR, &trdy); > - if (ret) > - return ret; > - if (!(trdy & TRDY_MASK)) > - continue; > - ret = regmap_read(priv->tm_map, s->status, &code); > - if (ret) > - return ret; > - *temp = code_to_mdegC(code, s); > - return 0; > - } while (time_before(jiffies, timeout)); > - > - return -ETIMEDOUT; > -} > - > static struct tsens_features tsens_8960_feat = { > .ver_major = VER_0, > .crit_int = 0, > @@ -313,7 +287,7 @@ static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS] = { > static const struct tsens_ops ops_8960 = { > .init = init_common, > .calibrate = calibrate_8960, > - .get_temp = get_temp_8960, > + .get_temp = get_temp_common, > .enable = enable_8960, > .disable = disable_8960, > .suspend = suspend_8960, >
| |