9296a00e43
[ Upstream commit e2c77032fcbe515194107994d12cd72ddb77b022 ] The macros for the unit conversion for frequency are duplicated in different places. Provide these macros in the 'units' header, so they can be reused. Link: https://lkml.kernel.org/r/20210816114732.1834145-3-daniel.lezcano@linaro.org Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Reviewed-by: Christian Eggers <ceggers@arri.de> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Chanwoo Choi <cw00.choi@samsung.com> Cc: Guenter Roeck <linux@roeck-us.net> Cc: Jonathan Cameron <jic23@kernel.org> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Lars-Peter Clausen <lars@metafoo.de> Cc: Lukasz Luba <lukasz.luba@arm.com> Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> Cc: Miquel Raynal <miquel.raynal@bootlin.com> Cc: MyungJoo Ham <myungjoo.ham@samsung.com> Cc: Peter Meerwald <pmeerw@pmeerw.net> Cc: "Rafael J. Wysocki" <rafael@kernel.org> Cc: Zhang Rui <rui.zhang@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Stable-dep-of: 3ef79cd14122 ("serial: sc16is7xx: set safe default SPI clock frequency") Signed-off-by: Sasha Levin <sashal@kernel.org>
108 lines
2.6 KiB
C
Executable file
108 lines
2.6 KiB
C
Executable file
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_UNITS_H
|
|
#define _LINUX_UNITS_H
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
/* Metric prefixes in accordance with Système international (d'unités) */
|
|
#define PETA 1000000000000000ULL
|
|
#define TERA 1000000000000ULL
|
|
#define GIGA 1000000000UL
|
|
#define MEGA 1000000UL
|
|
#define KILO 1000UL
|
|
#define HECTO 100UL
|
|
#define DECA 10UL
|
|
#define DECI 10UL
|
|
#define CENTI 100UL
|
|
#define MILLI 1000UL
|
|
#define MICRO 1000000UL
|
|
#define NANO 1000000000UL
|
|
#define PICO 1000000000000ULL
|
|
#define FEMTO 1000000000000000ULL
|
|
|
|
#define HZ_PER_KHZ 1000UL
|
|
#define KHZ_PER_MHZ 1000UL
|
|
#define HZ_PER_MHZ 1000000UL
|
|
|
|
#define MILLIWATT_PER_WATT 1000UL
|
|
#define MICROWATT_PER_MILLIWATT 1000UL
|
|
#define MICROWATT_PER_WATT 1000000UL
|
|
|
|
#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);
|
|
}
|
|
|
|
static inline long kelvin_to_celsius(long t)
|
|
{
|
|
return t + DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
|
|
MILLIDEGREE_PER_DEGREE);
|
|
}
|
|
|
|
static inline long celsius_to_kelvin(long t)
|
|
{
|
|
return t - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
|
|
MILLIDEGREE_PER_DEGREE);
|
|
}
|
|
|
|
#endif /* _LINUX_UNITS_H */
|