Commit | Line | Data |
---|---|---|
74ba9207 | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
1da177e4 LT |
2 | /* |
3 | lm75.h - Part of lm_sensors, Linux kernel modules for hardware | |
a01a6847 | 4 | monitoring |
1da177e4 LT |
5 | Copyright (c) 2003 Mark M. Hoffman <mhoffman@lightlink.com> |
6 | ||
1da177e4 LT |
7 | */ |
8 | ||
9 | /* | |
10 | This file contains common code for encoding/decoding LM75 type | |
11 | temperature readings, which are emulated by many of the chips | |
12 | we support. As the user is unlikely to load more than one driver | |
13 | which contains this code, we don't worry about the wasted space. | |
14 | */ | |
15 | ||
5a4c0601 | 16 | #include <linux/kernel.h> |
1da177e4 LT |
17 | |
18 | /* straight from the datasheet */ | |
19 | #define LM75_TEMP_MIN (-55000) | |
20 | #define LM75_TEMP_MAX 125000 | |
9914518e | 21 | #define LM75_SHUTDOWN 0x01 |
1da177e4 LT |
22 | |
23 | /* TEMP: 0.001C/bit (-55C to +125C) | |
24 | REG: (0.5C/bit, two's complement) << 7 */ | |
5bfedac0 | 25 | static inline u16 LM75_TEMP_TO_REG(long temp) |
1da177e4 | 26 | { |
2a844c14 | 27 | int ntemp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX); |
a01a6847 | 28 | ntemp += (ntemp < 0 ? -250 : 250); |
1da177e4 LT |
29 | return (u16)((ntemp / 500) << 7); |
30 | } | |
31 | ||
32 | static inline int LM75_TEMP_FROM_REG(u16 reg) | |
33 | { | |
34 | /* use integer division instead of equivalent right shift to | |
35 | guarantee arithmetic shift and preserve the sign */ | |
36 | return ((s16)reg / 128) * 500; | |
37 | } |