Re: [PATCH v3 06/15] thermal/drivers/tsens: Sort out msm8976 vs msm8956 data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 20.12.2022 03:47, Dmitry Baryshkov wrote:
> Tsens driver mentions that msm8976 data should be used for both msm8976
> and msm8956 SoCs. This is not quite correct, as according to the
> vendor kernels, msm8976 should use standard slope values (3200), while
> msm8956 really uses the slope values found in the driver.
> 
> Add separate compatibility string for msm8956, move slope value
> overrides to the corresponding init function and use the standard
> compute_intercept_slope() function for both platforms.
> 
> Fixes: 0e580290170d ("thermal: qcom: tsens-v1: Add support for MSM8956 and MSM8976")
> Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx>

Konrad
>  drivers/thermal/qcom/tsens-v1.c | 56 ++++++++++++++++++---------------
>  drivers/thermal/qcom/tsens.c    |  3 ++
>  drivers/thermal/qcom/tsens.h    |  2 +-
>  3 files changed, 34 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/thermal/qcom/tsens-v1.c b/drivers/thermal/qcom/tsens-v1.c
> index a7f53966156b..83c2853546d0 100644
> --- a/drivers/thermal/qcom/tsens-v1.c
> +++ b/drivers/thermal/qcom/tsens-v1.c
> @@ -137,30 +137,6 @@
>  #define CAL_SEL_MASK	7
>  #define CAL_SEL_SHIFT	0
>  
> -static void compute_intercept_slope_8976(struct tsens_priv *priv,
> -			      u32 *p1, u32 *p2, u32 mode)
> -{
> -	int i;
> -
> -	priv->sensor[0].slope = 3313;
> -	priv->sensor[1].slope = 3275;
> -	priv->sensor[2].slope = 3320;
> -	priv->sensor[3].slope = 3246;
> -	priv->sensor[4].slope = 3279;
> -	priv->sensor[5].slope = 3257;
> -	priv->sensor[6].slope = 3234;
> -	priv->sensor[7].slope = 3269;
> -	priv->sensor[8].slope = 3255;
> -	priv->sensor[9].slope = 3239;
> -	priv->sensor[10].slope = 3286;
> -
> -	for (i = 0; i < priv->num_sensors; i++) {
> -		priv->sensor[i].offset = (p1[i] * SLOPE_FACTOR) -
> -				(CAL_DEGC_PT1 *
> -				priv->sensor[i].slope);
> -	}
> -}
> -
>  static int calibrate_v1(struct tsens_priv *priv)
>  {
>  	u32 base0 = 0, base1 = 0;
> @@ -286,7 +262,7 @@ static int calibrate_8976(struct tsens_priv *priv)
>  		break;
>  	}
>  
> -	compute_intercept_slope_8976(priv, p1, p2, mode);
> +	compute_intercept_slope(priv, p1, p2, mode);
>  	kfree(qfprom_cdata);
>  
>  	return 0;
> @@ -360,6 +336,22 @@ static const struct reg_field tsens_v1_regfields[MAX_REGFIELDS] = {
>  	[TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
>  };
>  
> +static int __init init_8956(struct tsens_priv *priv) {
> +	priv->sensor[0].slope = 3313;
> +	priv->sensor[1].slope = 3275;
> +	priv->sensor[2].slope = 3320;
> +	priv->sensor[3].slope = 3246;
> +	priv->sensor[4].slope = 3279;
> +	priv->sensor[5].slope = 3257;
> +	priv->sensor[6].slope = 3234;
> +	priv->sensor[7].slope = 3269;
> +	priv->sensor[8].slope = 3255;
> +	priv->sensor[9].slope = 3239;
> +	priv->sensor[10].slope = 3286;
> +
> +	return init_common(priv);
> +}
> +
>  static const struct tsens_ops ops_generic_v1 = {
>  	.init		= init_common,
>  	.calibrate	= calibrate_v1,
> @@ -372,13 +364,25 @@ struct tsens_plat_data data_tsens_v1 = {
>  	.fields	= tsens_v1_regfields,
>  };
>  
> +static const struct tsens_ops ops_8956 = {
> +	.init		= init_8956,
> +	.calibrate	= calibrate_8976,
> +	.get_temp	= get_temp_tsens_valid,
> +};
> +
> +struct tsens_plat_data data_8956 = {
> +	.num_sensors	= 11,
> +	.ops		= &ops_8956,
> +	.feat		= &tsens_v1_feat,
> +	.fields		= tsens_v1_regfields,
> +};
> +
>  static const struct tsens_ops ops_8976 = {
>  	.init		= init_common,
>  	.calibrate	= calibrate_8976,
>  	.get_temp	= get_temp_tsens_valid,
>  };
>  
> -/* Valid for both MSM8956 and MSM8976. */
>  struct tsens_plat_data data_8976 = {
>  	.num_sensors	= 11,
>  	.ops		= &ops_8976,
> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
> index b5b136ff323f..b191e19df93d 100644
> --- a/drivers/thermal/qcom/tsens.c
> +++ b/drivers/thermal/qcom/tsens.c
> @@ -983,6 +983,9 @@ static const struct of_device_id tsens_table[] = {
>  	}, {
>  		.compatible = "qcom,msm8939-tsens",
>  		.data = &data_8939,
> +	}, {
> +		.compatible = "qcom,msm8956-tsens",
> +		.data = &data_8956,
>  	}, {
>  		.compatible = "qcom,msm8960-tsens",
>  		.data = &data_8960,
> diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
> index 899af128855f..7dd5fc246894 100644
> --- a/drivers/thermal/qcom/tsens.h
> +++ b/drivers/thermal/qcom/tsens.h
> @@ -594,7 +594,7 @@ extern struct tsens_plat_data data_8960;
>  extern struct tsens_plat_data data_8916, data_8939, data_8974, data_9607;
>  
>  /* TSENS v1 targets */
> -extern struct tsens_plat_data data_tsens_v1, data_8976;
> +extern struct tsens_plat_data data_tsens_v1, data_8976, data_8956;
>  
>  /* TSENS v2 targets */
>  extern struct tsens_plat_data data_8996, data_ipq8074, data_tsens_v2;



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux