linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers
@ 2019-11-28 14:54 Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 1/8] " Akinobu Mita
                   ` (7 more replies)
  0 siblings, 8 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

There are several helper macros to convert kelvin to/from Celsius in
<linux/thermal.h> for thermal drivers.  These are useful for any other
drivers or subsystems, but it's odd to include <linux/thermal.h> just for
the helpers.

This adds a new <linux/temperature.h> that provides the equivalent inline
functions for any drivers or subsystems, and switches all the users of
conversion helpers in <linux/thermal.h> to use <linux/temperature.h>
helpers.

* v2
- add deci_kelvin_to_millicelsius_with_offset() in linux/temperature.h
- stop including linux/temperature.h from linux/thermal.h
- include <linux/temperature.h> explicitly from thermal drivers
- fix s/temprature/temperature/ typo in commit log
- use deci_kelvin_to_millicelsius_with_offset() in ACPI thermal zone driver
- don't mix up another fix (format string for cellsius value)
- add Acked-by and Reviewed-by tags

Akinobu Mita (8):
  add header file for kelvin to/from Celsius conversion helpers
  ACPI: thermal: switch to use <linux/temperature.h> helpers
  platform/x86: asus-wmi: switch to use <linux/temperature.h> helpers
  platform/x86: intel_menlow: switch to use <linux/temperature.h>
    helpers
  thermal: int340x: switch to use <linux/temperature.h> helpers
  thermal: intel_pch: switch to use <linux/temperature.h> helpers
  nvme: hwmon: switch to use <linux/temperature.h> helpers
  thermal: remove kelvin to/from Celsius conversion helpers from
    <linux/thermal.h>

 drivers/acpi/thermal.c                             | 36 ++++++++-------
 drivers/nvme/host/hwmon.c                          | 13 +++---
 drivers/platform/x86/asus-wmi.c                    |  7 ++-
 drivers/platform/x86/intel_menlow.c                |  9 ++--
 .../intel/int340x_thermal/int340x_thermal_zone.c   |  7 +--
 drivers/thermal/intel/intel_pch_thermal.c          |  3 +-
 include/linux/temperature.h                        | 51 ++++++++++++++++++++++
 include/linux/thermal.h                            | 11 -----
 8 files changed, 91 insertions(+), 46 deletions(-)
 create mode 100644 include/linux/temperature.h

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
-- 
2.7.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v2 1/8] add header file for kelvin to/from Celsius conversion helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-12-06 16:49   ` Daniel Lezcano
  2019-11-28 14:54 ` [PATCH v2 2/8] ACPI: thermal: switch to use <linux/temperature.h> helpers Akinobu Mita
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

There are several helper macros to convert kelvin to/from Celsius in
<linux/thermal.h> for thermal drivers.  These are useful for any other
drivers or subsystems, but it's odd to include <linux/thermal.h> just for
the helpers.

This adds a new <linux/temperature.h> that provides the equivalent inline
functions for any drivers or subsystems.  It is intended to replace the
helpers in <linux/thermal.h>.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- add deci_kelvin_to_millicelsius_with_offset() in linux/temperature.h
- stop including linux/temperature.h from linux/thermal.h

 include/linux/temperature.h | 51 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100644 include/linux/temperature.h

diff --git a/include/linux/temperature.h b/include/linux/temperature.h
new file mode 100644
index 0000000..679e70a
--- /dev/null
+++ b/include/linux/temperature.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_TEMPERATURE_H
+#define _LINUX_TEMPERATURE_H
+
+#include <linux/kernel.h>
+
+#define ABSOLUTE_ZERO_MILLICELSIUS -273150
+
+static inline long kelvin_to_millicelsius(long t)
+{
+	return t * 1000 + ABSOLUTE_ZERO_MILLICELSIUS;
+}
+
+static inline long millicelsius_to_kelvin(long t)
+{
+	return DIV_ROUND_CLOSEST(t - ABSOLUTE_ZERO_MILLICELSIUS, 1000);
+}
+
+static inline long deci_kelvin_to_celsius(long t)
+{
+	return DIV_ROUND_CLOSEST(t * 100 + ABSOLUTE_ZERO_MILLICELSIUS, 1000);
+}
+
+static inline long celsius_to_deci_kelvin(long t)
+{
+	return t * 10 - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS, 100);
+}
+
+/**
+ * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
+ * @t: temperature value in decidegrees Kelvin
+ * @offset: difference between Kelvin and Celsius in millidegrees
+ *
+ * Return: temperature value in millidegrees Celsius
+ */
+static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
+{
+	return t * 100 - offset;
+}
+
+static inline long deci_kelvin_to_millicelsius(long t)
+{
+	return t * 100 + ABSOLUTE_ZERO_MILLICELSIUS;
+}
+
+static inline long millicelsius_to_deci_kelvin(long t)
+{
+	return DIV_ROUND_CLOSEST(t - ABSOLUTE_ZERO_MILLICELSIUS, 100);
+}
+
+#endif /* _LINUX_TEMPERATURE_H */
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 2/8] ACPI: thermal: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 1/8] " Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 3/8] platform/x86: asus-wmi: " Akinobu Mita
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

This switches the ACPI thermal zone driver to use celsius_to_deci_kelvin(),
deci_kelvin_to_celsius(), and deci_kelvin_to_millicelsius_with_offset() in
<linux/temperature.h> instead of helpers in <linux/thermal.h>.

This is preparation for centralizing the kelvin to/from Celsius conversion
helpers in <linux/temperature.h>.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- include <linux/temperature.h> explicitly from thermal drivers
- fix s/temprature/temperature/ typo in commit log
- use deci_kelvin_to_millicelsius_with_offset()

 drivers/acpi/thermal.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index d831a61..9f96e66 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -24,6 +24,7 @@
 #include <linux/reboot.h>
 #include <linux/device.h>
 #include <linux/thermal.h>
+#include <linux/temperature.h>
 #include <linux/acpi.h>
 #include <linux/workqueue.h>
 #include <linux/uaccess.h>
@@ -172,7 +173,7 @@ struct acpi_thermal {
 	struct acpi_handle_list devices;
 	struct thermal_zone_device *thermal_zone;
 	int tz_enabled;
-	int kelvin_offset;
+	int kelvin_offset;	/* in millidegrees */
 	struct work_struct thermal_check_work;
 };
 
@@ -297,7 +298,9 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
 			if (crt == -1) {
 				tz->trips.critical.flags.valid = 0;
 			} else if (crt > 0) {
-				unsigned long crt_k = CELSIUS_TO_DECI_KELVIN(crt);
+				unsigned long crt_k =
+					celsius_to_deci_kelvin(crt);
+
 				/*
 				 * Allow override critical threshold
 				 */
@@ -333,7 +336,7 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
 		if (psv == -1) {
 			status = AE_SUPPORT;
 		} else if (psv > 0) {
-			tmp = CELSIUS_TO_DECI_KELVIN(psv);
+			tmp = celsius_to_deci_kelvin(psv);
 			status = AE_OK;
 		} else {
 			status = acpi_evaluate_integer(tz->device->handle,
@@ -413,7 +416,7 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
 					break;
 				if (i == 1)
 					tz->trips.active[0].temperature =
-						CELSIUS_TO_DECI_KELVIN(act);
+						celsius_to_deci_kelvin(act);
 				else
 					/*
 					 * Don't allow override higher than
@@ -421,9 +424,9 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
 					 */
 					tz->trips.active[i - 1].temperature =
 						(tz->trips.active[i - 2].temperature <
-						CELSIUS_TO_DECI_KELVIN(act) ?
+						celsius_to_deci_kelvin(act) ?
 						tz->trips.active[i - 2].temperature :
-						CELSIUS_TO_DECI_KELVIN(act));
+						celsius_to_deci_kelvin(act));
 				break;
 			} else {
 				tz->trips.active[i].temperature = tmp;
@@ -519,7 +522,7 @@ static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp)
 	if (result)
 		return result;
 
-	*temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(tz->temperature,
+	*temp = deci_kelvin_to_millicelsius_with_offset(tz->temperature,
 							tz->kelvin_offset);
 	return 0;
 }
@@ -624,7 +627,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
 
 	if (tz->trips.critical.flags.valid) {
 		if (!trip) {
-			*temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
+			*temp = deci_kelvin_to_millicelsius_with_offset(
 				tz->trips.critical.temperature,
 				tz->kelvin_offset);
 			return 0;
@@ -634,7 +637,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
 
 	if (tz->trips.hot.flags.valid) {
 		if (!trip) {
-			*temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
+			*temp = deci_kelvin_to_millicelsius_with_offset(
 				tz->trips.hot.temperature,
 				tz->kelvin_offset);
 			return 0;
@@ -644,7 +647,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
 
 	if (tz->trips.passive.flags.valid) {
 		if (!trip) {
-			*temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
+			*temp = deci_kelvin_to_millicelsius_with_offset(
 				tz->trips.passive.temperature,
 				tz->kelvin_offset);
 			return 0;
@@ -655,7 +658,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
 	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE &&
 		tz->trips.active[i].flags.valid; i++) {
 		if (!trip) {
-			*temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
+			*temp = deci_kelvin_to_millicelsius_with_offset(
 				tz->trips.active[i].temperature,
 				tz->kelvin_offset);
 			return 0;
@@ -672,7 +675,7 @@ static int thermal_get_crit_temp(struct thermal_zone_device *thermal,
 	struct acpi_thermal *tz = thermal->devdata;
 
 	if (tz->trips.critical.flags.valid) {
-		*temperature = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
+		*temperature = deci_kelvin_to_millicelsius_with_offset(
 				tz->trips.critical.temperature,
 				tz->kelvin_offset);
 		return 0;
@@ -692,7 +695,7 @@ static int thermal_get_trend(struct thermal_zone_device *thermal,
 
 	if (type == THERMAL_TRIP_ACTIVE) {
 		int trip_temp;
-		int temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
+		int temp = deci_kelvin_to_millicelsius_with_offset(
 					tz->temperature, tz->kelvin_offset);
 		if (thermal_get_trip_temp(thermal, trip, &trip_temp))
 			return -EINVAL;
@@ -1043,9 +1046,9 @@ static void acpi_thermal_guess_offset(struct acpi_thermal *tz)
 {
 	if (tz->trips.critical.flags.valid &&
 	    (tz->trips.critical.temperature % 5) == 1)
-		tz->kelvin_offset = 2731;
+		tz->kelvin_offset = 273100;
 	else
-		tz->kelvin_offset = 2732;
+		tz->kelvin_offset = 273200;
 }
 
 static void acpi_thermal_check_fn(struct work_struct *work)
@@ -1087,7 +1090,8 @@ static int acpi_thermal_add(struct acpi_device *device)
 	INIT_WORK(&tz->thermal_check_work, acpi_thermal_check_fn);
 
 	pr_info(PREFIX "%s [%s] (%ld C)\n", acpi_device_name(device),
-		acpi_device_bid(device), DECI_KELVIN_TO_CELSIUS(tz->temperature));
+		acpi_device_bid(device),
+		deci_kelvin_to_celsius(tz->temperature));
 	goto end;
 
 free_memory:
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 3/8] platform/x86: asus-wmi: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 1/8] " Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 2/8] ACPI: thermal: switch to use <linux/temperature.h> helpers Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 4/8] platform/x86: intel_menlow: " Akinobu Mita
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

The asus-wmi driver doesn't implement the thermal device functionality
directly, so including <linux/thermal.h> just for DECI_KELVIN_TO_CELSIUS()
is a bit odd.

This switches the asus-wmi driver to use deci_kelvin_to_millicelsius() in
<linux/temperature.h>.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- add Acked-by tag

 drivers/platform/x86/asus-wmi.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 821b08e..6a1a2f9 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -33,7 +33,7 @@
 #include <linux/seq_file.h>
 #include <linux/platform_data/x86/asus-wmi.h>
 #include <linux/platform_device.h>
-#include <linux/thermal.h>
+#include <linux/temperature.h>
 #include <linux/acpi.h>
 #include <linux/dmi.h>
 
@@ -1512,9 +1512,8 @@ static ssize_t asus_hwmon_temp1(struct device *dev,
 	if (err < 0)
 		return err;
 
-	value = DECI_KELVIN_TO_CELSIUS((value & 0xFFFF)) * 1000;
-
-	return sprintf(buf, "%d\n", value);
+	return sprintf(buf, "%ld\n",
+		       deci_kelvin_to_millicelsius(value & 0xFFFF));
 }
 
 /* Fan1 */
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 4/8] platform/x86: intel_menlow: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
                   ` (2 preceding siblings ...)
  2019-11-28 14:54 ` [PATCH v2 3/8] platform/x86: asus-wmi: " Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-11-28 15:02   ` Andy Shevchenko
  2019-11-28 14:54 ` [PATCH v2 5/8] thermal: int340x: " Akinobu Mita
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

This switches the intel_menlow driver to use deci_kelvin_to_celsius() and
celsius_to_deci_kelvin() in <linux/temperature.h> instead of helpers in
<linux/thermal.h>.

This is preparation for centralizing the kelvin to/from Celsius conversion
helpers in <linux/temperature.h>.

This also removes a trailing space, while we're at it.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- include <linux/temperature.h> explicitly from thermal drivers
- fix s/temprature/temperature/ typo in commit log
- don't mix up another fix (format string for cellsius value)

 drivers/platform/x86/intel_menlow.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/platform/x86/intel_menlow.c b/drivers/platform/x86/intel_menlow.c
index b102f6d..12c1094 100644
--- a/drivers/platform/x86/intel_menlow.c
+++ b/drivers/platform/x86/intel_menlow.c
@@ -20,6 +20,7 @@
 #include <linux/pci.h>
 #include <linux/pm.h>
 #include <linux/slab.h>
+#include <linux/temperature.h>
 #include <linux/thermal.h>
 #include <linux/types.h>
 
@@ -302,8 +303,10 @@ static ssize_t aux_show(struct device *dev, struct device_attribute *dev_attr,
 	int result;
 
 	result = sensor_get_auxtrip(attr->handle, idx, &value);
+	if (result)
+		return result;
 
-	return result ? result : sprintf(buf, "%lu", DECI_KELVIN_TO_CELSIUS(value));
+	return sprintf(buf, "%lu", deci_kelvin_to_celsius(value));
 }
 
 static ssize_t aux0_show(struct device *dev,
@@ -332,8 +335,8 @@ static ssize_t aux_store(struct device *dev, struct device_attribute *dev_attr,
 	if (value < 0)
 		return -EINVAL;
 
-	result = sensor_set_auxtrip(attr->handle, idx, 
-				    CELSIUS_TO_DECI_KELVIN(value));
+	result = sensor_set_auxtrip(attr->handle, idx,
+				    celsius_to_deci_kelvin(value));
 	return result ? result : count;
 }
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 5/8] thermal: int340x: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
                   ` (3 preceding siblings ...)
  2019-11-28 14:54 ` [PATCH v2 4/8] platform/x86: intel_menlow: " Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 6/8] thermal: intel_pch: " Akinobu Mita
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

This switches the int340x thermal zone driver to use
deci_kelvin_to_millicelsius() and millicelsius_to_deci_kelvin() in
<linux/temperature.h> instead of helpers in <linux/thermal.h>.

This is preparation for centralizing the kelvin to/from Celsius conversion
helpers in <linux/temperature.h>.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- include <linux/temperature.h> explicitly from thermal drivers
- fix s/temprature/temperature/ typo in commit log

 drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
index 75484d6..6658cc7 100644
--- a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
+++ b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
@@ -7,6 +7,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/acpi.h>
+#include <linux/temperature.h>
 #include <linux/thermal.h>
 #include "int340x_thermal_zone.h"
 
@@ -34,7 +35,7 @@ static int int340x_thermal_get_zone_temp(struct thermal_zone_device *zone,
 		*temp = (unsigned long)conv_temp * 10;
 	} else
 		/* _TMP returns the temperature in tenths of degrees Kelvin */
-		*temp = DECI_KELVIN_TO_MILLICELSIUS(tmp);
+		*temp = deci_kelvin_to_millicelsius(tmp);
 
 	return 0;
 }
@@ -116,7 +117,7 @@ static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone,
 
 	snprintf(name, sizeof(name), "PAT%d", trip);
 	status = acpi_execute_simple_method(d->adev->handle, name,
-			MILLICELSIUS_TO_DECI_KELVIN(temp));
+			millicelsius_to_deci_kelvin(temp));
 	if (ACPI_FAILURE(status))
 		return -EIO;
 
@@ -163,7 +164,7 @@ static int int340x_thermal_get_trip_config(acpi_handle handle, char *name,
 	if (ACPI_FAILURE(status))
 		return -EIO;
 
-	*temp = DECI_KELVIN_TO_MILLICELSIUS(r);
+	*temp = deci_kelvin_to_millicelsius(r);
 
 	return 0;
 }
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 6/8] thermal: intel_pch: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
                   ` (4 preceding siblings ...)
  2019-11-28 14:54 ` [PATCH v2 5/8] thermal: int340x: " Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 7/8] nvme: hwmon: " Akinobu Mita
  2019-11-28 14:54 ` [PATCH v2 8/8] thermal: remove kelvin to/from Celsius conversion helpers from <linux/thermal.h> Akinobu Mita
  7 siblings, 0 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

