diff options
Diffstat (limited to 'drivers/i2c/chips/lm75.h')
-rw-r--r-- | drivers/i2c/chips/lm75.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/drivers/i2c/chips/lm75.h b/drivers/i2c/chips/lm75.h new file mode 100644 index 000000000000..63e3f2fb4c21 --- /dev/null +++ b/drivers/i2c/chips/lm75.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | lm75.h - Part of lm_sensors, Linux kernel modules for hardware | ||
3 | monitoring | ||
4 | Copyright (c) 2003 Mark M. Hoffman <mhoffman@lightlink.com> | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software | ||
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | This file contains common code for encoding/decoding LM75 type | ||
23 | temperature readings, which are emulated by many of the chips | ||
24 | we support. As the user is unlikely to load more than one driver | ||
25 | which contains this code, we don't worry about the wasted space. | ||
26 | */ | ||
27 | |||
28 | #include <linux/i2c-sensor.h> | ||
29 | |||
30 | /* straight from the datasheet */ | ||
31 | #define LM75_TEMP_MIN (-55000) | ||
32 | #define LM75_TEMP_MAX 125000 | ||
33 | |||
34 | /* TEMP: 0.001C/bit (-55C to +125C) | ||
35 | REG: (0.5C/bit, two's complement) << 7 */ | ||
36 | static inline u16 LM75_TEMP_TO_REG(int temp) | ||
37 | { | ||
38 | int ntemp = SENSORS_LIMIT(temp, LM75_TEMP_MIN, LM75_TEMP_MAX); | ||
39 | ntemp += (ntemp<0 ? -250 : 250); | ||
40 | return (u16)((ntemp / 500) << 7); | ||
41 | } | ||
42 | |||
43 | static inline int LM75_TEMP_FROM_REG(u16 reg) | ||
44 | { | ||
45 | /* use integer division instead of equivalent right shift to | ||
46 | guarantee arithmetic shift and preserve the sign */ | ||
47 | return ((s16)reg / 128) * 500; | ||
48 | } | ||
49 | |||