1 /* 2 * vt1211.c - driver for the VIA VT1211 Super-I/O chip integrated hardware 3 * monitoring features 4 * Copyright (C) 2006 Juerg Haefliger <juergh@gmail.com> 5 * 6 * This driver is based on the driver for kernel 2.4 by Mark D. Studebaker 7 * and its port to kernel 2.6 by Lars Ekman. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 */ 23 24 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 25 26 #include <linux/module.h> 27 #include <linux/init.h> 28 #include <linux/slab.h> 29 #include <linux/jiffies.h> 30 #include <linux/platform_device.h> 31 #include <linux/hwmon.h> 32 #include <linux/hwmon-sysfs.h> 33 #include <linux/hwmon-vid.h> 34 #include <linux/err.h> 35 #include <linux/mutex.h> 36 #include <linux/ioport.h> 37 #include <linux/acpi.h> 38 #include <linux/io.h> 39 40 static int uch_config = -1; 41 module_param(uch_config, int, 0); 42 MODULE_PARM_DESC(uch_config, "Initialize the universal channel configuration"); 43 44 static int int_mode = -1; 45 module_param(int_mode, int, 0); 46 MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode"); 47 48 static unsigned short force_id; 49 module_param(force_id, ushort, 0); 50 MODULE_PARM_DESC(force_id, "Override the detected device ID"); 51 52 static struct platform_device *pdev; 53 54 #define DRVNAME "vt1211" 55 56 /* --------------------------------------------------------------------- 57 * Registers 58 * 59 * The sensors are defined as follows. 60 * 61 * Sensor Voltage Mode Temp Mode Notes (from the datasheet) 62 * -------- ------------ --------- -------------------------- 63 * Reading 1 temp1 Intel thermal diode 64 * Reading 3 temp2 Internal thermal diode 65 * UCH1/Reading2 in0 temp3 NTC type thermistor 66 * UCH2 in1 temp4 +2.5V 67 * UCH3 in2 temp5 VccP 68 * UCH4 in3 temp6 +5V 69 * UCH5 in4 temp7 +12V 70 * 3.3V in5 Internal VDD (+3.3V) 71 * 72 * --------------------------------------------------------------------- */ 73 74 /* Voltages (in) numbered 0-5 (ix) */ 75 #define VT1211_REG_IN(ix) (0x21 + (ix)) 76 #define VT1211_REG_IN_MIN(ix) ((ix) == 0 ? 0x3e : 0x2a + 2 * (ix)) 77 #define VT1211_REG_IN_MAX(ix) ((ix) == 0 ? 0x3d : 0x29 + 2 * (ix)) 78 79 /* Temperatures (temp) numbered 0-6 (ix) */ 80 static u8 regtemp[] = {0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25}; 81 static u8 regtempmax[] = {0x39, 0x1d, 0x3d, 0x2b, 0x2d, 0x2f, 0x31}; 82 static u8 regtemphyst[] = {0x3a, 0x1e, 0x3e, 0x2c, 0x2e, 0x30, 0x32}; 83 84 /* Fans numbered 0-1 (ix) */ 85 #define VT1211_REG_FAN(ix) (0x29 + (ix)) 86 #define VT1211_REG_FAN_MIN(ix) (0x3b + (ix)) 87 #define VT1211_REG_FAN_DIV 0x47 88 89 /* PWMs numbered 0-1 (ix) */ 90 /* Auto points numbered 0-3 (ap) */ 91 #define VT1211_REG_PWM(ix) (0x60 + (ix)) 92 #define VT1211_REG_PWM_CLK 0x50 93 #define VT1211_REG_PWM_CTL 0x51 94 #define VT1211_REG_PWM_AUTO_TEMP(ap) (0x55 - (ap)) 95 #define VT1211_REG_PWM_AUTO_PWM(ix, ap) (0x58 + 2 * (ix) - (ap)) 96 97 /* Miscellaneous registers */ 98 #define VT1211_REG_CONFIG 0x40 99 #define VT1211_REG_ALARM1 0x41 100 #define VT1211_REG_ALARM2 0x42 101 #define VT1211_REG_VID 0x45 102 #define VT1211_REG_UCH_CONFIG 0x4a 103 #define VT1211_REG_TEMP1_CONFIG 0x4b 104 #define VT1211_REG_TEMP2_CONFIG 0x4c 105 106 /* In, temp & fan alarm bits */ 107 static const u8 bitalarmin[] = {11, 0, 1, 3, 8, 2, 9}; 108 static const u8 bitalarmtemp[] = {4, 15, 11, 0, 1, 3, 8}; 109 static const u8 bitalarmfan[] = {6, 7}; 110 111 /* --------------------------------------------------------------------- 112 * Data structures and manipulation thereof 113 * --------------------------------------------------------------------- */ 114 115 struct vt1211_data { 116 unsigned short addr; 117 const char *name; 118 struct device *hwmon_dev; 119 120 struct mutex update_lock; 121 char valid; /* !=0 if following fields are valid */ 122 unsigned long last_updated; /* In jiffies */ 123 124 /* Register values */ 125 u8 in[6]; 126 u8 in_max[6]; 127 u8 in_min[6]; 128 u8 temp[7]; 129 u8 temp_max[7]; 130 u8 temp_hyst[7]; 131 u8 fan[2]; 132 u8 fan_min[2]; 133 u8 fan_div[2]; 134 u8 fan_ctl; 135 u8 pwm[2]; 136 u8 pwm_ctl[2]; 137 u8 pwm_clk; 138 u8 pwm_auto_temp[4]; 139 u8 pwm_auto_pwm[2][4]; 140 u8 vid; /* Read once at init time */ 141 u8 vrm; 142 u8 uch_config; /* Read once at init time */ 143 u16 alarms; 144 }; 145 146 /* ix = [0-5] */ 147 #define ISVOLT(ix, uch_config) ((ix) > 4 ? 1 : \ 148 !(((uch_config) >> ((ix) + 2)) & 1)) 149 150 /* ix = [0-6] */ 151 #define ISTEMP(ix, uch_config) ((ix) < 2 ? 1 : \ 152 ((uch_config) >> (ix)) & 1) 153 154 /* 155 * in5 (ix = 5) is special. It's the internal 3.3V so it's scaled in the 156 * driver according to the VT1211 BIOS porting guide 157 */ 158 #define IN_FROM_REG(ix, reg) ((reg) < 3 ? 0 : (ix) == 5 ? \ 159 (((reg) - 3) * 15882 + 479) / 958 : \ 160 (((reg) - 3) * 10000 + 479) / 958) 161 #define IN_TO_REG(ix, val) (clamp_val((ix) == 5 ? \ 162 ((val) * 958 + 7941) / 15882 + 3 : \ 163 ((val) * 958 + 5000) / 10000 + 3, 0, 255)) 164 165 /* 166 * temp1 (ix = 0) is an intel thermal diode which is scaled in user space. 167 * temp2 (ix = 1) is the internal temp diode so it's scaled in the driver 168 * according to some measurements that I took on an EPIA M10000. 169 * temp3-7 are thermistor based so the driver returns the voltage measured at 170 * the pin (range 0V - 2.2V). 171 */ 172 #define TEMP_FROM_REG(ix, reg) ((ix) == 0 ? (reg) * 1000 : \ 173 (ix) == 1 ? (reg) < 51 ? 0 : \ 174 ((reg) - 51) * 1000 : \ 175 ((253 - (reg)) * 2200 + 105) / 210) 176 #define TEMP_TO_REG(ix, val) clamp_val( \ 177 ((ix) == 0 ? ((val) + 500) / 1000 : \ 178 (ix) == 1 ? ((val) + 500) / 1000 + 51 : \ 179 253 - ((val) * 210 + 1100) / 2200), 0, 255) 180 181 #define DIV_FROM_REG(reg) (1 << (reg)) 182 183 #define RPM_FROM_REG(reg, div) (((reg) == 0) || ((reg) == 255) ? 0 : \ 184 1310720 / (reg) / DIV_FROM_REG(div)) 185 #define RPM_TO_REG(val, div) ((val) == 0 ? 255 : \ 186 clamp_val((1310720 / (val) / \ 187 DIV_FROM_REG(div)), 1, 254)) 188 189 /* --------------------------------------------------------------------- 190 * Super-I/O constants and functions 191 * --------------------------------------------------------------------- */ 192 193 /* 194 * Configuration index port registers 195 * The vt1211 can live at 2 different addresses so we need to probe both 196 */ 197 #define SIO_REG_CIP1 0x2e 198 #define SIO_REG_CIP2 0x4e 199 200 /* Configuration registers */ 201 #define SIO_VT1211_LDN 0x07 /* logical device number */ 202 #define SIO_VT1211_DEVID 0x20 /* device ID */ 203 #define SIO_VT1211_DEVREV 0x21 /* device revision */ 204 #define SIO_VT1211_ACTIVE 0x30 /* HW monitor active */ 205 #define SIO_VT1211_BADDR 0x60 /* base I/O address */ 206 #define SIO_VT1211_ID 0x3c /* VT1211 device ID */ 207 208 /* VT1211 logical device numbers */ 209 #define SIO_VT1211_LDN_HWMON 0x0b /* HW monitor */ 210 211 static inline void superio_outb(int sio_cip, int reg, int val) 212 { 213 outb(reg, sio_cip); 214 outb(val, sio_cip + 1); 215 } 216 217 static inline int superio_inb(int sio_cip, int reg) 218 { 219 outb(reg, sio_cip); 220 return inb(sio_cip + 1); 221 } 222 223 static inline void superio_select(int sio_cip, int ldn) 224 { 225 outb(SIO_VT1211_LDN, sio_cip); 226 outb(ldn, sio_cip + 1); 227 } 228 229 static inline void superio_enter(int sio_cip) 230 { 231 outb(0x87, sio_cip); 232 outb(0x87, sio_cip); 233 } 234 235 static inline void superio_exit(int sio_cip) 236 { 237 outb(0xaa, sio_cip); 238 } 239 240 /* --------------------------------------------------------------------- 241 * Device I/O access 242 * --------------------------------------------------------------------- */ 243 244 static inline u8 vt1211_read8(struct vt1211_data *data, u8 reg) 245 { 246 return inb(data->addr + reg); 247 } 248 249 static inline void vt1211_write8(struct vt1211_data *data, u8 reg, u8 val) 250 { 251 outb(val, data->addr + reg); 252 } 253 254 static struct vt1211_data *vt1211_update_device(struct device *dev) 255 { 256 struct vt1211_data *data = dev_get_drvdata(dev); 257 int ix, val; 258 259 mutex_lock(&data->update_lock); 260 261 /* registers cache is refreshed after 1 second */ 262 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { 263 /* read VID */ 264 data->vid = vt1211_read8(data, VT1211_REG_VID) & 0x1f; 265 266 /* voltage (in) registers */ 267 for (ix = 0; ix < ARRAY_SIZE(data->in); ix++) { 268 if (ISVOLT(ix, data->uch_config)) { 269 data->in[ix] = vt1211_read8(data, 270 VT1211_REG_IN(ix)); 271 data->in_min[ix] = vt1211_read8(data, 272 VT1211_REG_IN_MIN(ix)); 273 data->in_max[ix] = vt1211_read8(data, 274 VT1211_REG_IN_MAX(ix)); 275 } 276 } 277 278 /* temp registers */ 279 for (ix = 0; ix < ARRAY_SIZE(data->temp); ix++) { 280 if (ISTEMP(ix, data->uch_config)) { 281 data->temp[ix] = vt1211_read8(data, 282 regtemp[ix]); 283 data->temp_max[ix] = vt1211_read8(data, 284 regtempmax[ix]); 285 data->temp_hyst[ix] = vt1211_read8(data, 286 regtemphyst[ix]); 287 } 288 } 289 290 /* fan & pwm registers */ 291 for (ix = 0; ix < ARRAY_SIZE(data->fan); ix++) { 292 data->fan[ix] = vt1211_read8(data, 293 VT1211_REG_FAN(ix)); 294 data->fan_min[ix] = vt1211_read8(data, 295 VT1211_REG_FAN_MIN(ix)); 296 data->pwm[ix] = vt1211_read8(data, 297 VT1211_REG_PWM(ix)); 298 } 299 val = vt1211_read8(data, VT1211_REG_FAN_DIV); 300 data->fan_div[0] = (val >> 4) & 3; 301 data->fan_div[1] = (val >> 6) & 3; 302 data->fan_ctl = val & 0xf; 303 304 val = vt1211_read8(data, VT1211_REG_PWM_CTL); 305 data->pwm_ctl[0] = val & 0xf; 306 data->pwm_ctl[1] = (val >> 4) & 0xf; 307 308 data->pwm_clk = vt1211_read8(data, VT1211_REG_PWM_CLK); 309 310 /* pwm & temp auto point registers */ 311 data->pwm_auto_pwm[0][1] = vt1211_read8(data, 312 VT1211_REG_PWM_AUTO_PWM(0, 1)); 313 data->pwm_auto_pwm[0][2] = vt1211_read8(data, 314 VT1211_REG_PWM_AUTO_PWM(0, 2)); 315 data->pwm_auto_pwm[1][1] = vt1211_read8(data, 316 VT1211_REG_PWM_AUTO_PWM(1, 1)); 317 data->pwm_auto_pwm[1][2] = vt1211_read8(data, 318 VT1211_REG_PWM_AUTO_PWM(1, 2)); 319 for (ix = 0; ix < ARRAY_SIZE(data->pwm_auto_temp); ix++) { 320 data->pwm_auto_temp[ix] = vt1211_read8(data, 321 VT1211_REG_PWM_AUTO_TEMP(ix)); 322 } 323 324 /* alarm registers */ 325 data->alarms = (vt1211_read8(data, VT1211_REG_ALARM2) << 8) | 326 vt1211_read8(data, VT1211_REG_ALARM1); 327 328 data->last_updated = jiffies; 329 data->valid = 1; 330 } 331 332 mutex_unlock(&data->update_lock); 333 334 return data; 335 } 336 337 /* --------------------------------------------------------------------- 338 * Voltage sysfs interfaces 339 * ix = [0-5] 340 * --------------------------------------------------------------------- */ 341 342 #define SHOW_IN_INPUT 0 343 #define SHOW_SET_IN_MIN 1 344 #define SHOW_SET_IN_MAX 2 345 #define SHOW_IN_ALARM 3 346 347 static ssize_t show_in(struct device *dev, struct device_attribute *attr, 348 char *buf) 349 { 350 struct vt1211_data *data = vt1211_update_device(dev); 351 struct sensor_device_attribute_2 *sensor_attr_2 = 352 to_sensor_dev_attr_2(attr); 353 int ix = sensor_attr_2->index; 354 int fn = sensor_attr_2->nr; 355 int res; 356 357 switch (fn) { 358 case SHOW_IN_INPUT: 359 res = IN_FROM_REG(ix, data->in[ix]); 360 break; 361 case SHOW_SET_IN_MIN: 362 res = IN_FROM_REG(ix, data->in_min[ix]); 363 break; 364 case SHOW_SET_IN_MAX: 365 res = IN_FROM_REG(ix, data->in_max[ix]); 366 break; 367 case SHOW_IN_ALARM: 368 res = (data->alarms >> bitalarmin[ix]) & 1; 369 break; 370 default: 371 res = 0; 372 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 373 } 374 375 return sprintf(buf, "%d\n", res); 376 } 377 378 static ssize_t set_in(struct device *dev, struct device_attribute *attr, 379 const char *buf, size_t count) 380 { 381 struct vt1211_data *data = dev_get_drvdata(dev); 382 struct sensor_device_attribute_2 *sensor_attr_2 = 383 to_sensor_dev_attr_2(attr); 384 int ix = sensor_attr_2->index; 385 int fn = sensor_attr_2->nr; 386 long val; 387 int err; 388 389 err = kstrtol(buf, 10, &val); 390 if (err) 391 return err; 392 393 mutex_lock(&data->update_lock); 394 switch (fn) { 395 case SHOW_SET_IN_MIN: 396 data->in_min[ix] = IN_TO_REG(ix, val); 397 vt1211_write8(data, VT1211_REG_IN_MIN(ix), data->in_min[ix]); 398 break; 399 case SHOW_SET_IN_MAX: 400 data->in_max[ix] = IN_TO_REG(ix, val); 401 vt1211_write8(data, VT1211_REG_IN_MAX(ix), data->in_max[ix]); 402 break; 403 default: 404 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 405 } 406 mutex_unlock(&data->update_lock); 407 408 return count; 409 } 410 411 /* --------------------------------------------------------------------- 412 * Temperature sysfs interfaces 413 * ix = [0-6] 414 * --------------------------------------------------------------------- */ 415 416 #define SHOW_TEMP_INPUT 0 417 #define SHOW_SET_TEMP_MAX 1 418 #define SHOW_SET_TEMP_MAX_HYST 2 419 #define SHOW_TEMP_ALARM 3 420 421 static ssize_t show_temp(struct device *dev, struct device_attribute *attr, 422 char *buf) 423 { 424 struct vt1211_data *data = vt1211_update_device(dev); 425 struct sensor_device_attribute_2 *sensor_attr_2 = 426 to_sensor_dev_attr_2(attr); 427 int ix = sensor_attr_2->index; 428 int fn = sensor_attr_2->nr; 429 int res; 430 431 switch (fn) { 432 case SHOW_TEMP_INPUT: 433 res = TEMP_FROM_REG(ix, data->temp[ix]); 434 break; 435 case SHOW_SET_TEMP_MAX: 436 res = TEMP_FROM_REG(ix, data->temp_max[ix]); 437 break; 438 case SHOW_SET_TEMP_MAX_HYST: 439 res = TEMP_FROM_REG(ix, data->temp_hyst[ix]); 440 break; 441 case SHOW_TEMP_ALARM: 442 res = (data->alarms >> bitalarmtemp[ix]) & 1; 443 break; 444 default: 445 res = 0; 446 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 447 } 448 449 return sprintf(buf, "%d\n", res); 450 } 451 452 static ssize_t set_temp(struct device *dev, struct device_attribute *attr, 453 const char *buf, size_t count) 454 { 455 struct vt1211_data *data = dev_get_drvdata(dev); 456 struct sensor_device_attribute_2 *sensor_attr_2 = 457 to_sensor_dev_attr_2(attr); 458 int ix = sensor_attr_2->index; 459 int fn = sensor_attr_2->nr; 460 long val; 461 int err; 462 463 err = kstrtol(buf, 10, &val); 464 if (err) 465 return err; 466 467 mutex_lock(&data->update_lock); 468 switch (fn) { 469 case SHOW_SET_TEMP_MAX: 470 data->temp_max[ix] = TEMP_TO_REG(ix, val); 471 vt1211_write8(data, regtempmax[ix], 472 data->temp_max[ix]); 473 break; 474 case SHOW_SET_TEMP_MAX_HYST: 475 data->temp_hyst[ix] = TEMP_TO_REG(ix, val); 476 vt1211_write8(data, regtemphyst[ix], 477 data->temp_hyst[ix]); 478 break; 479 default: 480 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 481 } 482 mutex_unlock(&data->update_lock); 483 484 return count; 485 } 486 487 /* --------------------------------------------------------------------- 488 * Fan sysfs interfaces 489 * ix = [0-1] 490 * --------------------------------------------------------------------- */ 491 492 #define SHOW_FAN_INPUT 0 493 #define SHOW_SET_FAN_MIN 1 494 #define SHOW_SET_FAN_DIV 2 495 #define SHOW_FAN_ALARM 3 496 497 static ssize_t show_fan(struct device *dev, struct device_attribute *attr, 498 char *buf) 499 { 500 struct vt1211_data *data = vt1211_update_device(dev); 501 struct sensor_device_attribute_2 *sensor_attr_2 = 502 to_sensor_dev_attr_2(attr); 503 int ix = sensor_attr_2->index; 504 int fn = sensor_attr_2->nr; 505 int res; 506 507 switch (fn) { 508 case SHOW_FAN_INPUT: 509 res = RPM_FROM_REG(data->fan[ix], data->fan_div[ix]); 510 break; 511 case SHOW_SET_FAN_MIN: 512 res = RPM_FROM_REG(data->fan_min[ix], data->fan_div[ix]); 513 break; 514 case SHOW_SET_FAN_DIV: 515 res = DIV_FROM_REG(data->fan_div[ix]); 516 break; 517 case SHOW_FAN_ALARM: 518 res = (data->alarms >> bitalarmfan[ix]) & 1; 519 break; 520 default: 521 res = 0; 522 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 523 } 524 525 return sprintf(buf, "%d\n", res); 526 } 527 528 static ssize_t set_fan(struct device *dev, struct device_attribute *attr, 529 const char *buf, size_t count) 530 { 531 struct vt1211_data *data = dev_get_drvdata(dev); 532 struct sensor_device_attribute_2 *sensor_attr_2 = 533 to_sensor_dev_attr_2(attr); 534 int ix = sensor_attr_2->index; 535 int fn = sensor_attr_2->nr; 536 int reg; 537 unsigned long val; 538 int err; 539 540 err = kstrtoul(buf, 10, &val); 541 if (err) 542 return err; 543 544 mutex_lock(&data->update_lock); 545 546 /* sync the data cache */ 547 reg = vt1211_read8(data, VT1211_REG_FAN_DIV); 548 data->fan_div[0] = (reg >> 4) & 3; 549 data->fan_div[1] = (reg >> 6) & 3; 550 data->fan_ctl = reg & 0xf; 551 552 switch (fn) { 553 case SHOW_SET_FAN_MIN: 554 data->fan_min[ix] = RPM_TO_REG(val, data->fan_div[ix]); 555 vt1211_write8(data, VT1211_REG_FAN_MIN(ix), 556 data->fan_min[ix]); 557 break; 558 case SHOW_SET_FAN_DIV: 559 switch (val) { 560 case 1: 561 data->fan_div[ix] = 0; 562 break; 563 case 2: 564 data->fan_div[ix] = 1; 565 break; 566 case 4: 567 data->fan_div[ix] = 2; 568 break; 569 case 8: 570 data->fan_div[ix] = 3; 571 break; 572 default: 573 count = -EINVAL; 574 dev_warn(dev, 575 "fan div value %ld not supported. Choose one of 1, 2, 4, or 8.\n", 576 val); 577 goto EXIT; 578 } 579 vt1211_write8(data, VT1211_REG_FAN_DIV, 580 ((data->fan_div[1] << 6) | 581 (data->fan_div[0] << 4) | 582 data->fan_ctl)); 583 break; 584 default: 585 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 586 } 587 588 EXIT: 589 mutex_unlock(&data->update_lock); 590 return count; 591 } 592 593 /* --------------------------------------------------------------------- 594 * PWM sysfs interfaces 595 * ix = [0-1] 596 * --------------------------------------------------------------------- */ 597 598 #define SHOW_PWM 0 599 #define SHOW_SET_PWM_ENABLE 1 600 #define SHOW_SET_PWM_FREQ 2 601 #define SHOW_SET_PWM_AUTO_CHANNELS_TEMP 3 602 603 static ssize_t show_pwm(struct device *dev, struct device_attribute *attr, 604 char *buf) 605 { 606 struct vt1211_data *data = vt1211_update_device(dev); 607 struct sensor_device_attribute_2 *sensor_attr_2 = 608 to_sensor_dev_attr_2(attr); 609 int ix = sensor_attr_2->index; 610 int fn = sensor_attr_2->nr; 611 int res; 612 613 switch (fn) { 614 case SHOW_PWM: 615 res = data->pwm[ix]; 616 break; 617 case SHOW_SET_PWM_ENABLE: 618 res = ((data->pwm_ctl[ix] >> 3) & 1) ? 2 : 0; 619 break; 620 case SHOW_SET_PWM_FREQ: 621 res = 90000 >> (data->pwm_clk & 7); 622 break; 623 case SHOW_SET_PWM_AUTO_CHANNELS_TEMP: 624 res = (data->pwm_ctl[ix] & 7) + 1; 625 break; 626 default: 627 res = 0; 628 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 629 } 630 631 return sprintf(buf, "%d\n", res); 632 } 633 634 static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, 635 const char *buf, size_t count) 636 { 637 struct vt1211_data *data = dev_get_drvdata(dev); 638 struct sensor_device_attribute_2 *sensor_attr_2 = 639 to_sensor_dev_attr_2(attr); 640 int ix = sensor_attr_2->index; 641 int fn = sensor_attr_2->nr; 642 int tmp, reg; 643 unsigned long val; 644 int err; 645 646 err = kstrtoul(buf, 10, &val); 647 if (err) 648 return err; 649 650 mutex_lock(&data->update_lock); 651 652 switch (fn) { 653 case SHOW_SET_PWM_ENABLE: 654 /* sync the data cache */ 655 reg = vt1211_read8(data, VT1211_REG_FAN_DIV); 656 data->fan_div[0] = (reg >> 4) & 3; 657 data->fan_div[1] = (reg >> 6) & 3; 658 data->fan_ctl = reg & 0xf; 659 reg = vt1211_read8(data, VT1211_REG_PWM_CTL); 660 data->pwm_ctl[0] = reg & 0xf; 661 data->pwm_ctl[1] = (reg >> 4) & 0xf; 662 switch (val) { 663 case 0: 664 data->pwm_ctl[ix] &= 7; 665 /* 666 * disable SmartGuardian if both PWM outputs are 667 * disabled 668 */ 669 if ((data->pwm_ctl[ix ^ 1] & 1) == 0) 670 data->fan_ctl &= 0xe; 671 break; 672 case 2: 673 data->pwm_ctl[ix] |= 8; 674 data->fan_ctl |= 1; 675 break; 676 default: 677 count = -EINVAL; 678 dev_warn(dev, 679 "pwm mode %ld not supported. Choose one of 0 or 2.\n", 680 val); 681 goto EXIT; 682 } 683 vt1211_write8(data, VT1211_REG_PWM_CTL, 684 ((data->pwm_ctl[1] << 4) | 685 data->pwm_ctl[0])); 686 vt1211_write8(data, VT1211_REG_FAN_DIV, 687 ((data->fan_div[1] << 6) | 688 (data->fan_div[0] << 4) | 689 data->fan_ctl)); 690 break; 691 case SHOW_SET_PWM_FREQ: 692 val = 135000 / clamp_val(val, 135000 >> 7, 135000); 693 /* calculate tmp = log2(val) */ 694 tmp = 0; 695 for (val >>= 1; val > 0; val >>= 1) 696 tmp++; 697 /* sync the data cache */ 698 reg = vt1211_read8(data, VT1211_REG_PWM_CLK); 699 data->pwm_clk = (reg & 0xf8) | tmp; 700 vt1211_write8(data, VT1211_REG_PWM_CLK, data->pwm_clk); 701 break; 702 case SHOW_SET_PWM_AUTO_CHANNELS_TEMP: 703 if (val < 1 || val > 7) { 704 count = -EINVAL; 705 dev_warn(dev, 706 "temp channel %ld not supported. Choose a value between 1 and 7.\n", 707 val); 708 goto EXIT; 709 } 710 if (!ISTEMP(val - 1, data->uch_config)) { 711 count = -EINVAL; 712 dev_warn(dev, "temp channel %ld is not available.\n", 713 val); 714 goto EXIT; 715 } 716 /* sync the data cache */ 717 reg = vt1211_read8(data, VT1211_REG_PWM_CTL); 718 data->pwm_ctl[0] = reg & 0xf; 719 data->pwm_ctl[1] = (reg >> 4) & 0xf; 720 data->pwm_ctl[ix] = (data->pwm_ctl[ix] & 8) | (val - 1); 721 vt1211_write8(data, VT1211_REG_PWM_CTL, 722 ((data->pwm_ctl[1] << 4) | data->pwm_ctl[0])); 723 break; 724 default: 725 dev_dbg(dev, "Unknown attr fetch (%d)\n", fn); 726 } 727 728 EXIT: 729 mutex_unlock(&data->update_lock); 730 return count; 731 } 732 733 /* --------------------------------------------------------------------- 734 * PWM auto point definitions 735 * ix = [0-1] 736 * ap = [0-3] 737 * --------------------------------------------------------------------- */ 738 739 /* 740 * pwm[ix+1]_auto_point[ap+1]_temp mapping table: 741 * Note that there is only a single set of temp auto points that controls both 742 * PWM controllers. We still create 2 sets of sysfs files to make it look 743 * more consistent even though they map to the same registers. 744 * 745 * ix ap : description 746 * ------------------- 747 * 0 0 : pwm1/2 off temperature (pwm_auto_temp[0]) 748 * 0 1 : pwm1/2 low speed temperature (pwm_auto_temp[1]) 749 * 0 2 : pwm1/2 high speed temperature (pwm_auto_temp[2]) 750 * 0 3 : pwm1/2 full speed temperature (pwm_auto_temp[3]) 751 * 1 0 : pwm1/2 off temperature (pwm_auto_temp[0]) 752 * 1 1 : pwm1/2 low speed temperature (pwm_auto_temp[1]) 753 * 1 2 : pwm1/2 high speed temperature (pwm_auto_temp[2]) 754 * 1 3 : pwm1/2 full speed temperature (pwm_auto_temp[3]) 755 */ 756 757 static ssize_t show_pwm_auto_point_temp(struct device *dev, 758 struct device_attribute *attr, 759 char *buf) 760 { 761 struct vt1211_data *data = vt1211_update_device(dev); 762 struct sensor_device_attribute_2 *sensor_attr_2 = 763 to_sensor_dev_attr_2(attr); 764 int ix = sensor_attr_2->index; 765 int ap = sensor_attr_2->nr; 766 767 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->pwm_ctl[ix] & 7, 768 data->pwm_auto_temp[ap])); 769 } 770 771 static ssize_t set_pwm_auto_point_temp(struct device *dev, 772 struct device_attribute *attr, 773 const char *buf, size_t count) 774 { 775 struct vt1211_data *data = dev_get_drvdata(dev); 776 struct sensor_device_attribute_2 *sensor_attr_2 = 777 to_sensor_dev_attr_2(attr); 778 int ix = sensor_attr_2->index; 779 int ap = sensor_attr_2->nr; 780 int reg; 781 long val; 782 int err; 783 784 err = kstrtol(buf, 10, &val); 785 if (err) 786 return err; 787 788 789 mutex_lock(&data->update_lock); 790 791 /* sync the data cache */ 792 reg = vt1211_read8(data, VT1211_REG_PWM_CTL); 793 data->pwm_ctl[0] = reg & 0xf; 794 data->pwm_ctl[1] = (reg >> 4) & 0xf; 795 796 data->pwm_auto_temp[ap] = TEMP_TO_REG(data->pwm_ctl[ix] & 7, val); 797 vt1211_write8(data, VT1211_REG_PWM_AUTO_TEMP(ap), 798 data->pwm_auto_temp[ap]); 799 mutex_unlock(&data->update_lock); 800 801 return count; 802 } 803 804 /* 805 * pwm[ix+1]_auto_point[ap+1]_pwm mapping table: 806 * Note that the PWM auto points 0 & 3 are hard-wired in the VT1211 and can't 807 * be changed. 808 * 809 * ix ap : description 810 * ------------------- 811 * 0 0 : pwm1 off (pwm_auto_pwm[0][0], hard-wired to 0) 812 * 0 1 : pwm1 low speed duty cycle (pwm_auto_pwm[0][1]) 813 * 0 2 : pwm1 high speed duty cycle (pwm_auto_pwm[0][2]) 814 * 0 3 : pwm1 full speed (pwm_auto_pwm[0][3], hard-wired to 255) 815 * 1 0 : pwm2 off (pwm_auto_pwm[1][0], hard-wired to 0) 816 * 1 1 : pwm2 low speed duty cycle (pwm_auto_pwm[1][1]) 817 * 1 2 : pwm2 high speed duty cycle (pwm_auto_pwm[1][2]) 818 * 1 3 : pwm2 full speed (pwm_auto_pwm[1][3], hard-wired to 255) 819 */ 820 821 static ssize_t show_pwm_auto_point_pwm(struct device *dev, 822 struct device_attribute *attr, 823 char *buf) 824 { 825 struct vt1211_data *data = vt1211_update_device(dev); 826 struct sensor_device_attribute_2 *sensor_attr_2 = 827 to_sensor_dev_attr_2(attr); 828 int ix = sensor_attr_2->index; 829 int ap = sensor_attr_2->nr; 830 831 return sprintf(buf, "%d\n", data->pwm_auto_pwm[ix][ap]); 832 } 833 834 static ssize_t set_pwm_auto_point_pwm(struct device *dev, 835 struct device_attribute *attr, 836 const char *buf, size_t count) 837 { 838 struct vt1211_data *data = dev_get_drvdata(dev); 839 struct sensor_device_attribute_2 *sensor_attr_2 = 840 to_sensor_dev_attr_2(attr); 841 int ix = sensor_attr_2->index; 842 int ap = sensor_attr_2->nr; 843 unsigned long val; 844 int err; 845 846 err = kstrtoul(buf, 10, &val); 847 if (err) 848 return err; 849 850 mutex_lock(&data->update_lock); 851 data->pwm_auto_pwm[ix][ap] = clamp_val(val, 0, 255); 852 vt1211_write8(data, VT1211_REG_PWM_AUTO_PWM(ix, ap), 853 data->pwm_auto_pwm[ix][ap]); 854 mutex_unlock(&data->update_lock); 855 856 return count; 857 } 858 859 /* --------------------------------------------------------------------- 860 * Miscellaneous sysfs interfaces (VRM, VID, name, and (legacy) alarms) 861 * --------------------------------------------------------------------- */ 862 863 static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, 864 char *buf) 865 { 866 struct vt1211_data *data = dev_get_drvdata(dev); 867 868 return sprintf(buf, "%d\n", data->vrm); 869 } 870 871 static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, 872 const char *buf, size_t count) 873 { 874 struct vt1211_data *data = dev_get_drvdata(dev); 875 unsigned long val; 876 int err; 877 878 err = kstrtoul(buf, 10, &val); 879 if (err) 880 return err; 881 882 if (val > 255) 883 return -EINVAL; 884 885 data->vrm = val; 886 887 return count; 888 } 889 890 static ssize_t show_vid(struct device *dev, struct device_attribute *attr, 891 char *buf) 892 { 893 struct vt1211_data *data = dev_get_drvdata(dev); 894 895 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); 896 } 897 898 static ssize_t show_name(struct device *dev, 899 struct device_attribute *attr, char *buf) 900 { 901 struct vt1211_data *data = dev_get_drvdata(dev); 902 903 return sprintf(buf, "%s\n", data->name); 904 } 905 906 static ssize_t show_alarms(struct device *dev, 907 struct device_attribute *attr, char *buf) 908 { 909 struct vt1211_data *data = vt1211_update_device(dev); 910 911 return sprintf(buf, "%d\n", data->alarms); 912 } 913 914 /* --------------------------------------------------------------------- 915 * Device attribute structs 916 * --------------------------------------------------------------------- */ 917 918 #define SENSOR_ATTR_IN(ix) \ 919 { SENSOR_ATTR_2(in##ix##_input, S_IRUGO, \ 920 show_in, NULL, SHOW_IN_INPUT, ix), \ 921 SENSOR_ATTR_2(in##ix##_min, S_IRUGO | S_IWUSR, \ 922 show_in, set_in, SHOW_SET_IN_MIN, ix), \ 923 SENSOR_ATTR_2(in##ix##_max, S_IRUGO | S_IWUSR, \ 924 show_in, set_in, SHOW_SET_IN_MAX, ix), \ 925 SENSOR_ATTR_2(in##ix##_alarm, S_IRUGO, \ 926 show_in, NULL, SHOW_IN_ALARM, ix) \ 927 } 928 929 static struct sensor_device_attribute_2 vt1211_sysfs_in[][4] = { 930 SENSOR_ATTR_IN(0), 931 SENSOR_ATTR_IN(1), 932 SENSOR_ATTR_IN(2), 933 SENSOR_ATTR_IN(3), 934 SENSOR_ATTR_IN(4), 935 SENSOR_ATTR_IN(5) 936 }; 937 938 #define IN_UNIT_ATTRS(X) \ 939 { &vt1211_sysfs_in[X][0].dev_attr.attr, \ 940 &vt1211_sysfs_in[X][1].dev_attr.attr, \ 941 &vt1211_sysfs_in[X][2].dev_attr.attr, \ 942 &vt1211_sysfs_in[X][3].dev_attr.attr, \ 943 NULL \ 944 } 945 946 static struct attribute *vt1211_in_attr[][5] = { 947 IN_UNIT_ATTRS(0), 948 IN_UNIT_ATTRS(1), 949 IN_UNIT_ATTRS(2), 950 IN_UNIT_ATTRS(3), 951 IN_UNIT_ATTRS(4), 952 IN_UNIT_ATTRS(5) 953 }; 954 955 static const struct attribute_group vt1211_in_attr_group[] = { 956 { .attrs = vt1211_in_attr[0] }, 957 { .attrs = vt1211_in_attr[1] }, 958 { .attrs = vt1211_in_attr[2] }, 959 { .attrs = vt1211_in_attr[3] }, 960 { .attrs = vt1211_in_attr[4] }, 961 { .attrs = vt1211_in_attr[5] } 962 }; 963 964 #define SENSOR_ATTR_TEMP(ix) \ 965 { SENSOR_ATTR_2(temp##ix##_input, S_IRUGO, \ 966 show_temp, NULL, SHOW_TEMP_INPUT, ix-1), \ 967 SENSOR_ATTR_2(temp##ix##_max, S_IRUGO | S_IWUSR, \ 968 show_temp, set_temp, SHOW_SET_TEMP_MAX, ix-1), \ 969 SENSOR_ATTR_2(temp##ix##_max_hyst, S_IRUGO | S_IWUSR, \ 970 show_temp, set_temp, SHOW_SET_TEMP_MAX_HYST, ix-1), \ 971 SENSOR_ATTR_2(temp##ix##_alarm, S_IRUGO, \ 972 show_temp, NULL, SHOW_TEMP_ALARM, ix-1) \ 973 } 974 975 static struct sensor_device_attribute_2 vt1211_sysfs_temp[][4] = { 976 SENSOR_ATTR_TEMP(1), 977 SENSOR_ATTR_TEMP(2), 978 SENSOR_ATTR_TEMP(3), 979 SENSOR_ATTR_TEMP(4), 980 SENSOR_ATTR_TEMP(5), 981 SENSOR_ATTR_TEMP(6), 982 SENSOR_ATTR_TEMP(7), 983 }; 984 985 #define TEMP_UNIT_ATTRS(X) \ 986 { &vt1211_sysfs_temp[X][0].dev_attr.attr, \ 987 &vt1211_sysfs_temp[X][1].dev_attr.attr, \ 988 &vt1211_sysfs_temp[X][2].dev_attr.attr, \ 989 &vt1211_sysfs_temp[X][3].dev_attr.attr, \ 990 NULL \ 991 } 992 993 static struct attribute *vt1211_temp_attr[][5] = { 994 TEMP_UNIT_ATTRS(0), 995 TEMP_UNIT_ATTRS(1), 996 TEMP_UNIT_ATTRS(2), 997 TEMP_UNIT_ATTRS(3), 998 TEMP_UNIT_ATTRS(4), 999 TEMP_UNIT_ATTRS(5), 1000 TEMP_UNIT_ATTRS(6) 1001 }; 1002 1003 static const struct attribute_group vt1211_temp_attr_group[] = { 1004 { .attrs = vt1211_temp_attr[0] }, 1005 { .attrs = vt1211_temp_attr[1] }, 1006 { .attrs = vt1211_temp_attr[2] }, 1007 { .attrs = vt1211_temp_attr[3] }, 1008 { .attrs = vt1211_temp_attr[4] }, 1009 { .attrs = vt1211_temp_attr[5] }, 1010 { .attrs = vt1211_temp_attr[6] } 1011 }; 1012 1013 #define SENSOR_ATTR_FAN(ix) \ 1014 SENSOR_ATTR_2(fan##ix##_input, S_IRUGO, \ 1015 show_fan, NULL, SHOW_FAN_INPUT, ix-1), \ 1016 SENSOR_ATTR_2(fan##ix##_min, S_IRUGO | S_IWUSR, \ 1017 show_fan, set_fan, SHOW_SET_FAN_MIN, ix-1), \ 1018 SENSOR_ATTR_2(fan##ix##_div, S_IRUGO | S_IWUSR, \ 1019 show_fan, set_fan, SHOW_SET_FAN_DIV, ix-1), \ 1020 SENSOR_ATTR_2(fan##ix##_alarm, S_IRUGO, \ 1021 show_fan, NULL, SHOW_FAN_ALARM, ix-1) 1022 1023 #define SENSOR_ATTR_PWM(ix) \ 1024 SENSOR_ATTR_2(pwm##ix, S_IRUGO, \ 1025 show_pwm, NULL, SHOW_PWM, ix-1), \ 1026 SENSOR_ATTR_2(pwm##ix##_enable, S_IRUGO | S_IWUSR, \ 1027 show_pwm, set_pwm, SHOW_SET_PWM_ENABLE, ix-1), \ 1028 SENSOR_ATTR_2(pwm##ix##_auto_channels_temp, S_IRUGO | S_IWUSR, \ 1029 show_pwm, set_pwm, SHOW_SET_PWM_AUTO_CHANNELS_TEMP, ix-1) 1030 1031 #define SENSOR_ATTR_PWM_FREQ(ix) \ 1032 SENSOR_ATTR_2(pwm##ix##_freq, S_IRUGO | S_IWUSR, \ 1033 show_pwm, set_pwm, SHOW_SET_PWM_FREQ, ix-1) 1034 1035 #define SENSOR_ATTR_PWM_FREQ_RO(ix) \ 1036 SENSOR_ATTR_2(pwm##ix##_freq, S_IRUGO, \ 1037 show_pwm, NULL, SHOW_SET_PWM_FREQ, ix-1) 1038 1039 #define SENSOR_ATTR_PWM_AUTO_POINT_TEMP(ix, ap) \ 1040 SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_temp, S_IRUGO | S_IWUSR, \ 1041 show_pwm_auto_point_temp, set_pwm_auto_point_temp, \ 1042 ap-1, ix-1) 1043 1044 #define SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(ix, ap) \ 1045 SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_temp, S_IRUGO, \ 1046 show_pwm_auto_point_temp, NULL, \ 1047 ap-1, ix-1) 1048 1049 #define SENSOR_ATTR_PWM_AUTO_POINT_PWM(ix, ap) \ 1050 SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_pwm, S_IRUGO | S_IWUSR, \ 1051 show_pwm_auto_point_pwm, set_pwm_auto_point_pwm, \ 1052 ap-1, ix-1) 1053 1054 #define SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(ix, ap) \ 1055 SENSOR_ATTR_2(pwm##ix##_auto_point##ap##_pwm, S_IRUGO, \ 1056 show_pwm_auto_point_pwm, NULL, \ 1057 ap-1, ix-1) 1058 1059 static struct sensor_device_attribute_2 vt1211_sysfs_fan_pwm[] = { 1060 SENSOR_ATTR_FAN(1), 1061 SENSOR_ATTR_FAN(2), 1062 SENSOR_ATTR_PWM(1), 1063 SENSOR_ATTR_PWM(2), 1064 SENSOR_ATTR_PWM_FREQ(1), 1065 SENSOR_ATTR_PWM_FREQ_RO(2), 1066 SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 1), 1067 SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 2), 1068 SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 3), 1069 SENSOR_ATTR_PWM_AUTO_POINT_TEMP(1, 4), 1070 SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 1), 1071 SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 2), 1072 SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 3), 1073 SENSOR_ATTR_PWM_AUTO_POINT_TEMP_RO(2, 4), 1074 SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(1, 1), 1075 SENSOR_ATTR_PWM_AUTO_POINT_PWM(1, 2), 1076 SENSOR_ATTR_PWM_AUTO_POINT_PWM(1, 3), 1077 SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(1, 4), 1078 SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(2, 1), 1079 SENSOR_ATTR_PWM_AUTO_POINT_PWM(2, 2), 1080 SENSOR_ATTR_PWM_AUTO_POINT_PWM(2, 3), 1081 SENSOR_ATTR_PWM_AUTO_POINT_PWM_RO(2, 4), 1082 }; 1083 1084 static struct device_attribute vt1211_sysfs_misc[] = { 1085 __ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm), 1086 __ATTR(cpu0_vid, S_IRUGO, show_vid, NULL), 1087 __ATTR(name, S_IRUGO, show_name, NULL), 1088 __ATTR(alarms, S_IRUGO, show_alarms, NULL), 1089 }; 1090 1091 /* --------------------------------------------------------------------- 1092 * Device registration and initialization 1093 * --------------------------------------------------------------------- */ 1094 1095 static void vt1211_init_device(struct vt1211_data *data) 1096 { 1097 /* set VRM */ 1098 data->vrm = vid_which_vrm(); 1099 1100 /* Read (and initialize) UCH config */ 1101 data->uch_config = vt1211_read8(data, VT1211_REG_UCH_CONFIG); 1102 if (uch_config > -1) { 1103 data->uch_config = (data->uch_config & 0x83) | 1104 (uch_config << 2); 1105 vt1211_write8(data, VT1211_REG_UCH_CONFIG, data->uch_config); 1106 } 1107 1108 /* 1109 * Initialize the interrupt mode (if request at module load time). 1110 * The VT1211 implements 3 different modes for clearing interrupts: 1111 * 0: Clear INT when status register is read. Regenerate INT as long 1112 * as temp stays above hysteresis limit. 1113 * 1: Clear INT when status register is read. DON'T regenerate INT 1114 * until temp falls below hysteresis limit and exceeds hot limit 1115 * again. 1116 * 2: Clear INT when temp falls below max limit. 1117 * 1118 * The driver only allows to force mode 0 since that's the only one 1119 * that makes sense for 'sensors' 1120 */ 1121 if (int_mode == 0) { 1122 vt1211_write8(data, VT1211_REG_TEMP1_CONFIG, 0); 1123 vt1211_write8(data, VT1211_REG_TEMP2_CONFIG, 0); 1124 } 1125 1126 /* Fill in some hard wired values into our data struct */ 1127 data->pwm_auto_pwm[0][3] = 255; 1128 data->pwm_auto_pwm[1][3] = 255; 1129 } 1130 1131 static void vt1211_remove_sysfs(struct platform_device *pdev) 1132 { 1133 struct device *dev = &pdev->dev; 1134 int i; 1135 1136 for (i = 0; i < ARRAY_SIZE(vt1211_in_attr_group); i++) 1137 sysfs_remove_group(&dev->kobj, &vt1211_in_attr_group[i]); 1138 1139 for (i = 0; i < ARRAY_SIZE(vt1211_temp_attr_group); i++) 1140 sysfs_remove_group(&dev->kobj, &vt1211_temp_attr_group[i]); 1141 1142 for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_fan_pwm); i++) { 1143 device_remove_file(dev, 1144 &vt1211_sysfs_fan_pwm[i].dev_attr); 1145 } 1146 for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_misc); i++) 1147 device_remove_file(dev, &vt1211_sysfs_misc[i]); 1148 } 1149 1150 static int vt1211_probe(struct platform_device *pdev) 1151 { 1152 struct device *dev = &pdev->dev; 1153 struct vt1211_data *data; 1154 struct resource *res; 1155 int i, err; 1156 1157 data = devm_kzalloc(dev, sizeof(struct vt1211_data), GFP_KERNEL); 1158 if (!data) 1159 return -ENOMEM; 1160 1161 res = platform_get_resource(pdev, IORESOURCE_IO, 0); 1162 if (!devm_request_region(dev, res->start, resource_size(res), 1163 DRVNAME)) { 1164 dev_err(dev, "Failed to request region 0x%lx-0x%lx\n", 1165 (unsigned long)res->start, (unsigned long)res->end); 1166 return -EBUSY; 1167 } 1168 data->addr = res->start; 1169 data->name = DRVNAME; 1170 mutex_init(&data->update_lock); 1171 1172 platform_set_drvdata(pdev, data); 1173 1174 /* Initialize the VT1211 chip */ 1175 vt1211_init_device(data); 1176 1177 /* Create sysfs interface files */ 1178 for (i = 0; i < ARRAY_SIZE(vt1211_in_attr_group); i++) { 1179 if (ISVOLT(i, data->uch_config)) { 1180 err = sysfs_create_group(&dev->kobj, 1181 &vt1211_in_attr_group[i]); 1182 if (err) 1183 goto EXIT_DEV_REMOVE; 1184 } 1185 } 1186 for (i = 0; i < ARRAY_SIZE(vt1211_temp_attr_group); i++) { 1187 if (ISTEMP(i, data->uch_config)) { 1188 err = sysfs_create_group(&dev->kobj, 1189 &vt1211_temp_attr_group[i]); 1190 if (err) 1191 goto EXIT_DEV_REMOVE; 1192 } 1193 } 1194 for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_fan_pwm); i++) { 1195 err = device_create_file(dev, 1196 &vt1211_sysfs_fan_pwm[i].dev_attr); 1197 if (err) 1198 goto EXIT_DEV_REMOVE; 1199 } 1200 for (i = 0; i < ARRAY_SIZE(vt1211_sysfs_misc); i++) { 1201 err = device_create_file(dev, 1202 &vt1211_sysfs_misc[i]); 1203 if (err) 1204 goto EXIT_DEV_REMOVE; 1205 } 1206 1207 /* Register device */ 1208 data->hwmon_dev = hwmon_device_register(dev); 1209 if (IS_ERR(data->hwmon_dev)) { 1210 err = PTR_ERR(data->hwmon_dev); 1211 dev_err(dev, "Class registration failed (%d)\n", err); 1212 goto EXIT_DEV_REMOVE_SILENT; 1213 } 1214 1215 return 0; 1216 1217 EXIT_DEV_REMOVE: 1218 dev_err(dev, "Sysfs interface creation failed (%d)\n", err); 1219 EXIT_DEV_REMOVE_SILENT: 1220 vt1211_remove_sysfs(pdev); 1221 return err; 1222 } 1223 1224 static int vt1211_remove(struct platform_device *pdev) 1225 { 1226 struct vt1211_data *data = platform_get_drvdata(pdev); 1227 1228 hwmon_device_unregister(data->hwmon_dev); 1229 vt1211_remove_sysfs(pdev); 1230 1231 return 0; 1232 } 1233 1234 static struct platform_driver vt1211_driver = { 1235 .driver = { 1236 .owner = THIS_MODULE, 1237 .name = DRVNAME, 1238 }, 1239 .probe = vt1211_probe, 1240 .remove = vt1211_remove, 1241 }; 1242 1243 static int __init vt1211_device_add(unsigned short address) 1244 { 1245 struct resource res = { 1246 .start = address, 1247 .end = address + 0x7f, 1248 .flags = IORESOURCE_IO, 1249 }; 1250 int err; 1251 1252 pdev = platform_device_alloc(DRVNAME, address); 1253 if (!pdev) { 1254 err = -ENOMEM; 1255 pr_err("Device allocation failed (%d)\n", err); 1256 goto EXIT; 1257 } 1258 1259 res.name = pdev->name; 1260 err = acpi_check_resource_conflict(&res); 1261 if (err) 1262 goto EXIT_DEV_PUT; 1263 1264 err = platform_device_add_resources(pdev, &res, 1); 1265 if (err) { 1266 pr_err("Device resource addition failed (%d)\n", err); 1267 goto EXIT_DEV_PUT; 1268 } 1269 1270 err = platform_device_add(pdev); 1271 if (err) { 1272 pr_err("Device addition failed (%d)\n", err); 1273 goto EXIT_DEV_PUT; 1274 } 1275 1276 return 0; 1277 1278 EXIT_DEV_PUT: 1279 platform_device_put(pdev); 1280 EXIT: 1281 return err; 1282 } 1283 1284 static int __init vt1211_find(int sio_cip, unsigned short *address) 1285 { 1286 int err = -ENODEV; 1287 int devid; 1288 1289 superio_enter(sio_cip); 1290 1291 devid = force_id ? force_id : superio_inb(sio_cip, SIO_VT1211_DEVID); 1292 if (devid != SIO_VT1211_ID) 1293 goto EXIT; 1294 1295 superio_select(sio_cip, SIO_VT1211_LDN_HWMON); 1296 1297 if ((superio_inb(sio_cip, SIO_VT1211_ACTIVE) & 1) == 0) { 1298 pr_warn("HW monitor is disabled, skipping\n"); 1299 goto EXIT; 1300 } 1301 1302 *address = ((superio_inb(sio_cip, SIO_VT1211_BADDR) << 8) | 1303 (superio_inb(sio_cip, SIO_VT1211_BADDR + 1))) & 0xff00; 1304 if (*address == 0) { 1305 pr_warn("Base address is not set, skipping\n"); 1306 goto EXIT; 1307 } 1308 1309 err = 0; 1310 pr_info("Found VT1211 chip at 0x%04x, revision %u\n", 1311 *address, superio_inb(sio_cip, SIO_VT1211_DEVREV)); 1312 1313 EXIT: 1314 superio_exit(sio_cip); 1315 return err; 1316 } 1317 1318 static int __init vt1211_init(void) 1319 { 1320 int err; 1321 unsigned short address = 0; 1322 1323 err = vt1211_find(SIO_REG_CIP1, &address); 1324 if (err) { 1325 err = vt1211_find(SIO_REG_CIP2, &address); 1326 if (err) 1327 goto EXIT; 1328 } 1329 1330 if ((uch_config < -1) || (uch_config > 31)) { 1331 err = -EINVAL; 1332 pr_warn("Invalid UCH configuration %d. Choose a value between 0 and 31.\n", 1333 uch_config); 1334 goto EXIT; 1335 } 1336 1337 if ((int_mode < -1) || (int_mode > 0)) { 1338 err = -EINVAL; 1339 pr_warn("Invalid interrupt mode %d. Only mode 0 is supported.\n", 1340 int_mode); 1341 goto EXIT; 1342 } 1343 1344 err = platform_driver_register(&vt1211_driver); 1345 if (err) 1346 goto EXIT; 1347 1348 /* Sets global pdev as a side effect */ 1349 err = vt1211_device_add(address); 1350 if (err) 1351 goto EXIT_DRV_UNREGISTER; 1352 1353 return 0; 1354 1355 EXIT_DRV_UNREGISTER: 1356 platform_driver_unregister(&vt1211_driver); 1357 EXIT: 1358 return err; 1359 } 1360 1361 static void __exit vt1211_exit(void) 1362 { 1363 platform_device_unregister(pdev); 1364 platform_driver_unregister(&vt1211_driver); 1365 } 1366 1367 MODULE_AUTHOR("Juerg Haefliger <juergh@gmail.com>"); 1368 MODULE_DESCRIPTION("VT1211 sensors"); 1369 MODULE_LICENSE("GPL"); 1370 1371 module_init(vt1211_init); 1372 module_exit(vt1211_exit); 1373