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