All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eliav Farber <farbere@amazon.com>
To: <jdelvare@suse.com>, <linux@roeck-us.net>, <robh+dt@kernel.org>,
	<p.zabel@pengutronix.de>, <rtanwar@maxlinear.com>,
	<linux-hwmon@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Cc: <farbere@amazon.com>, <talel@amazon.com>, <hhhawa@amazon.com>,
	<jonnyc@amazon.com>, <hanochu@amazon.com>, <ronenk@amazon.com>,
	<itamark@amazon.com>, <shellykz@amazon.com>, <shorer@amazon.com>,
	<amitlavi@amazon.com>, <almogbs@amazon.com>, <dkl@amazon.com>,
	<rahul.tanwar@linux.intel.com>, <andriy.shevchenko@intel.com>
Subject: [PATCH v3 13/19] hwmon: (mr75203) modify the temperature equation according to series 5 datasheet
Date: Tue, 30 Aug 2022 19:22:06 +0000	[thread overview]
Message-ID: <20220830192212.28570-14-farbere@amazon.com> (raw)
In-Reply-To: <20220830192212.28570-1-farbere@amazon.com>

Modify the equation and coefficients used to convert the digital output
to temperature according to series 5 of the Moortec Embedded Temperature
Sensor (METS) datasheet:
T = G + H * (n / cal5 - 0.5) + J * F

Where:
*) G = 60, H = 200, cal5 = 4094, J = -0.1.
*) F = frequency clock in MHz.
*) n is the digital output.

In code, the G, H and J coefficients are multiplied by a factor of 1000
to get the temperature in milli-Celsius.
Final result is clamped in case it exceeds min/max thresholds.

Change is done since it is not clear where the current equation and
coefficients came from.

Signed-off-by: Eliav Farber <farbere@amazon.com>
---
V3 -> V2:
- Protect from overflow.
- Add temperature clamping.
- Add better documentation.

 drivers/hwmon/mr75203.c | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/drivers/hwmon/mr75203.c b/drivers/hwmon/mr75203.c
index d1f090a9baac..5b8ca1ee4a54 100644
--- a/drivers/hwmon/mr75203.c
+++ b/drivers/hwmon/mr75203.c
@@ -103,13 +103,17 @@
 
 #define PVT_POLL_DELAY_US	20
 #define PVT_POLL_TIMEOUT_US	20000
-#define PVT_H_CONST		100000
-#define PVT_CAL5_CONST		2047
-#define PVT_G_CONST		40000
+#define PVT_H_CONST		200000
+#define PVT_G_CONST		60000
+#define PVT_J_CONST		-100
+#define PVT_CAL5_CONST		4094
 #define PVT_CONV_BITS		10
 #define PVT_N_CONST		90
 #define PVT_R_CONST		245805
 
+#define PVT_TEMP_MIN		-40000
+#define PVT_TEMP_MAX		125000
+
 #define PRE_SCALER_X1	1
 #define PRE_SCALER_X2	2
 
@@ -157,13 +161,24 @@ static umode_t pvt_is_visible(const void *data, enum hwmon_sensor_types type,
 	return 0;
 }
 