This switches the intel pch thermal driver to use
deci_kelvin_to_millicelsius() in <linux/temperature.h> instead of helpers
in <linux/thermal.h>.

This is preparation for centralizing the kelvin to/from Celsius conversion
helpers in <linux/temperature.h>.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- include <linux/temperature.h> explicitly from thermal drivers
- fix s/temprature/temperature/ typo in commit log

 drivers/thermal/intel/intel_pch_thermal.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/intel/intel_pch_thermal.c b/drivers/thermal/intel/intel_pch_thermal.c
index 4f0bb8f..505a5d2 100644
--- a/drivers/thermal/intel/intel_pch_thermal.c
+++ b/drivers/thermal/intel/intel_pch_thermal.c
@@ -13,6 +13,7 @@
 #include <linux/pci.h>
 #include <linux/acpi.h>
 #include <linux/thermal.h>
+#include <linux/temperature.h>
 #include <linux/pm.h>
 
 /* Intel PCH thermal Device IDs */
@@ -92,7 +93,7 @@ static void pch_wpt_add_acpi_psv_trip(struct pch_thermal_device *ptd,
 		if (ACPI_SUCCESS(status)) {
 			unsigned long trip_temp;
 
-			trip_temp = DECI_KELVIN_TO_MILLICELSIUS(r);
+			trip_temp = deci_kelvin_to_millicelsius(r);
 			if (trip_temp) {
 				ptd->psv_temp = trip_temp;
 				ptd->psv_trip_id = *nr_trips;
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 7/8] nvme: hwmon: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
                   ` (5 preceding siblings ...)
  2019-11-28 14:54 ` [PATCH v2 6/8] thermal: intel_pch: " Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  2019-11-28 15:14   ` Guenter Roeck
  2019-12-11 18:33   ` Keith Busch
  2019-11-28 14:54 ` [PATCH v2 8/8] thermal: remove kelvin to/from Celsius conversion helpers from <linux/thermal.h> Akinobu Mita
  7 siblings, 2 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

This switches the nvme driver to use kelvin_to_millicelsius() and
millicelsius_to_kelvin() in <linux/temperature.h>.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- add Reviewed-by tag

 drivers/nvme/host/hwmon.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/drivers/nvme/host/hwmon.c b/drivers/nvme/host/hwmon.c
index a5af21f..14720c1 100644
--- a/drivers/nvme/host/hwmon.c
+++ b/drivers/nvme/host/hwmon.c
@@ -5,14 +5,11 @@
  */
 
 #include <linux/hwmon.h>
+#include <linux/temperature.h>
 #include <asm/unaligned.h>
 
 #include "nvme.h"
 
-/* These macros should be moved to linux/temperature.h */
-#define MILLICELSIUS_TO_KELVIN(t) DIV_ROUND_CLOSEST((t) + 273150, 1000)
-#define KELVIN_TO_MILLICELSIUS(t) ((t) * 1000L - 273150)
-
 struct nvme_hwmon_data {
 	struct nvme_ctrl *ctrl;
 	struct nvme_smart_log log;
@@ -35,7 +32,7 @@ static int nvme_get_temp_thresh(struct nvme_ctrl *ctrl, int sensor, bool under,
 		return -EIO;
 	if (ret < 0)
 		return ret;
-	*temp = KELVIN_TO_MILLICELSIUS(status & NVME_TEMP_THRESH_MASK);
+	*temp = kelvin_to_millicelsius(status & NVME_TEMP_THRESH_MASK);
 
 	return 0;
 }
@@ -46,7 +43,7 @@ static int nvme_set_temp_thresh(struct nvme_ctrl *ctrl, int sensor, bool under,
 	unsigned int threshold = sensor << NVME_TEMP_THRESH_SELECT_SHIFT;
 	int ret;
 
-	temp = MILLICELSIUS_TO_KELVIN(temp);
+	temp = millicelsius_to_kelvin(temp);
 	threshold |= clamp_val(temp, 0, NVME_TEMP_THRESH_MASK);
 
 	if (under)
@@ -88,7 +85,7 @@ static int nvme_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
 	case hwmon_temp_min:
 		return nvme_get_temp_thresh(data->ctrl, channel, true, val);
 	case hwmon_temp_crit:
-		*val = KELVIN_TO_MILLICELSIUS(data->ctrl->cctemp);
+		*val = kelvin_to_millicelsius(data->ctrl->cctemp);
 		return 0;
 	default:
 		break;
@@ -105,7 +102,7 @@ static int nvme_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
 			temp = get_unaligned_le16(log->temperature);
 		else
 			temp = le16_to_cpu(log->temp_sensor[channel - 1]);
-		*val = KELVIN_TO_MILLICELSIUS(temp);
+		*val = kelvin_to_millicelsius(temp);
 		break;
 	case hwmon_temp_alarm:
 		*val = !!(log->critical_warning & NVME_SMART_CRIT_TEMPERATURE);
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 8/8] thermal: remove kelvin to/from Celsius conversion helpers from <linux/thermal.h>
  2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
                   ` (6 preceding siblings ...)
  2019-11-28 14:54 ` [PATCH v2 7/8] nvme: hwmon: " Akinobu Mita
@ 2019-11-28 14:54 ` Akinobu Mita
  7 siblings, 0 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-11-28 14:54 UTC (permalink / raw)
  To: linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Akinobu Mita, Sujith Thomas, Darren Hart, Andy Shevchenko,
	Zhang Rui, Daniel Lezcano, Amit Kucheria, Jean Delvare,
	Guenter Roeck, Keith Busch, Jens Axboe, Christoph Hellwig,
	Sagi Grimberg

This removes the kelvin to/from Celsius conversion helpers in
<linux/thermal.h> which were switched to <linux/temperature.h> helpers.

Cc: Sujith Thomas <sujith.thomas@intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@fb.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
* v2
- don't preserve DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET()

 include/linux/thermal.h | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index e45659c..da272fa 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -32,17 +32,6 @@
 /* use value, which < 0K, to indicate an invalid/uninitialized temperature */
 #define THERMAL_TEMP_INVALID	-274000
 
-/* Unit conversion macros */
-#define DECI_KELVIN_TO_CELSIUS(t)	({			\
-	long _t = (t);						\
-	((_t-2732 >= 0) ? (_t-2732+5)/10 : (_t-2732-5)/10);	\
-})
-#define CELSIUS_TO_DECI_KELVIN(t)	((t)*10+2732)
-#define DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(t, off) (((t) - (off)) * 100)
-#define DECI_KELVIN_TO_MILLICELSIUS(t) DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(t, 2732)
-#define MILLICELSIUS_TO_DECI_KELVIN_WITH_OFFSET(t, off) (((t) / 100) + (off))
-#define MILLICELSIUS_TO_DECI_KELVIN(t) MILLICELSIUS_TO_DECI_KELVIN_WITH_OFFSET(t, 2732)
-
 /* Default Thermal Governor */
 #if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE)
 #define DEFAULT_THERMAL_GOVERNOR       "step_wise"
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 4/8] platform/x86: intel_menlow: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 ` [PATCH v2 4/8] platform/x86: intel_menlow: " Akinobu Mita
@ 2019-11-28 15:02   ` Andy Shevchenko
  0 siblings, 0 replies; 14+ messages in thread
From: Andy Shevchenko @ 2019-11-28 15:02 UTC (permalink / raw)
  To: Akinobu Mita
  Cc: Linux NVMe Mailinglist, linux-hwmon, Linux PM,
	Linux Kernel Mailing List, Sujith Thomas, Darren Hart,
	Andy Shevchenko, Zhang Rui, Daniel Lezcano, Amit Kucheria,
	Jean Delvare, Guenter Roeck, Keith Busch, Jens Axboe,
	Christoph Hellwig, Sagi Grimberg

On Thu, Nov 28, 2019 at 4:55 PM Akinobu Mita <akinobu.mita@gmail.com> wrote:
>
> This switches the intel_menlow driver to use deci_kelvin_to_celsius() and
> celsius_to_deci_kelvin() in <linux/temperature.h> instead of helpers in
> <linux/thermal.h>.
>
> This is preparation for centralizing the kelvin to/from Celsius conversion
> helpers in <linux/temperature.h>.
>
> This also removes a trailing space, while we're at it.
>

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

> Cc: Sujith Thomas <sujith.thomas@intel.com>
> Cc: Darren Hart <dvhart@infradead.org>
> Cc: Andy Shevchenko <andy@infradead.org>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Amit Kucheria <amit.kucheria@verdurent.com>
> Cc: Jean Delvare <jdelvare@suse.com>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: Keith Busch <kbusch@kernel.org>
> Cc: Jens Axboe <axboe@fb.com>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Sagi Grimberg <sagi@grimberg.me>
> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
> ---
> * v2
> - include <linux/temperature.h> explicitly from thermal drivers
> - fix s/temprature/temperature/ typo in commit log
> - don't mix up another fix (format string for cellsius value)
>
>  drivers/platform/x86/intel_menlow.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/platform/x86/intel_menlow.c b/drivers/platform/x86/intel_menlow.c
> index b102f6d..12c1094 100644
> --- a/drivers/platform/x86/intel_menlow.c
> +++ b/drivers/platform/x86/intel_menlow.c
> @@ -20,6 +20,7 @@
>  #include <linux/pci.h>
>  #include <linux/pm.h>
>  #include <linux/slab.h>
> +#include <linux/temperature.h>
>  #include <linux/thermal.h>
>  #include <linux/types.h>
>
> @@ -302,8 +303,10 @@ static ssize_t aux_show(struct device *dev, struct device_attribute *dev_attr,
>         int result;
>
>         result = sensor_get_auxtrip(attr->handle, idx, &value);
> +       if (result)
> +               return result;
>
> -       return result ? result : sprintf(buf, "%lu", DECI_KELVIN_TO_CELSIUS(value));
> +       return sprintf(buf, "%lu", deci_kelvin_to_celsius(value));
>  }
>
>  static ssize_t aux0_show(struct device *dev,
> @@ -332,8 +335,8 @@ static ssize_t aux_store(struct device *dev, struct device_attribute *dev_attr,
>         if (value < 0)
>                 return -EINVAL;
>
> -       result = sensor_set_auxtrip(attr->handle, idx,
> -                                   CELSIUS_TO_DECI_KELVIN(value));
> +       result = sensor_set_auxtrip(attr->handle, idx,
> +                                   celsius_to_deci_kelvin(value));
>         return result ? result : count;
>  }
>
> --
> 2.7.4
>


-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 7/8] nvme: hwmon: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 ` [PATCH v2 7/8] nvme: hwmon: " Akinobu Mita
@ 2019-11-28 15:14   ` Guenter Roeck
  2019-12-11 18:33   ` Keith Busch
  1 sibling, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2019-11-28 15:14 UTC (permalink / raw)
  To: Akinobu Mita, linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Sujith Thomas, Darren Hart, Andy Shevchenko, Zhang Rui,
	Daniel Lezcano, Amit Kucheria, Jean Delvare, Keith Busch,
	Jens Axboe, Christoph Hellwig, Sagi Grimberg

On 11/28/19 6:54 AM, Akinobu Mita wrote:
> This switches the nvme driver to use kelvin_to_millicelsius() and
> millicelsius_to_kelvin() in <linux/temperature.h>.
> 
> Cc: Sujith Thomas <sujith.thomas@intel.com>
> Cc: Darren Hart <dvhart@infradead.org>
> Cc: Andy Shevchenko <andy@infradead.org>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Amit Kucheria <amit.kucheria@verdurent.com>
> Cc: Jean Delvare <jdelvare@suse.com>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: Keith Busch <kbusch@kernel.org>
> Cc: Jens Axboe <axboe@fb.com>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Sagi Grimberg <sagi@grimberg.me>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
> * v2
> - add Reviewed-by tag
> 
>   drivers/nvme/host/hwmon.c | 13 +++++--------
>   1 file changed, 5 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/nvme/host/hwmon.c b/drivers/nvme/host/hwmon.c
> index a5af21f..14720c1 100644
> --- a/drivers/nvme/host/hwmon.c
> +++ b/drivers/nvme/host/hwmon.c
> @@ -5,14 +5,11 @@
>    */
>   
>   #include <linux/hwmon.h>
> +#include <linux/temperature.h>
>   #include <asm/unaligned.h>
>   
>   #include "nvme.h"
>   
> -/* These macros should be moved to linux/temperature.h */
> -#define MILLICELSIUS_TO_KELVIN(t) DIV_ROUND_CLOSEST((t) + 273150, 1000)
> -#define KELVIN_TO_MILLICELSIUS(t) ((t) * 1000L - 273150)
> -
>   struct nvme_hwmon_data {
>   	struct nvme_ctrl *ctrl;
>   	struct nvme_smart_log log;
> @@ -35,7 +32,7 @@ static int nvme_get_temp_thresh(struct nvme_ctrl *ctrl, int sensor, bool under,
>   		return -EIO;
>   	if (ret < 0)
>   		return ret;
> -	*temp = KELVIN_TO_MILLICELSIUS(status & NVME_TEMP_THRESH_MASK);
> +	*temp = kelvin_to_millicelsius(status & NVME_TEMP_THRESH_MASK);
>   
>   	return 0;
>   }
> @@ -46,7 +43,7 @@ static int nvme_set_temp_thresh(struct nvme_ctrl *ctrl, int sensor, bool under,
>   	unsigned int threshold = sensor << NVME_TEMP_THRESH_SELECT_SHIFT;
>   	int ret;
>   
> -	temp = MILLICELSIUS_TO_KELVIN(temp);
> +	temp = millicelsius_to_kelvin(temp);
>   	threshold |= clamp_val(temp, 0, NVME_TEMP_THRESH_MASK);
>   
>   	if (under)
> @@ -88,7 +85,7 @@ static int nvme_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
>   	case hwmon_temp_min:
>   		return nvme_get_temp_thresh(data->ctrl, channel, true, val);
>   	case hwmon_temp_crit:
> -		*val = KELVIN_TO_MILLICELSIUS(data->ctrl->cctemp);
> +		*val = kelvin_to_millicelsius(data->ctrl->cctemp);
>   		return 0;
>   	default:
>   		break;
> @@ -105,7 +102,7 @@ static int nvme_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
>   			temp = get_unaligned_le16(log->temperature);
>   		else
>   			temp = le16_to_cpu(log->temp_sensor[channel - 1]);
> -		*val = KELVIN_TO_MILLICELSIUS(temp);
> +		*val = kelvin_to_millicelsius(temp);
>   		break;
>   	case hwmon_temp_alarm:
>   		*val = !!(log->critical_warning & NVME_SMART_CRIT_TEMPERATURE);
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/8] add header file for kelvin to/from Celsius conversion helpers
  2019-11-28 14:54 ` [PATCH v2 1/8] " Akinobu Mita
@ 2019-12-06 16:49   ` Daniel Lezcano
  2019-12-07 15:57     ` Akinobu Mita
  0 siblings, 1 reply; 14+ messages in thread
From: Daniel Lezcano @ 2019-12-06 16:49 UTC (permalink / raw)
  To: Akinobu Mita, linux-nvme, linux-hwmon, linux-pm, linux-kernel
  Cc: Sujith Thomas, Darren Hart, Andy Shevchenko, Zhang Rui,
	Amit Kucheria, Jean Delvare, Guenter Roeck, Keith Busch,
	Jens Axboe, Christoph Hellwig, Sagi Grimberg

On 28/11/2019 15:54, Akinobu Mita wrote:
> There are several helper macros to convert kelvin to/from Celsius in
> <linux/thermal.h> for thermal drivers.  These are useful for any other
> drivers or subsystems, but it's odd to include <linux/thermal.h> just for
> the helpers.
> 
> This adds a new <linux/temperature.h> that provides the equivalent inline
> functions for any drivers or subsystems.  It is intended to replace the
> helpers in <linux/thermal.h>.
> 
> Cc: Sujith Thomas <sujith.thomas@intel.com>
> Cc: Darren Hart <dvhart@infradead.org>
> Cc: Andy Shevchenko <andy@infradead.org>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Amit Kucheria <amit.kucheria@verdurent.com>
> Cc: Jean Delvare <jdelvare@suse.com>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: Keith Busch <kbusch@kernel.org>
> Cc: Jens Axboe <axboe@fb.com>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Sagi Grimberg <sagi@grimberg.me>
> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
> ---
> * v2
> - add deci_kelvin_to_millicelsius_with_offset() in linux/temperature.h
> - stop including linux/temperature.h from linux/thermal.h
> 
>  include/linux/temperature.h | 51 +++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 51 insertions(+)
>  create mode 100644 include/linux/temperature.h
> 
> diff --git a/include/linux/temperature.h b/include/linux/temperature.h
> new file mode 100644
> index 0000000..679e70a
> --- /dev/null
> +++ b/include/linux/temperature.h
> @@ -0,0 +1,51 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef _LINUX_TEMPERATURE_H
> +#define _LINUX_TEMPERATURE_H

It sounds strange to create a temperature file just for a few conversion
functions. Why not create an units.h file, so some more conversions
could be added later (not necessarily related to temperature) ?

> +#include <linux/kernel.h>
> +
> +#define ABSOLUTE_ZERO_MILLICELSIUS -273150
> +
> +static inline long kelvin_to_millicelsius(long t)

Why 'long' ?

> +{
> +	return t * 1000 + ABSOLUTE_ZERO_MILLICELSIUS;
> +}
> +
> +static inline long millicelsius_to_kelvin(long t)
> +{
> +	return DIV_ROUND_CLOSEST(t - ABSOLUTE_ZERO_MILLICELSIUS, 1000);

Please don't duplicate these operations, just do the conversion to the
right unit and then call a single function.

Replace the constant by macros like what we find in time64.h.

eg.
#define MILLICELSIUS_PER_CELCIUS 1000

So you can really do the cleanup in all the drivers, like removing:

drivers/iio/adc/qcom-vadc-common.h:#define KELVINMIL_CELSIUSMIL
        273150
drivers/iio/pressure/st_pressure_core.c:#define MCELSIUS_PER_CELSIUS
                1000
drivers/hwmon/xgene-hwmon.c:#define CELSIUS_TO_mCELSIUS(x)
((x) * 1000)
drivers/net/wireless/intel/iwlegacy/common.h:#define
KELVIN_TO_CELSIUS(x) ((x)-273)
drivers/net/wireless/intel/iwlegacy/common.h:#define
CELSIUS_TO_KELVIN(x) ((x)+273)
drivers/net/wireless/intel/iwlwifi/dvm/dev.h:#define
KELVIN_TO_CELSIUS(x) ((x)-273)
drivers/net/wireless/intel/iwlwifi/dvm/dev.h:#define
CELSIUS_TO_KELVIN(x) ((x)+273)
drivers/power/supply/sbs-battery.c:#define TEMP_KELVIN_TO_CELSIUS
        2731
drivers/thermal/armada_thermal.c:#define TO_MCELSIUS(c)
((c) * 1000)
drivers/thermal/rcar_gen3_thermal.c:#define MCELSIUS(temp)      ((temp)
* 1000)
drivers/thermal/rcar_thermal.c:#define MCELSIUS(temp)
((temp) * 1000)
drivers/thermal/samsung/exynos_tmu.c:#define MCELSIUS   1000
drivers/thermal/samsung/exynos_tmu.c:                   temp /= MCELSIUS;
drivers/thermal/samsung/exynos_tmu.c:                   hyst /= MCELSIUS;
drivers/thermal/samsung/exynos_tmu.c:   ref = trips[0].temperature /
MCELSIUS;
drivers/thermal/samsung/exynos_tmu.c:           *temp =
code_to_temp(data, value) * MCELSIUS;
drivers/thermal/samsung/exynos_tmu.c:           temp /= MCELSIUS;


> +}
> +
> +static inline long deci_kelvin_to_celsius(long t)
> +{
> +	return DIV_ROUND_CLOSEST(t * 100 + ABSOLUTE_ZERO_MILLICELSIUS, 1000);
> +}
> +
> +static inline long celsius_to_deci_kelvin(long t)
> +{
> +	return t * 10 - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS, 100);
> +}
> +
> +/**
> + * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
> + * @t: temperature value in decidegrees Kelvin
> + * @offset: difference between Kelvin and Celsius in millidegrees
> + *
> + * Return: temperature value in millidegrees Celsius
> + */
> +static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
> +{
> +	return t * 100 - offset;
> +}
> +
> +static inline long deci_kelvin_to_millicelsius(long t)
> +{
> +	return t * 100 + ABSOLUTE_ZERO_MILLICELSIUS;
> +}
> +
> +static inline long millicelsius_to_deci_kelvin(long t)
> +{
> +	return DIV_ROUND_CLOSEST(t - ABSOLUTE_ZERO_MILLICELSIUS, 100);
> +}
> +
> +#endif /* _LINUX_TEMPERATURE_H */
> 


-- 
 <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/8] add header file for kelvin to/from Celsius conversion helpers
  2019-12-06 16:49   ` Daniel Lezcano
@ 2019-12-07 15:57     ` Akinobu Mita
  0 siblings, 0 replies; 14+ messages in thread
From: Akinobu Mita @ 2019-12-07 15:57 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Linux NVMe Mailinglist, linux-hwmon, Linux PM, LKML,
	Sujith Thomas, Darren Hart, Andy Shevchenko, Zhang Rui,
	Amit Kucheria, Jean Delvare, Guenter Roeck, Keith Busch,
	Jens Axboe, Christoph Hellwig, Sagi Grimberg

2019年12月7日(土) 1:49 Daniel Lezcano <daniel.lezcano@linaro.org>:
>
> On 28/11/2019 15:54, Akinobu Mita wrote:
> > There are several helper macros to convert kelvin to/from Celsius in
> > <linux/thermal.h> for thermal drivers.  These are useful for any other
> > drivers or subsystems, but it's odd to include <linux/thermal.h> just for
> > the helpers.
> >
> > This adds a new <linux/temperature.h> that provides the equivalent inline
> > functions for any drivers or subsystems.  It is intended to replace the
> > helpers in <linux/thermal.h>.
> >
> > Cc: Sujith Thomas <sujith.thomas@intel.com>
> > Cc: Darren Hart <dvhart@infradead.org>
> > Cc: Andy Shevchenko <andy@infradead.org>
> > Cc: Zhang Rui <rui.zhang@intel.com>
> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> > Cc: Amit Kucheria <amit.kucheria@verdurent.com>
> > Cc: Jean Delvare <jdelvare@suse.com>
> > Cc: Guenter Roeck <linux@roeck-us.net>
> > Cc: Keith Busch <kbusch@kernel.org>
> > Cc: Jens Axboe <axboe@fb.com>
> > Cc: Christoph Hellwig <hch@lst.de>
> > Cc: Sagi Grimberg <sagi@grimberg.me>
> > Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
> > ---
> > * v2
> > - add deci_kelvin_to_millicelsius_with_offset() in linux/temperature.h
> > - stop including linux/temperature.h from linux/thermal.h
> >
> >  include/linux/temperature.h | 51 +++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 51 insertions(+)
> >  create mode 100644 include/linux/temperature.h
> >
> > diff --git a/include/linux/temperature.h b/include/linux/temperature.h
> > new file mode 100644
> > index 0000000..679e70a
> > --- /dev/null
> > +++ b/include/linux/temperature.h
> > @@ -0,0 +1,51 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +#ifndef _LINUX_TEMPERATURE_H
> > +#define _LINUX_TEMPERATURE_H
>
> It sounds strange to create a temperature file just for a few conversion
> functions. Why not create an units.h file, so some more conversions
> could be added later (not necessarily related to temperature) ?

Fine with me.

> > +#include <linux/kernel.h>
> > +
> > +#define ABSOLUTE_ZERO_MILLICELSIUS -273150
> > +
> > +static inline long kelvin_to_millicelsius(long t)
>
> Why 'long' ?

There's no specific reason, but the existing DECI_KELVIN_TO_CELSIUS() in
linux/thermal.h converts to 'long'.

Do you prefer changing 'long' to 'int'?

> > +{
> > +     return t * 1000 + ABSOLUTE_ZERO_MILLICELSIUS;
> > +}
> > +
> > +static inline long millicelsius_to_kelvin(long t)
> > +{
> > +     return DIV_ROUND_CLOSEST(t - ABSOLUTE_ZERO_MILLICELSIUS, 1000);
>
> Please don't duplicate these operations, just do the conversion to the
> right unit and then call a single function.
>
> Replace the constant by macros like what we find in time64.h.
>
> eg.
> #define MILLICELSIUS_PER_CELCIUS 1000

How about this?

#define ABSOLUTE_ZERO_MILLICELSIUS -273150

static inline long milli_kelvin_to_millicelsius(long t)
{
        return t + ABSOLUTE_ZERO_MILLICELSIUS;
}

static inline long millicelsius_to_milli_kelvin(long t)
{
        return t - ABSOLUTE_ZERO_MILLICELSIUS;
}

#define MILLIDEGREE_PER_DEGREE 1000
#define MILLIDEGREE_PER_DECIDEGREE 100

static inline long kelvin_to_millicelsius(long t)
{
        return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DEGREE);
}

static inline long millicelsius_to_kelvin(long t)
{
        t = millicelsius_to_milli_kelvin(t);

        return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
}

static inline long deci_kelvin_to_celsius(long t)
{
        t = milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);

        return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
}

static inline long celsius_to_deci_kelvin(long t)
{
        t = millicelsius_to_milli_kelvin(t * MILLIDEGREE_PER_DEGREE);

        return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
}

/**
 * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
 * @t: temperature value in decidegrees Kelvin
 * @offset: difference between Kelvin and Celsius in millidegrees
 *
 * Return: temperature value in millidegrees Celsius
 */
static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
{
        return t * MILLIDEGREE_PER_DECIDEGREE - offset;
}

static inline long deci_kelvin_to_millicelsius(long t)
{
        return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
}

static inline long millicelsius_to_deci_kelvin(long t)
{
        t = millicelsius_to_milli_kelvin(t);

        return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
}

> So you can really do the cleanup in all the drivers, like removing:

OK.  I'll try as much as possible.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 7/8] nvme: hwmon: switch to use <linux/temperature.h> helpers
  2019-11-28 14:54 ` [PATCH v2 7/8] nvme: hwmon: " Akinobu Mita
  2019-11-28 15:14   ` Guenter Roeck
@ 2019-12-11 18:33   ` Keith Busch
  1 sibling, 0 replies; 14+ messages in thread
From: Keith Busch @ 2019-12-11 18:33 UTC (permalink / raw)
  To: Akinobu Mita
  Cc: linux-nvme, linux-hwmon, linux-pm, linux-kernel, Sujith Thomas,
	Darren Hart, Andy Shevchenko, Zhang Rui, Daniel Lezcano,
	Amit Kucheria, Jean Delvare, Guenter Roeck, Jens Axboe,
	Christoph Hellwig, Sagi Grimberg

On Thu, Nov 28, 2019 at 11:54:38PM +0900, Akinobu Mita wrote:
> This switches the nvme driver to use kelvin_to_millicelsius() and
> millicelsius_to_kelvin() in <linux/temperature.h>.

nvme change looks fine to me.

Reviewed-by: Keith Busch <kbusch@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2019-12-11 18:33 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-28 14:54 [PATCH v2 0/8] add header file for kelvin to/from Celsius conversion helpers Akinobu Mita
2019-11-28 14:54 ` [PATCH v2 1/8] " Akinobu Mita
2019-12-06 16:49   ` Daniel Lezcano
2019-12-07 15:57     ` Akinobu Mita
2019-11-28 14:54 ` [PATCH v2 2/8] ACPI: thermal: switch to use <linux/temperature.h> helpers Akinobu Mita
2019-11-28 14:54 ` [PATCH v2 3/8] platform/x86: asus-wmi: " Akinobu Mita
2019-11-28 14:54 ` [PATCH v2 4/8] platform/x86: intel_menlow: " Akinobu Mita
2019-11-28 15:02   ` Andy Shevchenko
2019-11-28 14:54 ` [PATCH v2 5/8] thermal: int340x: " Akinobu Mita
2019-11-28 14:54 ` [PATCH v2 6/8] thermal: intel_pch: " Akinobu Mita
2019-11-28 14:54 ` [PATCH v2 7/8] nvme: hwmon: " Akinobu Mita
2019-11-28 15:14   ` Guenter Roeck
2019-12-11 18:33   ` Keith Busch
2019-11-28 14:54 ` [PATCH v2 8/8] thermal: remove kelvin to/from Celsius conversion helpers from <linux/thermal.h> Akinobu Mita

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).