1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * longhaul.h 4*4882a593Smuzhiyun * (C) 2003 Dave Jones. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * VIA-specific information 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun union msr_bcr2 { 10*4882a593Smuzhiyun struct { 11*4882a593Smuzhiyun unsigned Reseved:19, // 18:0 12*4882a593Smuzhiyun ESOFTBF:1, // 19 13*4882a593Smuzhiyun Reserved2:3, // 22:20 14*4882a593Smuzhiyun CLOCKMUL:4, // 26:23 15*4882a593Smuzhiyun Reserved3:5; // 31:27 16*4882a593Smuzhiyun } bits; 17*4882a593Smuzhiyun unsigned long val; 18*4882a593Smuzhiyun }; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun union msr_longhaul { 21*4882a593Smuzhiyun struct { 22*4882a593Smuzhiyun unsigned RevisionID:4, // 3:0 23*4882a593Smuzhiyun RevisionKey:4, // 7:4 24*4882a593Smuzhiyun EnableSoftBusRatio:1, // 8 25*4882a593Smuzhiyun EnableSoftVID:1, // 9 26*4882a593Smuzhiyun EnableSoftBSEL:1, // 10 27*4882a593Smuzhiyun Reserved:3, // 11:13 28*4882a593Smuzhiyun SoftBusRatio4:1, // 14 29*4882a593Smuzhiyun VRMRev:1, // 15 30*4882a593Smuzhiyun SoftBusRatio:4, // 19:16 31*4882a593Smuzhiyun SoftVID:5, // 24:20 32*4882a593Smuzhiyun Reserved2:3, // 27:25 33*4882a593Smuzhiyun SoftBSEL:2, // 29:28 34*4882a593Smuzhiyun Reserved3:2, // 31:30 35*4882a593Smuzhiyun MaxMHzBR:4, // 35:32 36*4882a593Smuzhiyun MaximumVID:5, // 40:36 37*4882a593Smuzhiyun MaxMHzFSB:2, // 42:41 38*4882a593Smuzhiyun MaxMHzBR4:1, // 43 39*4882a593Smuzhiyun Reserved4:4, // 47:44 40*4882a593Smuzhiyun MinMHzBR:4, // 51:48 41*4882a593Smuzhiyun MinimumVID:5, // 56:52 42*4882a593Smuzhiyun MinMHzFSB:2, // 58:57 43*4882a593Smuzhiyun MinMHzBR4:1, // 59 44*4882a593Smuzhiyun Reserved5:4; // 63:60 45*4882a593Smuzhiyun } bits; 46*4882a593Smuzhiyun unsigned long long val; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* 50*4882a593Smuzhiyun * Clock ratio tables. Div/Mod by 10 to get ratio. 51*4882a593Smuzhiyun * The eblcr values specify the ratio read from the CPU. 52*4882a593Smuzhiyun * The mults values specify what to write to the CPU. 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* 56*4882a593Smuzhiyun * VIA C3 Samuel 1 & Samuel 2 (stepping 0) 57*4882a593Smuzhiyun */ 58*4882a593Smuzhiyun static const int samuel1_mults[16] = { 59*4882a593Smuzhiyun -1, /* 0000 -> RESERVED */ 60*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 61*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 62*4882a593Smuzhiyun -1, /* 0011 -> RESERVED */ 63*4882a593Smuzhiyun -1, /* 0100 -> RESERVED */ 64*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 65*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 66*4882a593Smuzhiyun 55, /* 0111 -> 5.5x */ 67*4882a593Smuzhiyun 60, /* 1000 -> 6.0x */ 68*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 69*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 70*4882a593Smuzhiyun 50, /* 1011 -> 5.0x */ 71*4882a593Smuzhiyun 65, /* 1100 -> 6.5x */ 72*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 73*4882a593Smuzhiyun -1, /* 1110 -> RESERVED */ 74*4882a593Smuzhiyun -1, /* 1111 -> RESERVED */ 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun static const int samuel1_eblcr[16] = { 78*4882a593Smuzhiyun 50, /* 0000 -> RESERVED */ 79*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 80*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 81*4882a593Smuzhiyun -1, /* 0011 -> RESERVED */ 82*4882a593Smuzhiyun 55, /* 0100 -> 5.5x */ 83*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 84*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 85*4882a593Smuzhiyun -1, /* 0111 -> RESERVED */ 86*4882a593Smuzhiyun -1, /* 1000 -> RESERVED */ 87*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 88*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 89*4882a593Smuzhiyun 60, /* 1011 -> 6.0x */ 90*4882a593Smuzhiyun -1, /* 1100 -> RESERVED */ 91*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 92*4882a593Smuzhiyun -1, /* 1110 -> RESERVED */ 93*4882a593Smuzhiyun 65, /* 1111 -> 6.5x */ 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* 97*4882a593Smuzhiyun * VIA C3 Samuel2 Stepping 1->15 98*4882a593Smuzhiyun */ 99*4882a593Smuzhiyun static const int samuel2_eblcr[16] = { 100*4882a593Smuzhiyun 50, /* 0000 -> 5.0x */ 101*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 102*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 103*4882a593Smuzhiyun 100, /* 0011 -> 10.0x */ 104*4882a593Smuzhiyun 55, /* 0100 -> 5.5x */ 105*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 106*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 107*4882a593Smuzhiyun 110, /* 0111 -> 11.0x */ 108*4882a593Smuzhiyun 90, /* 1000 -> 9.0x */ 109*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 110*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 111*4882a593Smuzhiyun 60, /* 1011 -> 6.0x */ 112*4882a593Smuzhiyun 120, /* 1100 -> 12.0x */ 113*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 114*4882a593Smuzhiyun 130, /* 1110 -> 13.0x */ 115*4882a593Smuzhiyun 65, /* 1111 -> 6.5x */ 116*4882a593Smuzhiyun }; 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /* 119*4882a593Smuzhiyun * VIA C3 Ezra 120*4882a593Smuzhiyun */ 121*4882a593Smuzhiyun static const int ezra_mults[16] = { 122*4882a593Smuzhiyun 100, /* 0000 -> 10.0x */ 123*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 124*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 125*4882a593Smuzhiyun 90, /* 0011 -> 9.0x */ 126*4882a593Smuzhiyun 95, /* 0100 -> 9.5x */ 127*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 128*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 129*4882a593Smuzhiyun 55, /* 0111 -> 5.5x */ 130*4882a593Smuzhiyun 60, /* 1000 -> 6.0x */ 131*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 132*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 133*4882a593Smuzhiyun 50, /* 1011 -> 5.0x */ 134*4882a593Smuzhiyun 65, /* 1100 -> 6.5x */ 135*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 136*4882a593Smuzhiyun 85, /* 1110 -> 8.5x */ 137*4882a593Smuzhiyun 120, /* 1111 -> 12.0x */ 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun static const int ezra_eblcr[16] = { 141*4882a593Smuzhiyun 50, /* 0000 -> 5.0x */ 142*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 143*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 144*4882a593Smuzhiyun 100, /* 0011 -> 10.0x */ 145*4882a593Smuzhiyun 55, /* 0100 -> 5.5x */ 146*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 147*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 148*4882a593Smuzhiyun 95, /* 0111 -> 9.5x */ 149*4882a593Smuzhiyun 90, /* 1000 -> 9.0x */ 150*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 151*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 152*4882a593Smuzhiyun 60, /* 1011 -> 6.0x */ 153*4882a593Smuzhiyun 120, /* 1100 -> 12.0x */ 154*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 155*4882a593Smuzhiyun 85, /* 1110 -> 8.5x */ 156*4882a593Smuzhiyun 65, /* 1111 -> 6.5x */ 157*4882a593Smuzhiyun }; 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun /* 160*4882a593Smuzhiyun * VIA C3 (Ezra-T) [C5M]. 161*4882a593Smuzhiyun */ 162*4882a593Smuzhiyun static const int ezrat_mults[32] = { 163*4882a593Smuzhiyun 100, /* 0000 -> 10.0x */ 164*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 165*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 166*4882a593Smuzhiyun 90, /* 0011 -> 9.0x */ 167*4882a593Smuzhiyun 95, /* 0100 -> 9.5x */ 168*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 169*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 170*4882a593Smuzhiyun 55, /* 0111 -> 5.5x */ 171*4882a593Smuzhiyun 60, /* 1000 -> 6.0x */ 172*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 173*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 174*4882a593Smuzhiyun 50, /* 1011 -> 5.0x */ 175*4882a593Smuzhiyun 65, /* 1100 -> 6.5x */ 176*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 177*4882a593Smuzhiyun 85, /* 1110 -> 8.5x */ 178*4882a593Smuzhiyun 120, /* 1111 -> 12.0x */ 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun -1, /* 0000 -> RESERVED (10.0x) */ 181*4882a593Smuzhiyun 110, /* 0001 -> 11.0x */ 182*4882a593Smuzhiyun -1, /* 0010 -> 12.0x */ 183*4882a593Smuzhiyun -1, /* 0011 -> RESERVED (9.0x)*/ 184*4882a593Smuzhiyun 105, /* 0100 -> 10.5x */ 185*4882a593Smuzhiyun 115, /* 0101 -> 11.5x */ 186*4882a593Smuzhiyun 125, /* 0110 -> 12.5x */ 187*4882a593Smuzhiyun 135, /* 0111 -> 13.5x */ 188*4882a593Smuzhiyun 140, /* 1000 -> 14.0x */ 189*4882a593Smuzhiyun 150, /* 1001 -> 15.0x */ 190*4882a593Smuzhiyun 160, /* 1010 -> 16.0x */ 191*4882a593Smuzhiyun 130, /* 1011 -> 13.0x */ 192*4882a593Smuzhiyun 145, /* 1100 -> 14.5x */ 193*4882a593Smuzhiyun 155, /* 1101 -> 15.5x */ 194*4882a593Smuzhiyun -1, /* 1110 -> RESERVED (13.0x) */ 195*4882a593Smuzhiyun -1, /* 1111 -> RESERVED (12.0x) */ 196*4882a593Smuzhiyun }; 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun static const int ezrat_eblcr[32] = { 199*4882a593Smuzhiyun 50, /* 0000 -> 5.0x */ 200*4882a593Smuzhiyun 30, /* 0001 -> 3.0x */ 201*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 202*4882a593Smuzhiyun 100, /* 0011 -> 10.0x */ 203*4882a593Smuzhiyun 55, /* 0100 -> 5.5x */ 204*4882a593Smuzhiyun 35, /* 0101 -> 3.5x */ 205*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 206*4882a593Smuzhiyun 95, /* 0111 -> 9.5x */ 207*4882a593Smuzhiyun 90, /* 1000 -> 9.0x */ 208*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 209*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 210*4882a593Smuzhiyun 60, /* 1011 -> 6.0x */ 211*4882a593Smuzhiyun 120, /* 1100 -> 12.0x */ 212*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 213*4882a593Smuzhiyun 85, /* 1110 -> 8.5x */ 214*4882a593Smuzhiyun 65, /* 1111 -> 6.5x */ 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun -1, /* 0000 -> RESERVED (9.0x) */ 217*4882a593Smuzhiyun 110, /* 0001 -> 11.0x */ 218*4882a593Smuzhiyun 120, /* 0010 -> 12.0x */ 219*4882a593Smuzhiyun -1, /* 0011 -> RESERVED (10.0x)*/ 220*4882a593Smuzhiyun 135, /* 0100 -> 13.5x */ 221*4882a593Smuzhiyun 115, /* 0101 -> 11.5x */ 222*4882a593Smuzhiyun 125, /* 0110 -> 12.5x */ 223*4882a593Smuzhiyun 105, /* 0111 -> 10.5x */ 224*4882a593Smuzhiyun 130, /* 1000 -> 13.0x */ 225*4882a593Smuzhiyun 150, /* 1001 -> 15.0x */ 226*4882a593Smuzhiyun 160, /* 1010 -> 16.0x */ 227*4882a593Smuzhiyun 140, /* 1011 -> 14.0x */ 228*4882a593Smuzhiyun -1, /* 1100 -> RESERVED (12.0x) */ 229*4882a593Smuzhiyun 155, /* 1101 -> 15.5x */ 230*4882a593Smuzhiyun -1, /* 1110 -> RESERVED (13.0x) */ 231*4882a593Smuzhiyun 145, /* 1111 -> 14.5x */ 232*4882a593Smuzhiyun }; 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun /* 235*4882a593Smuzhiyun * VIA C3 Nehemiah */ 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun static const int nehemiah_mults[32] = { 238*4882a593Smuzhiyun 100, /* 0000 -> 10.0x */ 239*4882a593Smuzhiyun -1, /* 0001 -> 16.0x */ 240*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 241*4882a593Smuzhiyun 90, /* 0011 -> 9.0x */ 242*4882a593Smuzhiyun 95, /* 0100 -> 9.5x */ 243*4882a593Smuzhiyun -1, /* 0101 -> RESERVED */ 244*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 245*4882a593Smuzhiyun 55, /* 0111 -> 5.5x */ 246*4882a593Smuzhiyun 60, /* 1000 -> 6.0x */ 247*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 248*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 249*4882a593Smuzhiyun 50, /* 1011 -> 5.0x */ 250*4882a593Smuzhiyun 65, /* 1100 -> 6.5x */ 251*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 252*4882a593Smuzhiyun 85, /* 1110 -> 8.5x */ 253*4882a593Smuzhiyun 120, /* 1111 -> 12.0x */ 254*4882a593Smuzhiyun -1, /* 0000 -> 10.0x */ 255*4882a593Smuzhiyun 110, /* 0001 -> 11.0x */ 256*4882a593Smuzhiyun -1, /* 0010 -> 12.0x */ 257*4882a593Smuzhiyun -1, /* 0011 -> 9.0x */ 258*4882a593Smuzhiyun 105, /* 0100 -> 10.5x */ 259*4882a593Smuzhiyun 115, /* 0101 -> 11.5x */ 260*4882a593Smuzhiyun 125, /* 0110 -> 12.5x */ 261*4882a593Smuzhiyun 135, /* 0111 -> 13.5x */ 262*4882a593Smuzhiyun 140, /* 1000 -> 14.0x */ 263*4882a593Smuzhiyun 150, /* 1001 -> 15.0x */ 264*4882a593Smuzhiyun 160, /* 1010 -> 16.0x */ 265*4882a593Smuzhiyun 130, /* 1011 -> 13.0x */ 266*4882a593Smuzhiyun 145, /* 1100 -> 14.5x */ 267*4882a593Smuzhiyun 155, /* 1101 -> 15.5x */ 268*4882a593Smuzhiyun -1, /* 1110 -> RESERVED (13.0x) */ 269*4882a593Smuzhiyun -1, /* 1111 -> 12.0x */ 270*4882a593Smuzhiyun }; 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun static const int nehemiah_eblcr[32] = { 273*4882a593Smuzhiyun 50, /* 0000 -> 5.0x */ 274*4882a593Smuzhiyun 160, /* 0001 -> 16.0x */ 275*4882a593Smuzhiyun 40, /* 0010 -> 4.0x */ 276*4882a593Smuzhiyun 100, /* 0011 -> 10.0x */ 277*4882a593Smuzhiyun 55, /* 0100 -> 5.5x */ 278*4882a593Smuzhiyun -1, /* 0101 -> RESERVED */ 279*4882a593Smuzhiyun 45, /* 0110 -> 4.5x */ 280*4882a593Smuzhiyun 95, /* 0111 -> 9.5x */ 281*4882a593Smuzhiyun 90, /* 1000 -> 9.0x */ 282*4882a593Smuzhiyun 70, /* 1001 -> 7.0x */ 283*4882a593Smuzhiyun 80, /* 1010 -> 8.0x */ 284*4882a593Smuzhiyun 60, /* 1011 -> 6.0x */ 285*4882a593Smuzhiyun 120, /* 1100 -> 12.0x */ 286*4882a593Smuzhiyun 75, /* 1101 -> 7.5x */ 287*4882a593Smuzhiyun 85, /* 1110 -> 8.5x */ 288*4882a593Smuzhiyun 65, /* 1111 -> 6.5x */ 289*4882a593Smuzhiyun 90, /* 0000 -> 9.0x */ 290*4882a593Smuzhiyun 110, /* 0001 -> 11.0x */ 291*4882a593Smuzhiyun 120, /* 0010 -> 12.0x */ 292*4882a593Smuzhiyun 100, /* 0011 -> 10.0x */ 293*4882a593Smuzhiyun 135, /* 0100 -> 13.5x */ 294*4882a593Smuzhiyun 115, /* 0101 -> 11.5x */ 295*4882a593Smuzhiyun 125, /* 0110 -> 12.5x */ 296*4882a593Smuzhiyun 105, /* 0111 -> 10.5x */ 297*4882a593Smuzhiyun 130, /* 1000 -> 13.0x */ 298*4882a593Smuzhiyun 150, /* 1001 -> 15.0x */ 299*4882a593Smuzhiyun 160, /* 1010 -> 16.0x */ 300*4882a593Smuzhiyun 140, /* 1011 -> 14.0x */ 301*4882a593Smuzhiyun 120, /* 1100 -> 12.0x */ 302*4882a593Smuzhiyun 155, /* 1101 -> 15.5x */ 303*4882a593Smuzhiyun -1, /* 1110 -> RESERVED (13.0x) */ 304*4882a593Smuzhiyun 145 /* 1111 -> 14.5x */ 305*4882a593Smuzhiyun }; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /* 308*4882a593Smuzhiyun * Voltage scales. Div/Mod by 1000 to get actual voltage. 309*4882a593Smuzhiyun * Which scale to use depends on the VRM type in use. 310*4882a593Smuzhiyun */ 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun struct mV_pos { 313*4882a593Smuzhiyun unsigned short mV; 314*4882a593Smuzhiyun unsigned short pos; 315*4882a593Smuzhiyun }; 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun static const struct mV_pos vrm85_mV[32] = { 318*4882a593Smuzhiyun {1250, 8}, {1200, 6}, {1150, 4}, {1100, 2}, 319*4882a593Smuzhiyun {1050, 0}, {1800, 30}, {1750, 28}, {1700, 26}, 320*4882a593Smuzhiyun {1650, 24}, {1600, 22}, {1550, 20}, {1500, 18}, 321*4882a593Smuzhiyun {1450, 16}, {1400, 14}, {1350, 12}, {1300, 10}, 322*4882a593Smuzhiyun {1275, 9}, {1225, 7}, {1175, 5}, {1125, 3}, 323*4882a593Smuzhiyun {1075, 1}, {1825, 31}, {1775, 29}, {1725, 27}, 324*4882a593Smuzhiyun {1675, 25}, {1625, 23}, {1575, 21}, {1525, 19}, 325*4882a593Smuzhiyun {1475, 17}, {1425, 15}, {1375, 13}, {1325, 11} 326*4882a593Smuzhiyun }; 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun static const unsigned char mV_vrm85[32] = { 329*4882a593Smuzhiyun 0x04, 0x14, 0x03, 0x13, 0x02, 0x12, 0x01, 0x11, 330*4882a593Smuzhiyun 0x00, 0x10, 0x0f, 0x1f, 0x0e, 0x1e, 0x0d, 0x1d, 331*4882a593Smuzhiyun 0x0c, 0x1c, 0x0b, 0x1b, 0x0a, 0x1a, 0x09, 0x19, 332*4882a593Smuzhiyun 0x08, 0x18, 0x07, 0x17, 0x06, 0x16, 0x05, 0x15 333*4882a593Smuzhiyun }; 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun static const struct mV_pos mobilevrm_mV[32] = { 336*4882a593Smuzhiyun {1750, 31}, {1700, 30}, {1650, 29}, {1600, 28}, 337*4882a593Smuzhiyun {1550, 27}, {1500, 26}, {1450, 25}, {1400, 24}, 338*4882a593Smuzhiyun {1350, 23}, {1300, 22}, {1250, 21}, {1200, 20}, 339*4882a593Smuzhiyun {1150, 19}, {1100, 18}, {1050, 17}, {1000, 16}, 340*4882a593Smuzhiyun {975, 15}, {950, 14}, {925, 13}, {900, 12}, 341*4882a593Smuzhiyun {875, 11}, {850, 10}, {825, 9}, {800, 8}, 342*4882a593Smuzhiyun {775, 7}, {750, 6}, {725, 5}, {700, 4}, 343*4882a593Smuzhiyun {675, 3}, {650, 2}, {625, 1}, {600, 0} 344*4882a593Smuzhiyun }; 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun static const unsigned char mV_mobilevrm[32] = { 347*4882a593Smuzhiyun 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 348*4882a593Smuzhiyun 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 349*4882a593Smuzhiyun 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 350*4882a593Smuzhiyun 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 351*4882a593Smuzhiyun }; 352*4882a593Smuzhiyun 353