+static long pvt_calc_temp(struct pvt_device *pvt, u32 nbs)
+{
+	/*
+	 * Convert the register value to degrees centigrade temperature:
+	 * T = G + H * (n / cal5 - 0.5) + J * F
+	 */
+	s64 tmp = PVT_G_CONST + PVT_H_CONST * (s64)nbs / PVT_CAL5_CONST -
+		PVT_H_CONST / 2 + PVT_J_CONST * (s64)pvt->ip_freq / HZ_PER_MHZ;
+
+	return clamp_val(tmp, PVT_TEMP_MIN, PVT_TEMP_MAX);
+}
+
 static int pvt_read_temp(struct device *dev, u32 attr, int channel, long *val)
 {
 	struct pvt_device *pvt = dev_get_drvdata(dev);
 	struct regmap *t_map = pvt->t_map;
 	u32 stat, nbs;
 	int ret;
-	u64 tmp;
 
 	switch (attr) {
 	case hwmon_temp_input:
@@ -184,9 +199,7 @@ static int pvt_read_temp(struct device *dev, u32 attr, int channel, long *val)
 		 * Convert the register value to
 		 * degrees centigrade temperature
 		 */
-		tmp = nbs * PVT_H_CONST;
-		do_div(tmp, PVT_CAL5_CONST);
-		*val = tmp - PVT_G_CONST - pvt->ip_freq;
+		*val = pvt_calc_temp(pvt, nbs);
 
 		return 0;
 	default:
@@ -311,7 +324,7 @@ static int pvt_init(struct pvt_device *pvt)
 		    (key >> 1) << CLK_SYNTH_HI_SFT |
 		    (key >> 1) << CLK_SYNTH_HOLD_SFT | CLK_SYNTH_EN;
 
-	pvt->ip_freq = sys_freq * 100 / (key + 2);
+	pvt->ip_freq = clk_get_rate(pvt->clk) / (key + 2);
 
 	if (t_num) {
 		ret = regmap_write(t_map, SDIF_SMPL_CTRL, 0x0);
-- 
2.37.1


  parent reply	other threads:[~2022-08-30 19:24 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30 19:21 [PATCH v3 00/19] Variety of fixes and new features for mr75203 driver Eliav Farber
2022-08-30 19:21 ` [PATCH v3 01/19] dt-bindings: hwmon: (mr75203) update "intel,vm-map" property to be optional Eliav Farber
2022-09-02 19:50   ` Rob Herring
2022-08-30 19:21 ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" not defined Eliav Farber
2022-08-31  2:39   ` Guenter Roeck
2022-08-31  4:36     ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel, vm-map" " Farber, Eliav
2022-08-31  5:36   ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" " Guenter Roeck
2022-08-31  5:49     ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel, vm-map" " Farber, Eliav
2022-08-31  6:09       ` Farber, Eliav
2022-08-31 11:48       ` Guenter Roeck
2022-09-01  8:39         ` Farber, Eliav
2022-09-01 14:44           ` Guenter Roeck
2022-09-01 15:24             ` Farber, Eliav
2022-09-01 17:11               ` Guenter Roeck
2022-09-01 18:36                 ` Farber, Eliav
2022-09-01 19:25                   ` Guenter Roeck
2022-09-01 19:49               ` Andy Shevchenko
2022-08-31  9:38   ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" " Andy Shevchenko
2022-09-02 12:08     ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel, vm-map" " Farber, Eliav
2022-09-02 14:15       ` Andy Shevchenko
2022-08-30 19:21 ` [PATCH v3 03/19] hwmon: (mr75203) update pvt->v_num to the actual number of used sensors Eliav Farber
2022-08-31  2:41   ` Guenter Roeck
2022-08-31  4:50     ` Farber, Eliav
2022-08-31  5:31       ` Guenter Roeck
2022-08-30 19:21 ` [PATCH v3 04/19] dt-bindings: hwmon: (mr75203) change "reset" property to be optional Eliav Farber
2022-08-31  8:21   ` Philipp Zabel
2022-08-31  9:43     ` Farber, Eliav
2022-08-31  9:48       ` Philipp Zabel
2022-09-02 19:51   ` Rob Herring
2022-09-03 19:16     ` Farber, Eliav
2022-08-30 19:21 ` [PATCH v3 05/19] hwmon: (mr75203) skip reset-control deassert for SOCs that don't support it Eliav Farber
2022-08-31  8:19   ` Philipp Zabel
2022-08-30 19:21 ` [PATCH v3 06/19] hwmon: (mr75203) fix multi-channel voltage reading Eliav Farber
2022-08-31  9:46   ` Andy Shevchenko
2022-09-01 13:12     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 07/19] hwmon: (mr75203) enable polling for all VM channels Eliav Farber
2022-08-31 11:21   ` Andy Shevchenko
2022-08-31 11:55     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 08/19] dt-bindings: hwmon: (mr75203) add "moortec,vm-active-channels" property Eliav Farber
2022-08-31 11:39   ` Rob Herring
     [not found]     ` <a8557b5a-6e27-2e66-161e-814fc0f69c1d@amazon.com>
2022-08-31 12:17       ` [PATCH v3 08/19] dt-bindings: hwmon: (mr75203) add "moortec, vm-active-channels" property Rob Herring
2022-08-31 17:47         ` Farber, Eliav
2022-08-31 19:19           ` Rob Herring
2022-08-31 19:55             ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 09/19] hwmon: (mr75203) add VM active channel support Eliav Farber
2022-08-31 11:48   ` Andy Shevchenko
2022-09-02 12:04     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 10/19] dt-bindings: hwmon: (mr75203) add "moortec,vm-pre-scaler" property Eliav Farber
2022-09-02 19:57   ` Rob Herring
2022-09-03 19:34     ` [PATCH v3 10/19] dt-bindings: hwmon: (mr75203) add "moortec, vm-pre-scaler" property Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 11/19] hwmon: (mr75203) add VM pre-scaler support Eliav Farber
2022-08-31 12:02   ` Andy Shevchenko
2022-09-01 14:17     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 12/19] hwmon: (mr75203) fix voltage equation for negative source input Eliav Farber
2022-08-31 12:04   ` Andy Shevchenko
2022-09-01 12:47     ` Farber, Eliav
2022-09-01 20:08       ` Andy Shevchenko
2022-08-30 19:22 ` Eliav Farber [this message]
2022-08-31 12:06   ` [PATCH v3 13/19] hwmon: (mr75203) modify the temperature equation according to series 5 datasheet Andy Shevchenko
2022-09-01 12:22     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec,ts-series" property Eliav Farber
2022-08-31  8:23   ` Philipp Zabel
2022-08-31  9:23     ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec, ts-series" property Farber, Eliav
2022-08-31  9:42       ` Philipp Zabel
2022-09-02 13:18         ` Farber, Eliav
2022-09-02 19:59   ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec,ts-series" property Rob Herring
2022-09-03 19:12     ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec, ts-series" property Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 15/19] hwmon: (mr75203) add support for series 6 temperature equation Eliav Farber
2022-08-31 12:08   ` Andy Shevchenko
2022-09-01 12:14     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 16/19] dt-bindings: hwmon: (mr75203) add coefficient properties for the thermal equation Eliav Farber
2022-09-02 20:03   ` Rob Herring
2022-09-03 19:16     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 17/19] hwmon: (mr75203) parse temperature coefficients from device-tree Eliav Farber
2022-08-31 12:11   ` Andy Shevchenko
2022-09-01  9:54     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 18/19] hwmon: (mr75203) add debugfs to read and write temperature coefficients Eliav Farber
2022-08-31 12:14   ` Andy Shevchenko
2022-09-01  6:54     ` Farber, Eliav
2022-09-01 14:28       ` Guenter Roeck
2022-09-01 19:46       ` Andy Shevchenko
2022-08-30 19:22 ` [PATCH v3 19/19] hwmon: (mr75203) fix coding style space errors Eliav Farber
2022-08-31 12:15   ` Andy Shevchenko
2022-09-01 14:21     ` Farber, Eliav
2022-09-01 14:46       ` Guenter Roeck
2022-09-01 15:31         ` Farber, Eliav
2022-09-01 17:09           ` Guenter Roeck
2022-09-01 18:40             ` Farber, Eliav

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220830192212.28570-14-farbere@amazon.com \
    --to=farbere@amazon.com \
    --cc=almogbs@amazon.com \
    --cc=amitlavi@amazon.com \
    --cc=andriy.shevchenko@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dkl@amazon.com \
    --cc=hanochu@amazon.com \
    --cc=hhhawa@amazon.com \
    --cc=itamark@amazon.com \
    --cc=jdelvare@suse.com \
    --cc=jonnyc@amazon.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=p.zabel@pengutronix.de \
    --cc=rahul.tanwar@linux.intel.com \
    --cc=robh+dt@kernel.org \
    --cc=ronenk@amazon.com \
    --cc=rtanwar@maxlinear.com \
    --cc=shellykz@amazon.com \
    --cc=shorer@amazon.com \
    --cc=talel@amazon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.