diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/hwmon-vid.h | 83 |
1 files changed, 9 insertions, 74 deletions
diff --git a/include/linux/hwmon-vid.h b/include/linux/hwmon-vid.h index 6d9d4f9bad58..cd4b7a042b86 100644 --- a/include/linux/hwmon-vid.h +++ b/include/linux/hwmon-vid.h | |||
@@ -20,83 +20,16 @@ | |||
20 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 20 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
21 | */ | 21 | */ |
22 | 22 | ||
23 | /* | 23 | #ifndef _LINUX_HWMON_VID_H |
24 | This file contains common code for decoding VID pins. | 24 | #define _LINUX_HWMON_VID_H |
25 | This file is #included in various chip drivers in this directory. | ||
26 | As the user is unlikely to load more than one driver which | ||
27 | includes this code we don't worry about the wasted space. | ||
28 | Reference: VRM x.y DC-DC Converter Design Guidelines, | ||
29 | available at http://developer.intel.com | ||
30 | */ | ||
31 | |||
32 | /* | ||
33 | AMD Opteron processors don't follow the Intel VRM spec. | ||
34 | I'm going to "make up" 2.4 as the VRM spec for the Opterons. | ||
35 | No good reason just a mnemonic for the 24x Opteron processor | ||
36 | series | ||
37 | |||
38 | Opteron VID encoding is: | ||
39 | |||
40 | 00000 = 1.550 V | ||
41 | 00001 = 1.525 V | ||
42 | . . . . | ||
43 | 11110 = 0.800 V | ||
44 | 11111 = 0.000 V (off) | ||
45 | */ | ||
46 | |||
47 | /* | ||
48 | Legal val values 0x00 - 0x1f; except for VRD 10.0, 0x00 - 0x3f. | ||
49 | vrm is the Intel VRM document version. | ||
50 | Note: vrm version is scaled by 10 and the return value is scaled by 1000 | ||
51 | to avoid floating point in the kernel. | ||
52 | */ | ||
53 | 25 | ||
26 | int vid_from_reg(int val, int vrm); | ||
54 | int vid_which_vrm(void); | 27 | int vid_which_vrm(void); |
55 | 28 | ||
56 | static inline int vid_from_reg(int val, int vrm) | 29 | /* vrm is the VRM/VRD document version multiplied by 10. |
57 | { | 30 | val is in mV to avoid floating point in the kernel. |
58 | int vid; | 31 | Returned value is the 4-, 5- or 6-bit VID code. |
59 | 32 | Note that only VRM 9.x is supported for now. */ | |
60 | switch(vrm) { | ||
61 | |||
62 | case 0: | ||
63 | return 0; | ||
64 | |||
65 | case 100: /* VRD 10.0 */ | ||
66 | if((val & 0x1f) == 0x1f) | ||
67 | return 0; | ||
68 | if((val & 0x1f) <= 0x09 || val == 0x0a) | ||
69 | vid = 10875 - (val & 0x1f) * 250; | ||
70 | else | ||
71 | vid = 18625 - (val & 0x1f) * 250; | ||
72 | if(val & 0x20) | ||
73 | vid -= 125; | ||
74 | vid /= 10; /* only return 3 dec. places for now */ | ||
75 | return vid; | ||
76 | |||
77 | case 24: /* Opteron processor */ | ||
78 | return(val == 0x1f ? 0 : 1550 - val * 25); | ||
79 | |||
80 | case 91: /* VRM 9.1 */ | ||
81 | case 90: /* VRM 9.0 */ | ||
82 | return(val == 0x1f ? 0 : | ||
83 | 1850 - val * 25); | ||
84 | |||
85 | case 85: /* VRM 8.5 */ | ||
86 | return((val & 0x10 ? 25 : 0) + | ||
87 | ((val & 0x0f) > 0x04 ? 2050 : 1250) - | ||
88 | ((val & 0x0f) * 50)); | ||
89 | |||
90 | case 84: /* VRM 8.4 */ | ||
91 | val &= 0x0f; | ||
92 | /* fall through */ | ||
93 | default: /* VRM 8.2 */ | ||
94 | return(val == 0x1f ? 0 : | ||
95 | val & 0x10 ? 5100 - (val) * 100 : | ||
96 | 2050 - (val) * 50); | ||
97 | } | ||
98 | } | ||
99 | |||
100 | static inline int vid_to_reg(int val, int vrm) | 33 | static inline int vid_to_reg(int val, int vrm) |
101 | { | 34 | { |
102 | switch (vrm) { | 35 | switch (vrm) { |
@@ -108,3 +41,5 @@ static inline int vid_to_reg(int val, int vrm) | |||
108 | return -1; | 41 | return -1; |
109 | } | 42 | } |
110 | } | 43 | } |
44 | |||
45 | #endif /* _LINUX_HWMON_VID_H */ | ||