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