X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fi2c-vid.h;h=974835e3530f44a845a7811ff0294ad2273143bd;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=62424092e44e155ab42a04f5eaaff11157e8b392;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/linux/i2c-vid.h b/include/linux/i2c-vid.h index 62424092e..974835e35 100644 --- a/include/linux/i2c-vid.h +++ b/include/linux/i2c-vid.h @@ -29,7 +29,22 @@ */ /* - Legal val values 00 - 1F. + AMD Opteron processors don't follow the Intel VRM spec. + I'm going to "make up" 2.4 as the VRM spec for the Opterons. + No good reason just a mnemonic for the 24x Opteron processor + series + + Opteron VID encoding is: + + 00000 = 1.550 V + 00001 = 1.525 V + . . . . + 11110 = 0.800 V + 11111 = 0.000 V (off) + */ + +/* + Legal val values 0x00 - 0x1f; except for VRD 10.0, 0x00 - 0x3f. vrm is the Intel VRM document version. Note: vrm version is scaled by 10 and the return value is scaled by 1000 to avoid floating point in the kernel. @@ -41,9 +56,28 @@ int i2c_which_vrm(void); static inline int vid_from_reg(int val, int vrm) { + int vid; + switch(vrm) { + case 0: return 0; + + case 100: /* VRD 10.0 */ + if((val & 0x1f) == 0x1f) + return 0; + if((val & 0x1f) <= 0x09 || val == 0x0a) + vid = 10875 - (val & 0x1f) * 250; + else + vid = 18625 - (val & 0x1f) * 250; + if(val & 0x20) + vid -= 125; + vid /= 10; /* only return 3 dec. places for now */ + return vid; + + case 24: /* Opteron processor */ + return(val == 0x1f ? 0 : 1550 - val * 25); + case 91: /* VRM 9.1 */ case 90: /* VRM 9.0 */ return(val == 0x1f ? 0 :