1 /* 2 w83627ehf - Driver for the hardware monitoring functionality of 3 the Winbond W83627EHF Super-I/O chip 4 Copyright (C) 2005 Jean Delvare <khali@linux-fr.org> 5 Copyright (C) 2006 Yuan Mu (Winbond), 6 Rudolf Marek <r.marek@assembler.cz> 7 David Hubbard <david.c.hubbard@gmail.com> 8 9 Shamelessly ripped from the w83627hf driver 10 Copyright (C) 2003 Mark Studebaker 11 12 Thanks to Leon Moonen, Steve Cliffe and Grant Coady for their help 13 in testing and debugging this driver. 14 15 This driver also supports the W83627EHG, which is the lead-free 16 version of the W83627EHF. 17 18 This program is free software; you can redistribute it and/or modify 19 it under the terms of the GNU General Public License as published by 20 the Free Software Foundation; either version 2 of the License, or 21 (at your option) any later version. 22 23 This program is distributed in the hope that it will be useful, 24 but WITHOUT ANY WARRANTY; without even the implied warranty of 25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 26 GNU General Public License for more details. 27 28 You should have received a copy of the GNU General Public License 29 along with this program; if not, write to the Free Software 30 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 31 32 33 Supports the following chips: 34 35 Chip #vin #fan #pwm #temp chip IDs man ID 36 w83627ehf 10 5 4 3 0x8850 0x88 0x5ca3 37 0x8860 0xa1 38 w83627dhg 9 5 4 3 0xa020 0xc1 0x5ca3 39 */ 40 41 #include <linux/module.h> 42 #include <linux/init.h> 43 #include <linux/slab.h> 44 #include <linux/i2c.h> 45 #include <linux/i2c-isa.h> 46 #include <linux/hwmon.h> 47 #include <linux/hwmon-sysfs.h> 48 #include <linux/err.h> 49 #include <linux/mutex.h> 50 #include <asm/io.h> 51 #include "lm75.h" 52 53 /* The actual ISA address is read from Super-I/O configuration space */ 54 static unsigned short address; 55 56 /* 57 * Super-I/O constants and functions 58 */ 59 60 /* 61 * The three following globals are initialized in w83627ehf_find(), before 62 * the i2c-isa device is created. Otherwise, they could be stored in 63 * w83627ehf_data. This is ugly, but necessary, and when the driver is next 64 * updated to become a platform driver, the globals will disappear. 65 */ 66 static int REG; /* The register to read/write */ 67 static int VAL; /* The value to read/write */ 68 /* The w83627ehf/ehg have 10 voltage inputs, but the w83627dhg has 9. This 69 * value is also used in w83627ehf_detect() to export a device name in sysfs 70 * (e.g. w83627ehf or w83627dhg) */ 71 static int w83627ehf_num_in; 72 73 #define W83627EHF_LD_HWM 0x0b 74 75 #define SIO_REG_LDSEL 0x07 /* Logical device select */ 76 #define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */ 77 #define SIO_REG_ENABLE 0x30 /* Logical device enable */ 78 #define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */ 79 80 #define SIO_W83627EHF_ID 0x8850 81 #define SIO_W83627EHG_ID 0x8860 82 #define SIO_W83627DHG_ID 0xa020 83 #define SIO_ID_MASK 0xFFF0 84 85 static inline void 86 superio_outb(int reg, int val) 87 { 88 outb(reg, REG); 89 outb(val, VAL); 90 } 91 92 static inline int 93 superio_inb(int reg) 94 { 95 outb(reg, REG); 96 return inb(VAL); 97 } 98 99 static inline void 100 superio_select(int ld) 101 { 102 outb(SIO_REG_LDSEL, REG); 103 outb(ld, VAL); 104 } 105 106 static inline void 107 superio_enter(void) 108 { 109 outb(0x87, REG); 110 outb(0x87, REG); 111 } 112 113 static inline void 114 superio_exit(void) 115 { 116 outb(0x02, REG); 117 outb(0x02, VAL); 118 } 119 120 /* 121 * ISA constants 122 */ 123 124 #define IOREGION_ALIGNMENT ~7 125 #define IOREGION_OFFSET 5 126 #define IOREGION_LENGTH 2 127 #define ADDR_REG_OFFSET 5 128 #define DATA_REG_OFFSET 6 129 130 #define W83627EHF_REG_BANK 0x4E 131 #define W83627EHF_REG_CONFIG 0x40 132 133 /* Not currently used: 134 * REG_MAN_ID has the value 0x5ca3 for all supported chips. 135 * REG_CHIP_ID == 0x88/0xa1/0xc1 depending on chip model. 136 * REG_MAN_ID is at port 0x4f 137 * REG_CHIP_ID is at port 0x58 */ 138 139 static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 }; 140 static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c }; 141 142 /* The W83627EHF registers for nr=7,8,9 are in bank 5 */ 143 #define W83627EHF_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \ 144 (0x554 + (((nr) - 7) * 2))) 145 #define W83627EHF_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \ 146 (0x555 + (((nr) - 7) * 2))) 147 #define W83627EHF_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \ 148 (0x550 + (nr) - 7)) 149 150 #define W83627EHF_REG_TEMP1 0x27 151 #define W83627EHF_REG_TEMP1_HYST 0x3a 152 #define W83627EHF_REG_TEMP1_OVER 0x39 153 static const u16 W83627EHF_REG_TEMP[] = { 0x150, 0x250 }; 154 static const u16 W83627EHF_REG_TEMP_HYST[] = { 0x153, 0x253 }; 155 static const u16 W83627EHF_REG_TEMP_OVER[] = { 0x155, 0x255 }; 156 static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0x152, 0x252 }; 157 158 /* Fan clock dividers are spread over the following five registers */ 159 #define W83627EHF_REG_FANDIV1 0x47 160 #define W83627EHF_REG_FANDIV2 0x4B 161 #define W83627EHF_REG_VBAT 0x5D 162 #define W83627EHF_REG_DIODE 0x59 163 #define W83627EHF_REG_SMI_OVT 0x4C 164 165 #define W83627EHF_REG_ALARM1 0x459 166 #define W83627EHF_REG_ALARM2 0x45A 167 #define W83627EHF_REG_ALARM3 0x45B 168 169 /* SmartFan registers */ 170 /* DC or PWM output fan configuration */ 171 static const u8 W83627EHF_REG_PWM_ENABLE[] = { 172 0x04, /* SYS FAN0 output mode and PWM mode */ 173 0x04, /* CPU FAN0 output mode and PWM mode */ 174 0x12, /* AUX FAN mode */ 175 0x62, /* CPU fan1 mode */ 176 }; 177 178 static const u8 W83627EHF_PWM_MODE_SHIFT[] = { 0, 1, 0, 6 }; 179 static const u8 W83627EHF_PWM_ENABLE_SHIFT[] = { 2, 4, 1, 4 }; 180 181 /* FAN Duty Cycle, be used to control */ 182 static const u8 W83627EHF_REG_PWM[] = { 0x01, 0x03, 0x11, 0x61 }; 183 static const u8 W83627EHF_REG_TARGET[] = { 0x05, 0x06, 0x13, 0x63 }; 184 static const u8 W83627EHF_REG_TOLERANCE[] = { 0x07, 0x07, 0x14, 0x62 }; 185 186 187 /* Advanced Fan control, some values are common for all fans */ 188 static const u8 W83627EHF_REG_FAN_MIN_OUTPUT[] = { 0x08, 0x09, 0x15, 0x64 }; 189 static const u8 W83627EHF_REG_FAN_STOP_TIME[] = { 0x0C, 0x0D, 0x17, 0x66 }; 190 191 /* 192 * Conversions 193 */ 194 195 /* 1 is PWM mode, output in ms */ 196 static inline unsigned int step_time_from_reg(u8 reg, u8 mode) 197 { 198 return mode ? 100 * reg : 400 * reg; 199 } 200 201 static inline u8 step_time_to_reg(unsigned int msec, u8 mode) 202 { 203 return SENSORS_LIMIT((mode ? (msec + 50) / 100 : 204 (msec + 200) / 400), 1, 255); 205 } 206 207 static inline unsigned int 208 fan_from_reg(u8 reg, unsigned int div) 209 { 210 if (reg == 0 || reg == 255) 211 return 0; 212 return 1350000U / (reg * div); 213 } 214 215 static inline unsigned int 216 div_from_reg(u8 reg) 217 { 218 return 1 << reg; 219 } 220 221 static inline int 222 temp1_from_reg(s8 reg) 223 { 224 return reg * 1000; 225 } 226 227 static inline s8 228 temp1_to_reg(int temp, int min, int max) 229 { 230 if (temp <= min) 231 return min / 1000; 232 if (temp >= max) 233 return max / 1000; 234 if (temp < 0) 235 return (temp - 500) / 1000; 236 return (temp + 500) / 1000; 237 } 238 239 /* Some of analog inputs have internal scaling (2x), 8mV is ADC LSB */ 240 241 static u8 scale_in[10] = { 8, 8, 16, 16, 8, 8, 8, 16, 16, 8 }; 242 243 static inline long in_from_reg(u8 reg, u8 nr) 244 { 245 return reg * scale_in[nr]; 246 } 247 248 static inline u8 in_to_reg(u32 val, u8 nr) 249 { 250 return SENSORS_LIMIT(((val + (scale_in[nr] / 2)) / scale_in[nr]), 0, 255); 251 } 252 253 /* 254 * Data structures and manipulation thereof 255 */ 256 257 struct w83627ehf_data { 258 struct i2c_client client; 259 struct class_device *class_dev; 260 struct mutex lock; 261 262 struct mutex update_lock; 263 char valid; /* !=0 if following fields are valid */ 264 unsigned long last_updated; /* In jiffies */ 265 266 /* Register values */ 267 u8 in[10]; /* Register value */ 268 u8 in_max[10]; /* Register value */ 269 u8 in_min[10]; /* Register value */ 270 u8 fan[5]; 271 u8 fan_min[5]; 272 u8 fan_div[5]; 273 u8 has_fan; /* some fan inputs can be disabled */ 274 s8 temp1; 275 s8 temp1_max; 276 s8 temp1_max_hyst; 277 s16 temp[2]; 278 s16 temp_max[2]; 279 s16 temp_max_hyst[2]; 280 u32 alarms; 281 282 u8 pwm_mode[4]; /* 0->DC variable voltage, 1->PWM variable duty cycle */ 283 u8 pwm_enable[4]; /* 1->manual 284 2->thermal cruise (also called SmartFan I) */ 285 u8 pwm[4]; 286 u8 target_temp[4]; 287 u8 tolerance[4]; 288 289 u8 fan_min_output[4]; /* minimum fan speed */ 290 u8 fan_stop_time[4]; 291 }; 292 293 static inline int is_word_sized(u16 reg) 294 { 295 return (((reg & 0xff00) == 0x100 296 || (reg & 0xff00) == 0x200) 297 && ((reg & 0x00ff) == 0x50 298 || (reg & 0x00ff) == 0x53 299 || (reg & 0x00ff) == 0x55)); 300 } 301 302 /* We assume that the default bank is 0, thus the following two functions do 303 nothing for registers which live in bank 0. For others, they respectively 304 set the bank register to the correct value (before the register is 305 accessed), and back to 0 (afterwards). */ 306 static inline void w83627ehf_set_bank(struct i2c_client *client, u16 reg) 307 { 308 if (reg & 0xff00) { 309 outb_p(W83627EHF_REG_BANK, client->addr + ADDR_REG_OFFSET); 310 outb_p(reg >> 8, client->addr + DATA_REG_OFFSET); 311 } 312 } 313 314 static inline void w83627ehf_reset_bank(struct i2c_client *client, u16 reg) 315 { 316 if (reg & 0xff00) { 317 outb_p(W83627EHF_REG_BANK, client->addr + ADDR_REG_OFFSET); 318 outb_p(0, client->addr + DATA_REG_OFFSET); 319 } 320 } 321 322 static u16 w83627ehf_read_value(struct i2c_client *client, u16 reg) 323 { 324 struct w83627ehf_data *data = i2c_get_clientdata(client); 325 int res, word_sized = is_word_sized(reg); 326 327 mutex_lock(&data->lock); 328 329 w83627ehf_set_bank(client, reg); 330 outb_p(reg & 0xff, client->addr + ADDR_REG_OFFSET); 331 res = inb_p(client->addr + DATA_REG_OFFSET); 332 if (word_sized) { 333 outb_p((reg & 0xff) + 1, 334 client->addr + ADDR_REG_OFFSET); 335 res = (res << 8) + inb_p(client->addr + DATA_REG_OFFSET); 336 } 337 w83627ehf_reset_bank(client, reg); 338 339 mutex_unlock(&data->lock); 340 341 return res; 342 } 343 344 static int w83627ehf_write_value(struct i2c_client *client, u16 reg, u16 value) 345 { 346 struct w83627ehf_data *data = i2c_get_clientdata(client); 347 int word_sized = is_word_sized(reg); 348 349 mutex_lock(&data->lock); 350 351 w83627ehf_set_bank(client, reg); 352 outb_p(reg & 0xff, client->addr + ADDR_REG_OFFSET); 353 if (word_sized) { 354 outb_p(value >> 8, client->addr + DATA_REG_OFFSET); 355 outb_p((reg & 0xff) + 1, 356 client->addr + ADDR_REG_OFFSET); 357 } 358 outb_p(value & 0xff, client->addr + DATA_REG_OFFSET); 359 w83627ehf_reset_bank(client, reg); 360 361 mutex_unlock(&data->lock); 362 return 0; 363 } 364 365 /* This function assumes that the caller holds data->update_lock */ 366 static void w83627ehf_write_fan_div(struct i2c_client *client, int nr) 367 { 368 struct w83627ehf_data *data = i2c_get_clientdata(client); 369 u8 reg; 370 371 switch (nr) { 372 case 0: 373 reg = (w83627ehf_read_value(client, W83627EHF_REG_FANDIV1) & 0xcf) 374 | ((data->fan_div[0] & 0x03) << 4); 375 /* fan5 input control bit is write only, compute the value */ 376 reg |= (data->has_fan & (1 << 4)) ? 1 : 0; 377 w83627ehf_write_value(client, W83627EHF_REG_FANDIV1, reg); 378 reg = (w83627ehf_read_value(client, W83627EHF_REG_VBAT) & 0xdf) 379 | ((data->fan_div[0] & 0x04) << 3); 380 w83627ehf_write_value(client, W83627EHF_REG_VBAT, reg); 381 break; 382 case 1: 383 reg = (w83627ehf_read_value(client, W83627EHF_REG_FANDIV1) & 0x3f) 384 | ((data->fan_div[1] & 0x03) << 6); 385 /* fan5 input control bit is write only, compute the value */ 386 reg |= (data->has_fan & (1 << 4)) ? 1 : 0; 387 w83627ehf_write_value(client, W83627EHF_REG_FANDIV1, reg); 388 reg = (w83627ehf_read_value(client, W83627EHF_REG_VBAT) & 0xbf) 389 | ((data->fan_div[1] & 0x04) << 4); 390 w83627ehf_write_value(client, W83627EHF_REG_VBAT, reg); 391 break; 392 case 2: 393 reg = (w83627ehf_read_value(client, W83627EHF_REG_FANDIV2) & 0x3f) 394 | ((data->fan_div[2] & 0x03) << 6); 395 w83627ehf_write_value(client, W83627EHF_REG_FANDIV2, reg); 396 reg = (w83627ehf_read_value(client, W83627EHF_REG_VBAT) & 0x7f) 397 | ((data->fan_div[2] & 0x04) << 5); 398 w83627ehf_write_value(client, W83627EHF_REG_VBAT, reg); 399 break; 400 case 3: 401 reg = (w83627ehf_read_value(client, W83627EHF_REG_DIODE) & 0xfc) 402 | (data->fan_div[3] & 0x03); 403 w83627ehf_write_value(client, W83627EHF_REG_DIODE, reg); 404 reg = (w83627ehf_read_value(client, W83627EHF_REG_SMI_OVT) & 0x7f) 405 | ((data->fan_div[3] & 0x04) << 5); 406 w83627ehf_write_value(client, W83627EHF_REG_SMI_OVT, reg); 407 break; 408 case 4: 409 reg = (w83627ehf_read_value(client, W83627EHF_REG_DIODE) & 0x73) 410 | ((data->fan_div[4] & 0x03) << 2) 411 | ((data->fan_div[4] & 0x04) << 5); 412 w83627ehf_write_value(client, W83627EHF_REG_DIODE, reg); 413 break; 414 } 415 } 416 417 static struct w83627ehf_data *w83627ehf_update_device(struct device *dev) 418 { 419 struct i2c_client *client = to_i2c_client(dev); 420 struct w83627ehf_data *data = i2c_get_clientdata(client); 421 int pwmcfg = 0, tolerance = 0; /* shut up the compiler */ 422 int i; 423 424 mutex_lock(&data->update_lock); 425 426 if (time_after(jiffies, data->last_updated + HZ) 427 || !data->valid) { 428 /* Fan clock dividers */ 429 i = w83627ehf_read_value(client, W83627EHF_REG_FANDIV1); 430 data->fan_div[0] = (i >> 4) & 0x03; 431 data->fan_div[1] = (i >> 6) & 0x03; 432 i = w83627ehf_read_value(client, W83627EHF_REG_FANDIV2); 433 data->fan_div[2] = (i >> 6) & 0x03; 434 i = w83627ehf_read_value(client, W83627EHF_REG_VBAT); 435 data->fan_div[0] |= (i >> 3) & 0x04; 436 data->fan_div[1] |= (i >> 4) & 0x04; 437 data->fan_div[2] |= (i >> 5) & 0x04; 438 if (data->has_fan & ((1 << 3) | (1 << 4))) { 439 i = w83627ehf_read_value(client, W83627EHF_REG_DIODE); 440 data->fan_div[3] = i & 0x03; 441 data->fan_div[4] = ((i >> 2) & 0x03) 442 | ((i >> 5) & 0x04); 443 } 444 if (data->has_fan & (1 << 3)) { 445 i = w83627ehf_read_value(client, W83627EHF_REG_SMI_OVT); 446 data->fan_div[3] |= (i >> 5) & 0x04; 447 } 448 449 /* Measured voltages and limits */ 450 for (i = 0; i < w83627ehf_num_in; i++) { 451 data->in[i] = w83627ehf_read_value(client, 452 W83627EHF_REG_IN(i)); 453 data->in_min[i] = w83627ehf_read_value(client, 454 W83627EHF_REG_IN_MIN(i)); 455 data->in_max[i] = w83627ehf_read_value(client, 456 W83627EHF_REG_IN_MAX(i)); 457 } 458 459 /* Measured fan speeds and limits */ 460 for (i = 0; i < 5; i++) { 461 if (!(data->has_fan & (1 << i))) 462 continue; 463 464 data->fan[i] = w83627ehf_read_value(client, 465 W83627EHF_REG_FAN[i]); 466 data->fan_min[i] = w83627ehf_read_value(client, 467 W83627EHF_REG_FAN_MIN[i]); 468 469 /* If we failed to measure the fan speed and clock 470 divider can be increased, let's try that for next 471 time */ 472 if (data->fan[i] == 0xff 473 && data->fan_div[i] < 0x07) { 474 dev_dbg(&client->dev, "Increasing fan%d " 475 "clock divider from %u to %u\n", 476 i + 1, div_from_reg(data->fan_div[i]), 477 div_from_reg(data->fan_div[i] + 1)); 478 data->fan_div[i]++; 479 w83627ehf_write_fan_div(client, i); 480 /* Preserve min limit if possible */ 481 if (data->fan_min[i] >= 2 482 && data->fan_min[i] != 255) 483 w83627ehf_write_value(client, 484 W83627EHF_REG_FAN_MIN[i], 485 (data->fan_min[i] /= 2)); 486 } 487 } 488 489 for (i = 0; i < 4; i++) { 490 /* pwmcfg, tolarance mapped for i=0, i=1 to same reg */ 491 if (i != 1) { 492 pwmcfg = w83627ehf_read_value(client, 493 W83627EHF_REG_PWM_ENABLE[i]); 494 tolerance = w83627ehf_read_value(client, 495 W83627EHF_REG_TOLERANCE[i]); 496 } 497 data->pwm_mode[i] = 498 ((pwmcfg >> W83627EHF_PWM_MODE_SHIFT[i]) & 1) 499 ? 0 : 1; 500 data->pwm_enable[i] = 501 ((pwmcfg >> W83627EHF_PWM_ENABLE_SHIFT[i]) 502 & 3) + 1; 503 data->pwm[i] = w83627ehf_read_value(client, 504 W83627EHF_REG_PWM[i]); 505 data->fan_min_output[i] = w83627ehf_read_value(client, 506 W83627EHF_REG_FAN_MIN_OUTPUT[i]); 507 data->fan_stop_time[i] = w83627ehf_read_value(client, 508 W83627EHF_REG_FAN_STOP_TIME[i]); 509 data->target_temp[i] = 510 w83627ehf_read_value(client, 511 W83627EHF_REG_TARGET[i]) & 512 (data->pwm_mode[i] == 1 ? 0x7f : 0xff); 513 data->tolerance[i] = (tolerance >> (i == 1 ? 4 : 0)) 514 & 0x0f; 515 } 516 517 /* Measured temperatures and limits */ 518 data->temp1 = w83627ehf_read_value(client, 519 W83627EHF_REG_TEMP1); 520 data->temp1_max = w83627ehf_read_value(client, 521 W83627EHF_REG_TEMP1_OVER); 522 data->temp1_max_hyst = w83627ehf_read_value(client, 523 W83627EHF_REG_TEMP1_HYST); 524 for (i = 0; i < 2; i++) { 525 data->temp[i] = w83627ehf_read_value(client, 526 W83627EHF_REG_TEMP[i]); 527 data->temp_max[i] = w83627ehf_read_value(client, 528 W83627EHF_REG_TEMP_OVER[i]); 529 data->temp_max_hyst[i] = w83627ehf_read_value(client, 530 W83627EHF_REG_TEMP_HYST[i]); 531 } 532 533 data->alarms = w83627ehf_read_value(client, 534 W83627EHF_REG_ALARM1) | 535 (w83627ehf_read_value(client, 536 W83627EHF_REG_ALARM2) << 8) | 537 (w83627ehf_read_value(client, 538 W83627EHF_REG_ALARM3) << 16); 539 540 data->last_updated = jiffies; 541 data->valid = 1; 542 } 543 544 mutex_unlock(&data->update_lock); 545 return data; 546 } 547 548 /* 549 * Sysfs callback functions 550 */ 551 #define show_in_reg(reg) \ 552 static ssize_t \ 553 show_##reg(struct device *dev, struct device_attribute *attr, \ 554 char *buf) \ 555 { \ 556 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 557 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 558 int nr = sensor_attr->index; \ 559 return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr)); \ 560 } 561 show_in_reg(in) 562 show_in_reg(in_min) 563 show_in_reg(in_max) 564 565 #define store_in_reg(REG, reg) \ 566 static ssize_t \ 567 store_in_##reg (struct device *dev, struct device_attribute *attr, \ 568 const char *buf, size_t count) \ 569 { \ 570 struct i2c_client *client = to_i2c_client(dev); \ 571 struct w83627ehf_data *data = i2c_get_clientdata(client); \ 572 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 573 int nr = sensor_attr->index; \ 574 u32 val = simple_strtoul(buf, NULL, 10); \ 575 \ 576 mutex_lock(&data->update_lock); \ 577 data->in_##reg[nr] = in_to_reg(val, nr); \ 578 w83627ehf_write_value(client, W83627EHF_REG_IN_##REG(nr), \ 579 data->in_##reg[nr]); \ 580 mutex_unlock(&data->update_lock); \ 581 return count; \ 582 } 583 584 store_in_reg(MIN, min) 585 store_in_reg(MAX, max) 586 587 static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, char *buf) 588 { 589 struct w83627ehf_data *data = w83627ehf_update_device(dev); 590 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 591 int nr = sensor_attr->index; 592 return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01); 593 } 594 595 static struct sensor_device_attribute sda_in_input[] = { 596 SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0), 597 SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1), 598 SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2), 599 SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3), 600 SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4), 601 SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5), 602 SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6), 603 SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7), 604 SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8), 605 SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9), 606 }; 607 608 static struct sensor_device_attribute sda_in_alarm[] = { 609 SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0), 610 SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1), 611 SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2), 612 SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3), 613 SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8), 614 SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21), 615 SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20), 616 SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16), 617 SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17), 618 SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19), 619 }; 620 621 static struct sensor_device_attribute sda_in_min[] = { 622 SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0), 623 SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1), 624 SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2), 625 SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3), 626 SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4), 627 SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5), 628 SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6), 629 SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7), 630 SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8), 631 SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9), 632 }; 633 634 static struct sensor_device_attribute sda_in_max[] = { 635 SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0), 636 SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1), 637 SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2), 638 SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3), 639 SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4), 640 SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5), 641 SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6), 642 SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7), 643 SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8), 644 SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9), 645 }; 646 647 #define show_fan_reg(reg) \ 648 static ssize_t \ 649 show_##reg(struct device *dev, struct device_attribute *attr, \ 650 char *buf) \ 651 { \ 652 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 653 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 654 int nr = sensor_attr->index; \ 655 return sprintf(buf, "%d\n", \ 656 fan_from_reg(data->reg[nr], \ 657 div_from_reg(data->fan_div[nr]))); \ 658 } 659 show_fan_reg(fan); 660 show_fan_reg(fan_min); 661 662 static ssize_t 663 show_fan_div(struct device *dev, struct device_attribute *attr, 664 char *buf) 665 { 666 struct w83627ehf_data *data = w83627ehf_update_device(dev); 667 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 668 int nr = sensor_attr->index; 669 return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr])); 670 } 671 672 static ssize_t 673 store_fan_min(struct device *dev, struct device_attribute *attr, 674 const char *buf, size_t count) 675 { 676 struct i2c_client *client = to_i2c_client(dev); 677 struct w83627ehf_data *data = i2c_get_clientdata(client); 678 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 679 int nr = sensor_attr->index; 680 unsigned int val = simple_strtoul(buf, NULL, 10); 681 unsigned int reg; 682 u8 new_div; 683 684 mutex_lock(&data->update_lock); 685 if (!val) { 686 /* No min limit, alarm disabled */ 687 data->fan_min[nr] = 255; 688 new_div = data->fan_div[nr]; /* No change */ 689 dev_info(dev, "fan%u low limit and alarm disabled\n", nr + 1); 690 } else if ((reg = 1350000U / val) >= 128 * 255) { 691 /* Speed below this value cannot possibly be represented, 692 even with the highest divider (128) */ 693 data->fan_min[nr] = 254; 694 new_div = 7; /* 128 == (1 << 7) */ 695 dev_warn(dev, "fan%u low limit %u below minimum %u, set to " 696 "minimum\n", nr + 1, val, fan_from_reg(254, 128)); 697 } else if (!reg) { 698 /* Speed above this value cannot possibly be represented, 699 even with the lowest divider (1) */ 700 data->fan_min[nr] = 1; 701 new_div = 0; /* 1 == (1 << 0) */ 702 dev_warn(dev, "fan%u low limit %u above maximum %u, set to " 703 "maximum\n", nr + 1, val, fan_from_reg(1, 1)); 704 } else { 705 /* Automatically pick the best divider, i.e. the one such 706 that the min limit will correspond to a register value 707 in the 96..192 range */ 708 new_div = 0; 709 while (reg > 192 && new_div < 7) { 710 reg >>= 1; 711 new_div++; 712 } 713 data->fan_min[nr] = reg; 714 } 715 716 /* Write both the fan clock divider (if it changed) and the new 717 fan min (unconditionally) */ 718 if (new_div != data->fan_div[nr]) { 719 if (new_div > data->fan_div[nr]) 720 data->fan[nr] >>= (data->fan_div[nr] - new_div); 721 else 722 data->fan[nr] <<= (new_div - data->fan_div[nr]); 723 724 dev_dbg(dev, "fan%u clock divider changed from %u to %u\n", 725 nr + 1, div_from_reg(data->fan_div[nr]), 726 div_from_reg(new_div)); 727 data->fan_div[nr] = new_div; 728 w83627ehf_write_fan_div(client, nr); 729 } 730 w83627ehf_write_value(client, W83627EHF_REG_FAN_MIN[nr], 731 data->fan_min[nr]); 732 mutex_unlock(&data->update_lock); 733 734 return count; 735 } 736 737 static struct sensor_device_attribute sda_fan_input[] = { 738 SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0), 739 SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1), 740 SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2), 741 SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3), 742 SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4), 743 }; 744 745 static struct sensor_device_attribute sda_fan_alarm[] = { 746 SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6), 747 SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7), 748 SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11), 749 SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 10), 750 SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23), 751 }; 752 753 static struct sensor_device_attribute sda_fan_min[] = { 754 SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min, 755 store_fan_min, 0), 756 SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min, 757 store_fan_min, 1), 758 SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min, 759 store_fan_min, 2), 760 SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min, 761 store_fan_min, 3), 762 SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min, 763 store_fan_min, 4), 764 }; 765 766 static struct sensor_device_attribute sda_fan_div[] = { 767 SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0), 768 SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1), 769 SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2), 770 SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3), 771 SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4), 772 }; 773 774 #define show_temp1_reg(reg) \ 775 static ssize_t \ 776 show_##reg(struct device *dev, struct device_attribute *attr, \ 777 char *buf) \ 778 { \ 779 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 780 return sprintf(buf, "%d\n", temp1_from_reg(data->reg)); \ 781 } 782 show_temp1_reg(temp1); 783 show_temp1_reg(temp1_max); 784 show_temp1_reg(temp1_max_hyst); 785 786 #define store_temp1_reg(REG, reg) \ 787 static ssize_t \ 788 store_temp1_##reg(struct device *dev, struct device_attribute *attr, \ 789 const char *buf, size_t count) \ 790 { \ 791 struct i2c_client *client = to_i2c_client(dev); \ 792 struct w83627ehf_data *data = i2c_get_clientdata(client); \ 793 u32 val = simple_strtoul(buf, NULL, 10); \ 794 \ 795 mutex_lock(&data->update_lock); \ 796 data->temp1_##reg = temp1_to_reg(val, -128000, 127000); \ 797 w83627ehf_write_value(client, W83627EHF_REG_TEMP1_##REG, \ 798 data->temp1_##reg); \ 799 mutex_unlock(&data->update_lock); \ 800 return count; \ 801 } 802 store_temp1_reg(OVER, max); 803 store_temp1_reg(HYST, max_hyst); 804 805 #define show_temp_reg(reg) \ 806 static ssize_t \ 807 show_##reg(struct device *dev, struct device_attribute *attr, \ 808 char *buf) \ 809 { \ 810 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 811 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 812 int nr = sensor_attr->index; \ 813 return sprintf(buf, "%d\n", \ 814 LM75_TEMP_FROM_REG(data->reg[nr])); \ 815 } 816 show_temp_reg(temp); 817 show_temp_reg(temp_max); 818 show_temp_reg(temp_max_hyst); 819 820 #define store_temp_reg(REG, reg) \ 821 static ssize_t \ 822 store_##reg(struct device *dev, struct device_attribute *attr, \ 823 const char *buf, size_t count) \ 824 { \ 825 struct i2c_client *client = to_i2c_client(dev); \ 826 struct w83627ehf_data *data = i2c_get_clientdata(client); \ 827 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 828 int nr = sensor_attr->index; \ 829 u32 val = simple_strtoul(buf, NULL, 10); \ 830 \ 831 mutex_lock(&data->update_lock); \ 832 data->reg[nr] = LM75_TEMP_TO_REG(val); \ 833 w83627ehf_write_value(client, W83627EHF_REG_TEMP_##REG[nr], \ 834 data->reg[nr]); \ 835 mutex_unlock(&data->update_lock); \ 836 return count; \ 837 } 838 store_temp_reg(OVER, temp_max); 839 store_temp_reg(HYST, temp_max_hyst); 840 841 static struct sensor_device_attribute sda_temp[] = { 842 SENSOR_ATTR(temp1_input, S_IRUGO, show_temp1, NULL, 0), 843 SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 0), 844 SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 1), 845 SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp1_max, 846 store_temp1_max, 0), 847 SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max, 848 store_temp_max, 0), 849 SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max, 850 store_temp_max, 1), 851 SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1_max_hyst, 852 store_temp1_max_hyst, 0), 853 SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst, 854 store_temp_max_hyst, 0), 855 SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst, 856 store_temp_max_hyst, 1), 857 SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4), 858 SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5), 859 SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13), 860 }; 861 862 #define show_pwm_reg(reg) \ 863 static ssize_t show_##reg (struct device *dev, struct device_attribute *attr, \ 864 char *buf) \ 865 { \ 866 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 867 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 868 int nr = sensor_attr->index; \ 869 return sprintf(buf, "%d\n", data->reg[nr]); \ 870 } 871 872 show_pwm_reg(pwm_mode) 873 show_pwm_reg(pwm_enable) 874 show_pwm_reg(pwm) 875 876 static ssize_t 877 store_pwm_mode(struct device *dev, struct device_attribute *attr, 878 const char *buf, size_t count) 879 { 880 struct i2c_client *client = to_i2c_client(dev); 881 struct w83627ehf_data *data = i2c_get_clientdata(client); 882 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 883 int nr = sensor_attr->index; 884 u32 val = simple_strtoul(buf, NULL, 10); 885 u16 reg; 886 887 if (val > 1) 888 return -EINVAL; 889 mutex_lock(&data->update_lock); 890 reg = w83627ehf_read_value(client, W83627EHF_REG_PWM_ENABLE[nr]); 891 data->pwm_mode[nr] = val; 892 reg &= ~(1 << W83627EHF_PWM_MODE_SHIFT[nr]); 893 if (!val) 894 reg |= 1 << W83627EHF_PWM_MODE_SHIFT[nr]; 895 w83627ehf_write_value(client, W83627EHF_REG_PWM_ENABLE[nr], reg); 896 mutex_unlock(&data->update_lock); 897 return count; 898 } 899 900 static ssize_t 901 store_pwm(struct device *dev, struct device_attribute *attr, 902 const char *buf, size_t count) 903 { 904 struct i2c_client *client = to_i2c_client(dev); 905 struct w83627ehf_data *data = i2c_get_clientdata(client); 906 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 907 int nr = sensor_attr->index; 908 u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 0, 255); 909 910 mutex_lock(&data->update_lock); 911 data->pwm[nr] = val; 912 w83627ehf_write_value(client, W83627EHF_REG_PWM[nr], val); 913 mutex_unlock(&data->update_lock); 914 return count; 915 } 916 917 static ssize_t 918 store_pwm_enable(struct device *dev, struct device_attribute *attr, 919 const char *buf, size_t count) 920 { 921 struct i2c_client *client = to_i2c_client(dev); 922 struct w83627ehf_data *data = i2c_get_clientdata(client); 923 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 924 int nr = sensor_attr->index; 925 u32 val = simple_strtoul(buf, NULL, 10); 926 u16 reg; 927 928 if (!val || (val > 2)) /* only modes 1 and 2 are supported */ 929 return -EINVAL; 930 mutex_lock(&data->update_lock); 931 reg = w83627ehf_read_value(client, W83627EHF_REG_PWM_ENABLE[nr]); 932 data->pwm_enable[nr] = val; 933 reg &= ~(0x03 << W83627EHF_PWM_ENABLE_SHIFT[nr]); 934 reg |= (val - 1) << W83627EHF_PWM_ENABLE_SHIFT[nr]; 935 w83627ehf_write_value(client, W83627EHF_REG_PWM_ENABLE[nr], reg); 936 mutex_unlock(&data->update_lock); 937 return count; 938 } 939 940 941 #define show_tol_temp(reg) \ 942 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 943 char *buf) \ 944 { \ 945 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 946 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 947 int nr = sensor_attr->index; \ 948 return sprintf(buf, "%d\n", temp1_from_reg(data->reg[nr])); \ 949 } 950 951 show_tol_temp(tolerance) 952 show_tol_temp(target_temp) 953 954 static ssize_t 955 store_target_temp(struct device *dev, struct device_attribute *attr, 956 const char *buf, size_t count) 957 { 958 struct i2c_client *client = to_i2c_client(dev); 959 struct w83627ehf_data *data = i2c_get_clientdata(client); 960 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 961 int nr = sensor_attr->index; 962 u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 127000); 963 964 mutex_lock(&data->update_lock); 965 data->target_temp[nr] = val; 966 w83627ehf_write_value(client, W83627EHF_REG_TARGET[nr], val); 967 mutex_unlock(&data->update_lock); 968 return count; 969 } 970 971 static ssize_t 972 store_tolerance(struct device *dev, struct device_attribute *attr, 973 const char *buf, size_t count) 974 { 975 struct i2c_client *client = to_i2c_client(dev); 976 struct w83627ehf_data *data = i2c_get_clientdata(client); 977 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 978 int nr = sensor_attr->index; 979 u16 reg; 980 /* Limit the temp to 0C - 15C */ 981 u8 val = temp1_to_reg(simple_strtoul(buf, NULL, 10), 0, 15000); 982 983 mutex_lock(&data->update_lock); 984 reg = w83627ehf_read_value(client, W83627EHF_REG_TOLERANCE[nr]); 985 data->tolerance[nr] = val; 986 if (nr == 1) 987 reg = (reg & 0x0f) | (val << 4); 988 else 989 reg = (reg & 0xf0) | val; 990 w83627ehf_write_value(client, W83627EHF_REG_TOLERANCE[nr], reg); 991 mutex_unlock(&data->update_lock); 992 return count; 993 } 994 995 static struct sensor_device_attribute sda_pwm[] = { 996 SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 0), 997 SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1), 998 SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2), 999 SENSOR_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3), 1000 }; 1001 1002 static struct sensor_device_attribute sda_pwm_mode[] = { 1003 SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO, show_pwm_mode, 1004 store_pwm_mode, 0), 1005 SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO, show_pwm_mode, 1006 store_pwm_mode, 1), 1007 SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO, show_pwm_mode, 1008 store_pwm_mode, 2), 1009 SENSOR_ATTR(pwm4_mode, S_IWUSR | S_IRUGO, show_pwm_mode, 1010 store_pwm_mode, 3), 1011 }; 1012 1013 static struct sensor_device_attribute sda_pwm_enable[] = { 1014 SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable, 1015 store_pwm_enable, 0), 1016 SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable, 1017 store_pwm_enable, 1), 1018 SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable, 1019 store_pwm_enable, 2), 1020 SENSOR_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_enable, 1021 store_pwm_enable, 3), 1022 }; 1023 1024 static struct sensor_device_attribute sda_target_temp[] = { 1025 SENSOR_ATTR(pwm1_target, S_IWUSR | S_IRUGO, show_target_temp, 1026 store_target_temp, 0), 1027 SENSOR_ATTR(pwm2_target, S_IWUSR | S_IRUGO, show_target_temp, 1028 store_target_temp, 1), 1029 SENSOR_ATTR(pwm3_target, S_IWUSR | S_IRUGO, show_target_temp, 1030 store_target_temp, 2), 1031 SENSOR_ATTR(pwm4_target, S_IWUSR | S_IRUGO, show_target_temp, 1032 store_target_temp, 3), 1033 }; 1034 1035 static struct sensor_device_attribute sda_tolerance[] = { 1036 SENSOR_ATTR(pwm1_tolerance, S_IWUSR | S_IRUGO, show_tolerance, 1037 store_tolerance, 0), 1038 SENSOR_ATTR(pwm2_tolerance, S_IWUSR | S_IRUGO, show_tolerance, 1039 store_tolerance, 1), 1040 SENSOR_ATTR(pwm3_tolerance, S_IWUSR | S_IRUGO, show_tolerance, 1041 store_tolerance, 2), 1042 SENSOR_ATTR(pwm4_tolerance, S_IWUSR | S_IRUGO, show_tolerance, 1043 store_tolerance, 3), 1044 }; 1045 1046 /* Smart Fan registers */ 1047 1048 #define fan_functions(reg, REG) \ 1049 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 1050 char *buf) \ 1051 { \ 1052 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 1053 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 1054 int nr = sensor_attr->index; \ 1055 return sprintf(buf, "%d\n", data->reg[nr]); \ 1056 }\ 1057 static ssize_t \ 1058 store_##reg(struct device *dev, struct device_attribute *attr, \ 1059 const char *buf, size_t count) \ 1060 {\ 1061 struct i2c_client *client = to_i2c_client(dev); \ 1062 struct w83627ehf_data *data = i2c_get_clientdata(client); \ 1063 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 1064 int nr = sensor_attr->index; \ 1065 u32 val = SENSORS_LIMIT(simple_strtoul(buf, NULL, 10), 1, 255); \ 1066 mutex_lock(&data->update_lock); \ 1067 data->reg[nr] = val; \ 1068 w83627ehf_write_value(client, W83627EHF_REG_##REG[nr], val); \ 1069 mutex_unlock(&data->update_lock); \ 1070 return count; \ 1071 } 1072 1073 fan_functions(fan_min_output, FAN_MIN_OUTPUT) 1074 1075 #define fan_time_functions(reg, REG) \ 1076 static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \ 1077 char *buf) \ 1078 { \ 1079 struct w83627ehf_data *data = w83627ehf_update_device(dev); \ 1080 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 1081 int nr = sensor_attr->index; \ 1082 return sprintf(buf, "%d\n", \ 1083 step_time_from_reg(data->reg[nr], data->pwm_mode[nr])); \ 1084 } \ 1085 \ 1086 static ssize_t \ 1087 store_##reg(struct device *dev, struct device_attribute *attr, \ 1088 const char *buf, size_t count) \ 1089 { \ 1090 struct i2c_client *client = to_i2c_client(dev); \ 1091 struct w83627ehf_data *data = i2c_get_clientdata(client); \ 1092 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \ 1093 int nr = sensor_attr->index; \ 1094 u8 val = step_time_to_reg(simple_strtoul(buf, NULL, 10), \ 1095 data->pwm_mode[nr]); \ 1096 mutex_lock(&data->update_lock); \ 1097 data->reg[nr] = val; \ 1098 w83627ehf_write_value(client, W83627EHF_REG_##REG[nr], val); \ 1099 mutex_unlock(&data->update_lock); \ 1100 return count; \ 1101 } \ 1102 1103 fan_time_functions(fan_stop_time, FAN_STOP_TIME) 1104 1105 1106 static struct sensor_device_attribute sda_sf3_arrays_fan4[] = { 1107 SENSOR_ATTR(pwm4_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time, 1108 store_fan_stop_time, 3), 1109 SENSOR_ATTR(pwm4_min_output, S_IWUSR | S_IRUGO, show_fan_min_output, 1110 store_fan_min_output, 3), 1111 }; 1112 1113 static struct sensor_device_attribute sda_sf3_arrays[] = { 1114 SENSOR_ATTR(pwm1_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time, 1115 store_fan_stop_time, 0), 1116 SENSOR_ATTR(pwm2_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time, 1117 store_fan_stop_time, 1), 1118 SENSOR_ATTR(pwm3_stop_time, S_IWUSR | S_IRUGO, show_fan_stop_time, 1119 store_fan_stop_time, 2), 1120 SENSOR_ATTR(pwm1_min_output, S_IWUSR | S_IRUGO, show_fan_min_output, 1121 store_fan_min_output, 0), 1122 SENSOR_ATTR(pwm2_min_output, S_IWUSR | S_IRUGO, show_fan_min_output, 1123 store_fan_min_output, 1), 1124 SENSOR_ATTR(pwm3_min_output, S_IWUSR | S_IRUGO, show_fan_min_output, 1125 store_fan_min_output, 2), 1126 }; 1127 1128 /* 1129 * Driver and client management 1130 */ 1131 1132 static void w83627ehf_device_remove_files(struct device *dev) 1133 { 1134 /* some entries in the following arrays may not have been used in 1135 * device_create_file(), but device_remove_file() will ignore them */ 1136 int i; 1137 1138 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) 1139 device_remove_file(dev, &sda_sf3_arrays[i].dev_attr); 1140 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) 1141 device_remove_file(dev, &sda_sf3_arrays_fan4[i].dev_attr); 1142 for (i = 0; i < w83627ehf_num_in; i++) { 1143 device_remove_file(dev, &sda_in_input[i].dev_attr); 1144 device_remove_file(dev, &sda_in_alarm[i].dev_attr); 1145 device_remove_file(dev, &sda_in_min[i].dev_attr); 1146 device_remove_file(dev, &sda_in_max[i].dev_attr); 1147 } 1148 for (i = 0; i < 5; i++) { 1149 device_remove_file(dev, &sda_fan_input[i].dev_attr); 1150 device_remove_file(dev, &sda_fan_alarm[i].dev_attr); 1151 device_remove_file(dev, &sda_fan_div[i].dev_attr); 1152 device_remove_file(dev, &sda_fan_min[i].dev_attr); 1153 } 1154 for (i = 0; i < 4; i++) { 1155 device_remove_file(dev, &sda_pwm[i].dev_attr); 1156 device_remove_file(dev, &sda_pwm_mode[i].dev_attr); 1157 device_remove_file(dev, &sda_pwm_enable[i].dev_attr); 1158 device_remove_file(dev, &sda_target_temp[i].dev_attr); 1159 device_remove_file(dev, &sda_tolerance[i].dev_attr); 1160 } 1161 for (i = 0; i < ARRAY_SIZE(sda_temp); i++) 1162 device_remove_file(dev, &sda_temp[i].dev_attr); 1163 } 1164 1165 static struct i2c_driver w83627ehf_driver; 1166 1167 static void w83627ehf_init_client(struct i2c_client *client) 1168 { 1169 int i; 1170 u8 tmp; 1171 1172 /* Start monitoring is needed */ 1173 tmp = w83627ehf_read_value(client, W83627EHF_REG_CONFIG); 1174 if (!(tmp & 0x01)) 1175 w83627ehf_write_value(client, W83627EHF_REG_CONFIG, 1176 tmp | 0x01); 1177 1178 /* Enable temp2 and temp3 if needed */ 1179 for (i = 0; i < 2; i++) { 1180 tmp = w83627ehf_read_value(client, 1181 W83627EHF_REG_TEMP_CONFIG[i]); 1182 if (tmp & 0x01) 1183 w83627ehf_write_value(client, 1184 W83627EHF_REG_TEMP_CONFIG[i], 1185 tmp & 0xfe); 1186 } 1187 } 1188 1189 static int w83627ehf_detect(struct i2c_adapter *adapter) 1190 { 1191 struct i2c_client *client; 1192 struct w83627ehf_data *data; 1193 struct device *dev; 1194 u8 fan4pin, fan5pin; 1195 int i, err = 0; 1196 1197 if (!request_region(address + IOREGION_OFFSET, IOREGION_LENGTH, 1198 w83627ehf_driver.driver.name)) { 1199 err = -EBUSY; 1200 goto exit; 1201 } 1202 1203 if (!(data = kzalloc(sizeof(struct w83627ehf_data), GFP_KERNEL))) { 1204 err = -ENOMEM; 1205 goto exit_release; 1206 } 1207 1208 client = &data->client; 1209 i2c_set_clientdata(client, data); 1210 client->addr = address; 1211 mutex_init(&data->lock); 1212 client->adapter = adapter; 1213 client->driver = &w83627ehf_driver; 1214 client->flags = 0; 1215 dev = &client->dev; 1216 1217 if (w83627ehf_num_in == 9) 1218 strlcpy(client->name, "w83627dhg", I2C_NAME_SIZE); 1219 else /* just say ehf. 627EHG is 627EHF in lead-free packaging. */ 1220 strlcpy(client->name, "w83627ehf", I2C_NAME_SIZE); 1221 1222 data->valid = 0; 1223 mutex_init(&data->update_lock); 1224 1225 /* Tell the i2c layer a new client has arrived */ 1226 if ((err = i2c_attach_client(client))) 1227 goto exit_free; 1228 1229 /* Initialize the chip */ 1230 w83627ehf_init_client(client); 1231 1232 /* A few vars need to be filled upon startup */ 1233 for (i = 0; i < 5; i++) 1234 data->fan_min[i] = w83627ehf_read_value(client, 1235 W83627EHF_REG_FAN_MIN[i]); 1236 1237 /* fan4 and fan5 share some pins with the GPIO and serial flash */ 1238 1239 superio_enter(); 1240 fan5pin = superio_inb(0x24) & 0x2; 1241 fan4pin = superio_inb(0x29) & 0x6; 1242 superio_exit(); 1243 1244 /* It looks like fan4 and fan5 pins can be alternatively used 1245 as fan on/off switches, but fan5 control is write only :/ 1246 We assume that if the serial interface is disabled, designers 1247 connected fan5 as input unless they are emitting log 1, which 1248 is not the default. */ 1249 1250 data->has_fan = 0x07; /* fan1, fan2 and fan3 */ 1251 i = w83627ehf_read_value(client, W83627EHF_REG_FANDIV1); 1252 if ((i & (1 << 2)) && (!fan4pin)) 1253 data->has_fan |= (1 << 3); 1254 if (!(i & (1 << 1)) && (!fan5pin)) 1255 data->has_fan |= (1 << 4); 1256 1257 /* Register sysfs hooks */ 1258 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays); i++) 1259 if ((err = device_create_file(dev, 1260 &sda_sf3_arrays[i].dev_attr))) 1261 goto exit_remove; 1262 1263 /* if fan4 is enabled create the sf3 files for it */ 1264 if (data->has_fan & (1 << 3)) 1265 for (i = 0; i < ARRAY_SIZE(sda_sf3_arrays_fan4); i++) { 1266 if ((err = device_create_file(dev, 1267 &sda_sf3_arrays_fan4[i].dev_attr))) 1268 goto exit_remove; 1269 } 1270 1271 for (i = 0; i < w83627ehf_num_in; i++) 1272 if ((err = device_create_file(dev, &sda_in_input[i].dev_attr)) 1273 || (err = device_create_file(dev, 1274 &sda_in_alarm[i].dev_attr)) 1275 || (err = device_create_file(dev, 1276 &sda_in_min[i].dev_attr)) 1277 || (err = device_create_file(dev, 1278 &sda_in_max[i].dev_attr))) 1279 goto exit_remove; 1280 1281 for (i = 0; i < 5; i++) { 1282 if (data->has_fan & (1 << i)) { 1283 if ((err = device_create_file(dev, 1284 &sda_fan_input[i].dev_attr)) 1285 || (err = device_create_file(dev, 1286 &sda_fan_alarm[i].dev_attr)) 1287 || (err = device_create_file(dev, 1288 &sda_fan_div[i].dev_attr)) 1289 || (err = device_create_file(dev, 1290 &sda_fan_min[i].dev_attr))) 1291 goto exit_remove; 1292 if (i < 4 && /* w83627ehf only has 4 pwm */ 1293 ((err = device_create_file(dev, 1294 &sda_pwm[i].dev_attr)) 1295 || (err = device_create_file(dev, 1296 &sda_pwm_mode[i].dev_attr)) 1297 || (err = device_create_file(dev, 1298 &sda_pwm_enable[i].dev_attr)) 1299 || (err = device_create_file(dev, 1300 &sda_target_temp[i].dev_attr)) 1301 || (err = device_create_file(dev, 1302 &sda_tolerance[i].dev_attr)))) 1303 goto exit_remove; 1304 } 1305 } 1306 1307 for (i = 0; i < ARRAY_SIZE(sda_temp); i++) 1308 if ((err = device_create_file(dev, &sda_temp[i].dev_attr))) 1309 goto exit_remove; 1310 1311 data->class_dev = hwmon_device_register(dev); 1312 if (IS_ERR(data->class_dev)) { 1313 err = PTR_ERR(data->class_dev); 1314 goto exit_remove; 1315 } 1316 1317 return 0; 1318 1319 exit_remove: 1320 w83627ehf_device_remove_files(dev); 1321 i2c_detach_client(client); 1322 exit_free: 1323 kfree(data); 1324 exit_release: 1325 release_region(address + IOREGION_OFFSET, IOREGION_LENGTH); 1326 exit: 1327 return err; 1328 } 1329 1330 static int w83627ehf_detach_client(struct i2c_client *client) 1331 { 1332 struct w83627ehf_data *data = i2c_get_clientdata(client); 1333 int err; 1334 1335 hwmon_device_unregister(data->class_dev); 1336 w83627ehf_device_remove_files(&client->dev); 1337 1338 if ((err = i2c_detach_client(client))) 1339 return err; 1340 release_region(client->addr + IOREGION_OFFSET, IOREGION_LENGTH); 1341 kfree(data); 1342 1343 return 0; 1344 } 1345 1346 static struct i2c_driver w83627ehf_driver = { 1347 .driver = { 1348 .owner = THIS_MODULE, 1349 .name = "w83627ehf", 1350 }, 1351 .attach_adapter = w83627ehf_detect, 1352 .detach_client = w83627ehf_detach_client, 1353 }; 1354 1355 static int __init w83627ehf_find(int sioaddr, unsigned short *addr) 1356 { 1357 u16 val; 1358 1359 REG = sioaddr; 1360 VAL = sioaddr + 1; 1361 superio_enter(); 1362 1363 val = (superio_inb(SIO_REG_DEVID) << 8) 1364 | superio_inb(SIO_REG_DEVID + 1); 1365 switch (val & SIO_ID_MASK) { 1366 case SIO_W83627DHG_ID: 1367 w83627ehf_num_in = 9; 1368 break; 1369 case SIO_W83627EHF_ID: 1370 case SIO_W83627EHG_ID: 1371 w83627ehf_num_in = 10; 1372 break; 1373 default: 1374 printk(KERN_WARNING "w83627ehf: unsupported chip ID: 0x%04x\n", 1375 val); 1376 superio_exit(); 1377 return -ENODEV; 1378 } 1379 1380 superio_select(W83627EHF_LD_HWM); 1381 val = (superio_inb(SIO_REG_ADDR) << 8) 1382 | superio_inb(SIO_REG_ADDR + 1); 1383 *addr = val & IOREGION_ALIGNMENT; 1384 if (*addr == 0) { 1385 superio_exit(); 1386 return -ENODEV; 1387 } 1388 1389 /* Activate logical device if needed */ 1390 val = superio_inb(SIO_REG_ENABLE); 1391 if (!(val & 0x01)) 1392 superio_outb(SIO_REG_ENABLE, val | 0x01); 1393 1394 superio_exit(); 1395 return 0; 1396 } 1397 1398 static int __init sensors_w83627ehf_init(void) 1399 { 1400 if (w83627ehf_find(0x2e, &address) 1401 && w83627ehf_find(0x4e, &address)) 1402 return -ENODEV; 1403 1404 return i2c_isa_add_driver(&w83627ehf_driver); 1405 } 1406 1407 static void __exit sensors_w83627ehf_exit(void) 1408 { 1409 i2c_isa_del_driver(&w83627ehf_driver); 1410 } 1411 1412 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>"); 1413 MODULE_DESCRIPTION("W83627EHF driver"); 1414 MODULE_LICENSE("GPL"); 1415 1416 module_init(sensors_w83627ehf_init); 1417 module_exit(sensors_w83627ehf_exit); 1418