Linux Audio

Check our new training course

Loading...
v5.14.15
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _LINUX_UNITS_H
 3#define _LINUX_UNITS_H
 4
 
 5#include <linux/math.h>
 6
 7#define MILLIWATT_PER_WATT	1000L
 8#define MICROWATT_PER_MILLIWATT	1000L
 9#define MICROWATT_PER_WATT	1000000L
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
11#define ABSOLUTE_ZERO_MILLICELSIUS -273150
12
13static inline long milli_kelvin_to_millicelsius(long t)
14{
15	return t + ABSOLUTE_ZERO_MILLICELSIUS;
16}
17
18static inline long millicelsius_to_milli_kelvin(long t)
19{
20	return t - ABSOLUTE_ZERO_MILLICELSIUS;
21}
22
23#define MILLIDEGREE_PER_DEGREE 1000
24#define MILLIDEGREE_PER_DECIDEGREE 100
25
26static inline long kelvin_to_millicelsius(long t)
27{
28	return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DEGREE);
29}
30
31static inline long millicelsius_to_kelvin(long t)
32{
33	t = millicelsius_to_milli_kelvin(t);
34
35	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
36}
37
38static inline long deci_kelvin_to_celsius(long t)
39{
40	t = milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
41
42	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
43}
44
45static inline long celsius_to_deci_kelvin(long t)
46{
47	t = millicelsius_to_milli_kelvin(t * MILLIDEGREE_PER_DEGREE);
48
49	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
50}
51
52/**
53 * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
54 * @t: temperature value in decidegrees Kelvin
55 * @offset: difference between Kelvin and Celsius in millidegrees
56 *
57 * Return: temperature value in millidegrees Celsius
58 */
59static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
60{
61	return t * MILLIDEGREE_PER_DECIDEGREE - offset;
62}
63
64static inline long deci_kelvin_to_millicelsius(long t)
65{
66	return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
67}
68
69static inline long millicelsius_to_deci_kelvin(long t)
70{
71	t = millicelsius_to_milli_kelvin(t);
72
73	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
74}
75
76static inline long kelvin_to_celsius(long t)
77{
78	return t + DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
79				     MILLIDEGREE_PER_DEGREE);
80}
81
82static inline long celsius_to_kelvin(long t)
83{
84	return t - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
85				     MILLIDEGREE_PER_DEGREE);
86}
87
88#endif /* _LINUX_UNITS_H */
v6.9.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _LINUX_UNITS_H
  3#define _LINUX_UNITS_H
  4
  5#include <linux/bits.h>
  6#include <linux/math.h>
  7
  8/* Metric prefixes in accordance with Système international (d'unités) */
  9#define PETA	1000000000000000ULL
 10#define TERA	1000000000000ULL
 11#define GIGA	1000000000UL
 12#define MEGA	1000000UL
 13#define KILO	1000UL
 14#define HECTO	100UL
 15#define DECA	10UL
 16#define DECI	10UL
 17#define CENTI	100UL
 18#define MILLI	1000UL
 19#define MICRO	1000000UL
 20#define NANO	1000000000UL
 21#define PICO	1000000000000ULL
 22#define FEMTO	1000000000000000ULL
 23
 24#define NANOHZ_PER_HZ		1000000000UL
 25#define MICROHZ_PER_HZ		1000000UL
 26#define MILLIHZ_PER_HZ		1000UL
 27
 28#define HZ_PER_KHZ		1000UL
 29#define HZ_PER_MHZ		1000000UL
 30
 31#define KHZ_PER_MHZ		1000UL
 32#define KHZ_PER_GHZ		1000000UL
 33
 34#define MILLIWATT_PER_WATT	1000UL
 35#define MICROWATT_PER_MILLIWATT	1000UL
 36#define MICROWATT_PER_WATT	1000000UL
 37
 38#define BYTES_PER_KBIT		(KILO / BITS_PER_BYTE)
 39#define BYTES_PER_MBIT		(MEGA / BITS_PER_BYTE)
 40#define BYTES_PER_GBIT		(GIGA / BITS_PER_BYTE)
 41
 42#define ABSOLUTE_ZERO_MILLICELSIUS -273150
 43
 44static inline long milli_kelvin_to_millicelsius(long t)
 45{
 46	return t + ABSOLUTE_ZERO_MILLICELSIUS;
 47}
 48
 49static inline long millicelsius_to_milli_kelvin(long t)
 50{
 51	return t - ABSOLUTE_ZERO_MILLICELSIUS;
 52}
 53
 54#define MILLIDEGREE_PER_DEGREE 1000
 55#define MILLIDEGREE_PER_DECIDEGREE 100
 56
 57static inline long kelvin_to_millicelsius(long t)
 58{
 59	return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DEGREE);
 60}
 61
 62static inline long millicelsius_to_kelvin(long t)
 63{
 64	t = millicelsius_to_milli_kelvin(t);
 65
 66	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
 67}
 68
 69static inline long deci_kelvin_to_celsius(long t)
 70{
 71	t = milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
 72
 73	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DEGREE);
 74}
 75
 76static inline long celsius_to_deci_kelvin(long t)
 77{
 78	t = millicelsius_to_milli_kelvin(t * MILLIDEGREE_PER_DEGREE);
 79
 80	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
 81}
 82
 83/**
 84 * deci_kelvin_to_millicelsius_with_offset - convert Kelvin to Celsius
 85 * @t: temperature value in decidegrees Kelvin
 86 * @offset: difference between Kelvin and Celsius in millidegrees
 87 *
 88 * Return: temperature value in millidegrees Celsius
 89 */
 90static inline long deci_kelvin_to_millicelsius_with_offset(long t, long offset)
 91{
 92	return t * MILLIDEGREE_PER_DECIDEGREE - offset;
 93}
 94
 95static inline long deci_kelvin_to_millicelsius(long t)
 96{
 97	return milli_kelvin_to_millicelsius(t * MILLIDEGREE_PER_DECIDEGREE);
 98}
 99
100static inline long millicelsius_to_deci_kelvin(long t)
101{
102	t = millicelsius_to_milli_kelvin(t);
103
104	return DIV_ROUND_CLOSEST(t, MILLIDEGREE_PER_DECIDEGREE);
105}
106
107static inline long kelvin_to_celsius(long t)
108{
109	return t + DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
110				     MILLIDEGREE_PER_DEGREE);
111}
112
113static inline long celsius_to_kelvin(long t)
114{
115	return t - DIV_ROUND_CLOSEST(ABSOLUTE_ZERO_MILLICELSIUS,
116				     MILLIDEGREE_PER_DEGREE);
117}
118
119#endif /* _LINUX_UNITS_H */