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>, <hhhawa@amazon.com>, <jonnyc@amazon.com>,
<andriy.shevchenko@intel.com>
Subject: [PATCH v4 18/21] hwmon: (mr75203) add support for series 6 temperature equation
Date: Tue, 6 Sep 2022 08:33:53 +0000 [thread overview]
Message-ID: <20220906083356.21067-19-farbere@amazon.com> (raw)
In-Reply-To: <20220906083356.21067-1-farbere@amazon.com>
The current equation used in code is aligned to series 5:
T = G + H * (n / cal5 - 0.5) + J * F
Where:
G = 60, H = 200, cal5 = 4094, J = -0.1, F = frequency clock in MHz
Series 6 has a slightly different equation:
T = G + H * (n / cal5 - 0.5)
and a different set of coefficients:
G = 57.4, H = 249.4, cal5 = 4096
This change supports equation and coefficients for both series.
(for series 6, J is set to 0).
The series is determined according to “moortec,ts-series” property in
the device tree.
If absent, series 5 is assumed to be the default.
Signed-off-by: Eliav Farber <farbere@amazon.com>
---
V4 -> V3:
- Replace of_property_read_u32() with device_property_read_u32().
- Use switch-case instead of if-else.
V3 -> V2:
- New patch to support temperature sensor series 6 instead of having to
set all 4 coefficients.
drivers/hwmon/mr75203.c | 66 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 62 insertions(+), 4 deletions(-)
diff --git a/drivers/hwmon/mr75203.c b/drivers/hwmon/mr75203.c
index f98fb0f3d2fd..ba5abd4065b3 100644
--- a/drivers/hwmon/mr75203.c
+++ b/drivers/hwmon/mr75203.c
@@ -115,6 +115,15 @@
#define PVT_SERIES5_J_CONST -100
#define PVT_SERIES5_CAL5_CONST 4094
+/* Temperature coefficients for series 6 */
+#define PVT_SERIES6_H_CONST 249400
+#define PVT_SERIES6_G_CONST 57400
+#define PVT_SERIES6_J_CONST 0
+#define PVT_SERIES6_CAL5_CONST 4096
+
+#define TEMPERATURE_SENSOR_SERIES_5 5
+#define TEMPERATURE_SENSOR_SERIES_6 6
+
#define PRE_SCALER_X1 1
#define PRE_SCALER_X2 2
@@ -147,6 +156,13 @@ struct voltage_channels {
u8 max;
};
+struct temp_coeff {
+ u32 h;
+ u32 g;
+ u32 cal5;
+ s32 j;
+};
+
struct pvt_device {
struct regmap *c_map;
struct regmap *t_map;
@@ -156,6 +172,7 @@ struct pvt_device {
struct reset_control *rst;
struct voltage_device *vd;
struct voltage_channels vm_channels;
+ struct temp_coeff ts_coeff;
u32 t_num;
u32 p_num;
u32 v_num;
@@ -186,10 +203,12 @@ 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_SERIES5_G_CONST +
- PVT_SERIES5_H_CONST * (s64)nbs / PVT_SERIES5_CAL5_CONST -
- PVT_SERIES5_H_CONST / 2 +
- PVT_SERIES5_J_CONST * (s64)pvt->ip_freq / HZ_PER_MHZ;
+ struct temp_coeff *ts_coeff = &pvt->ts_coeff;
+
+ s64 tmp = ts_coeff->g +
+ ts_coeff->h * (s64)nbs / ts_coeff->cal5 -
+ ts_coeff->h / 2 +
+ ts_coeff->j * (s64)pvt->ip_freq / HZ_PER_MHZ;
return clamp_val(tmp, PVT_TEMP_MIN_mC, PVT_TEMP_MAX_mC);
}
@@ -658,6 +677,41 @@ static int pvt_get_pre_scaler(struct device *dev, struct pvt_device *pvt)
return ret;
}
+static int pvt_set_temp_coeff(struct device *dev, struct pvt_device *pvt)
+{
+ struct temp_coeff *ts_coeff = &pvt->ts_coeff;
+ u32 series;
+ int ret;
+
+ /* Incase ts-series property is not defined, use default 5. */
+ ret = device_property_read_u32(dev, "moortec,ts-series", &series);
+ if (ret)
+ series = TEMPERATURE_SENSOR_SERIES_5;
+
+ switch (series) {
+ case TEMPERATURE_SENSOR_SERIES_5:
+ ts_coeff->h = PVT_SERIES5_H_CONST;
+ ts_coeff->g = PVT_SERIES5_G_CONST;
+ ts_coeff->j = PVT_SERIES5_J_CONST;
+ ts_coeff->cal5 = PVT_SERIES5_CAL5_CONST;
+ break;
+ case TEMPERATURE_SENSOR_SERIES_6:
+ ts_coeff->h = PVT_SERIES6_H_CONST;
+ ts_coeff->g = PVT_SERIES6_G_CONST;
+ ts_coeff->j = PVT_SERIES6_J_CONST;
+ ts_coeff->cal5 = PVT_SERIES6_CAL5_CONST;
+ break;
+ default:
+ dev_err(dev, "invalid temperature sensor series (%u)\n",
+ series);
+ return -EINVAL;
+ }
+
+ dev_dbg(dev, "temperature sensor series = %u\n", series);
+
+ return 0;
+}
+
static int mr75203_probe(struct platform_device *pdev)
{
u32 ts_num, vm_num, pd_num, ch_num, val, index, i;
@@ -728,6 +782,10 @@ static int mr75203_probe(struct platform_device *pdev)
if (ret)
return ret;
+ ret = pvt_set_temp_coeff(dev, pvt);
+ if (ret)
+ return ret;
+
temp_config = devm_kcalloc(dev, ts_num + 1,
sizeof(*temp_config), GFP_KERNEL);
if (!temp_config)
--
2.37.1
next prev parent reply other threads:[~2022-09-06 8:35 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-06 8:33 [PATCH v4 00/21] Variety of fixes and new features for mr75203 driver Eliav Farber
2022-09-06 8:33 ` [PATCH v4 01/21] hwmon: (mr75203) fix coding style space errors Eliav Farber
2022-09-06 16:52 ` Guenter Roeck
2022-09-07 6:50 ` Farber, Eliav
2022-09-07 14:42 ` Andy Shevchenko
2022-09-07 15:57 ` Guenter Roeck
2022-09-06 8:33 ` [PATCH v4 02/21] dt-bindings: hwmon: (mr75203) fix "intel,vm-map" property to be optional Eliav Farber
2022-09-06 16:53 ` Guenter Roeck
2022-09-07 6:28 ` [PATCH v4 02/21] dt-bindings: hwmon: (mr75203) fix "intel, vm-map" " Farber, Eliav
2022-09-07 16:00 ` Guenter Roeck
2022-09-06 8:33 ` [PATCH v4 03/21] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" not defined Eliav Farber
2022-09-06 8:33 ` [PATCH v4 04/21] hwmon: (mr75203) update pvt->v_num and vm_num to the actual number of used sensors Eliav Farber
2022-09-06 8:33 ` [PATCH v4 05/21] hwmon: (mr75203) fix voltage equation for negative source input Eliav Farber
2022-09-06 12:03 ` Andy Shevchenko
2022-09-06 13:27 ` Farber, Eliav
2022-09-06 14:01 ` Andy Shevchenko
2022-09-06 8:33 ` [PATCH v4 06/21] hwmon: (mr75203) fix multi-channel voltage reading Eliav Farber
2022-09-06 14:10 ` Andy Shevchenko
2022-09-07 5:15 ` Farber, Eliav
2022-09-07 14:41 ` Andy Shevchenko
2022-09-06 8:33 ` [PATCH v4 07/21] hwmon: (mr75203) enable polling for all VM channels Eliav Farber
2022-09-06 8:33 ` [PATCH v4 08/21] dt-bindings: hwmon: (mr75203) add description for Moortec's PVT controller Eliav Farber
2022-09-08 22:40 ` Rob Herring
2022-09-06 8:33 ` [PATCH v4 09/21] dt-bindings: hwmon: (mr75203) change "resets" property to be optional Eliav Farber
2022-09-08 22:40 ` Rob Herring
2022-09-06 8:33 ` [PATCH v4 10/21] hwmon: (mr75203) skip reset-control deassert for SOCs that don't support it Eliav Farber
2022-09-06 8:33 ` [PATCH v4 11/21] dt-bindings: vendor-prefixes: add vendor prefix for Moortec Eliav Farber
2022-09-06 8:33 ` [PATCH v4 12/21] dt-bindings: hwmon: (mr75203) add "moortec,vm-active-channels" property Eliav Farber
2022-09-06 17:08 ` Guenter Roeck
2022-09-07 5:21 ` [PATCH v4 12/21] dt-bindings: hwmon: (mr75203) add "moortec, vm-active-channels" property Farber, Eliav
2022-09-06 8:33 ` [PATCH v4 13/21] hwmon: (mr75203) add VM active channel support Eliav Farber
2022-09-06 8:33 ` [PATCH v4 14/21] dt-bindings: hwmon: (mr75203) add "moortec,vm-pre-scaler-x2" property Eliav Farber
2022-09-06 8:33 ` [PATCH v4 15/21] hwmon: (mr75203) add VM pre-scaler x2 support Eliav Farber
2022-09-06 8:33 ` [PATCH v4 16/21] hwmon: (mr75203) modify the temperature equation according to series 5 datasheet Eliav Farber
2022-09-06 8:33 ` [PATCH v4 17/21] dt-bindings: hwmon: (mr75203) add "moortec,ts-series" property Eliav Farber
2022-09-06 8:33 ` Eliav Farber [this message]
2022-09-06 8:33 ` [PATCH v4 19/21] dt-bindings: hwmon: (mr75203) add coefficient properties for the thermal equation Eliav Farber
2022-09-06 8:33 ` [PATCH v4 20/21] hwmon: (mr75203) parse temperature coefficients from device-tree Eliav Farber
2022-09-06 8:33 ` [PATCH v4 21/21] hwmon: (mr75203) add debugfs to read and write temperature coefficients Eliav Farber
2022-09-06 14:26 ` [PATCH v4 00/21] Variety of fixes and new features for mr75203 driver Andy Shevchenko
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=20220906083356.21067-19-farbere@amazon.com \
--to=farbere@amazon.com \
--cc=andriy.shevchenko@intel.com \
--cc=devicetree@vger.kernel.org \
--cc=hhhawa@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=robh+dt@kernel.org \
--cc=rtanwar@maxlinear.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.