adt7462.c (54264B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * A hwmon driver for the Analog Devices ADT7462 4 * Copyright (C) 2008 IBM 5 * 6 * Author: Darrick J. Wong <darrick.wong@oracle.com> 7 */ 8 9#include <linux/module.h> 10#include <linux/jiffies.h> 11#include <linux/i2c.h> 12#include <linux/hwmon.h> 13#include <linux/hwmon-sysfs.h> 14#include <linux/err.h> 15#include <linux/mutex.h> 16#include <linux/log2.h> 17#include <linux/slab.h> 18 19/* Addresses to scan */ 20static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END }; 21 22/* ADT7462 registers */ 23#define ADT7462_REG_DEVICE 0x3D 24#define ADT7462_REG_VENDOR 0x3E 25#define ADT7462_REG_REVISION 0x3F 26 27#define ADT7462_REG_MIN_TEMP_BASE_ADDR 0x44 28#define ADT7462_REG_MIN_TEMP_MAX_ADDR 0x47 29#define ADT7462_REG_MAX_TEMP_BASE_ADDR 0x48 30#define ADT7462_REG_MAX_TEMP_MAX_ADDR 0x4B 31#define ADT7462_REG_TEMP_BASE_ADDR 0x88 32#define ADT7462_REG_TEMP_MAX_ADDR 0x8F 33 34#define ADT7462_REG_FAN_BASE_ADDR 0x98 35#define ADT7462_REG_FAN_MAX_ADDR 0x9F 36#define ADT7462_REG_FAN2_BASE_ADDR 0xA2 37#define ADT7462_REG_FAN2_MAX_ADDR 0xA9 38#define ADT7462_REG_FAN_ENABLE 0x07 39#define ADT7462_REG_FAN_MIN_BASE_ADDR 0x78 40#define ADT7462_REG_FAN_MIN_MAX_ADDR 0x7F 41 42#define ADT7462_REG_CFG2 0x02 43#define ADT7462_FSPD_MASK 0x20 44 45#define ADT7462_REG_PWM_BASE_ADDR 0xAA 46#define ADT7462_REG_PWM_MAX_ADDR 0xAD 47#define ADT7462_REG_PWM_MIN_BASE_ADDR 0x28 48#define ADT7462_REG_PWM_MIN_MAX_ADDR 0x2B 49#define ADT7462_REG_PWM_MAX 0x2C 50#define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR 0x5C 51#define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR 0x5F 52#define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR 0x60 53#define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR 0x63 54#define ADT7462_PWM_HYST_MASK 0x0F 55#define ADT7462_PWM_RANGE_MASK 0xF0 56#define ADT7462_PWM_RANGE_SHIFT 4 57#define ADT7462_REG_PWM_CFG_BASE_ADDR 0x21 58#define ADT7462_REG_PWM_CFG_MAX_ADDR 0x24 59#define ADT7462_PWM_CHANNEL_MASK 0xE0 60#define ADT7462_PWM_CHANNEL_SHIFT 5 61 62#define ADT7462_REG_PIN_CFG_BASE_ADDR 0x10 63#define ADT7462_REG_PIN_CFG_MAX_ADDR 0x13 64#define ADT7462_PIN7_INPUT 0x01 /* cfg0 */ 65#define ADT7462_DIODE3_INPUT 0x20 66#define ADT7462_DIODE1_INPUT 0x40 67#define ADT7462_VID_INPUT 0x80 68#define ADT7462_PIN22_INPUT 0x04 /* cfg1 */ 69#define ADT7462_PIN21_INPUT 0x08 70#define ADT7462_PIN19_INPUT 0x10 71#define ADT7462_PIN15_INPUT 0x20 72#define ADT7462_PIN13_INPUT 0x40 73#define ADT7462_PIN8_INPUT 0x80 74#define ADT7462_PIN23_MASK 0x03 75#define ADT7462_PIN23_SHIFT 0 76#define ADT7462_PIN26_MASK 0x0C /* cfg2 */ 77#define ADT7462_PIN26_SHIFT 2 78#define ADT7462_PIN25_MASK 0x30 79#define ADT7462_PIN25_SHIFT 4 80#define ADT7462_PIN24_MASK 0xC0 81#define ADT7462_PIN24_SHIFT 6 82#define ADT7462_PIN26_VOLT_INPUT 0x08 83#define ADT7462_PIN25_VOLT_INPUT 0x20 84#define ADT7462_PIN28_SHIFT 4 /* cfg3 */ 85#define ADT7462_PIN28_VOLT 0x5 86 87#define ADT7462_REG_ALARM1 0xB8 88#define ADT7462_LT_ALARM 0x02 89#define ADT7462_R1T_ALARM 0x04 90#define ADT7462_R2T_ALARM 0x08 91#define ADT7462_R3T_ALARM 0x10 92#define ADT7462_REG_ALARM2 0xBB 93#define ADT7462_V0_ALARM 0x01 94#define ADT7462_V1_ALARM 0x02 95#define ADT7462_V2_ALARM 0x04 96#define ADT7462_V3_ALARM 0x08 97#define ADT7462_V4_ALARM 0x10 98#define ADT7462_V5_ALARM 0x20 99#define ADT7462_V6_ALARM 0x40 100#define ADT7462_V7_ALARM 0x80 101#define ADT7462_REG_ALARM3 0xBC 102#define ADT7462_V8_ALARM 0x08 103#define ADT7462_V9_ALARM 0x10 104#define ADT7462_V10_ALARM 0x20 105#define ADT7462_V11_ALARM 0x40 106#define ADT7462_V12_ALARM 0x80 107#define ADT7462_REG_ALARM4 0xBD 108#define ADT7462_F0_ALARM 0x01 109#define ADT7462_F1_ALARM 0x02 110#define ADT7462_F2_ALARM 0x04 111#define ADT7462_F3_ALARM 0x08 112#define ADT7462_F4_ALARM 0x10 113#define ADT7462_F5_ALARM 0x20 114#define ADT7462_F6_ALARM 0x40 115#define ADT7462_F7_ALARM 0x80 116#define ADT7462_ALARM1 0x0000 117#define ADT7462_ALARM2 0x0100 118#define ADT7462_ALARM3 0x0200 119#define ADT7462_ALARM4 0x0300 120#define ADT7462_ALARM_REG_SHIFT 8 121#define ADT7462_ALARM_FLAG_MASK 0x0F 122 123#define ADT7462_TEMP_COUNT 4 124#define ADT7462_TEMP_REG(x) (ADT7462_REG_TEMP_BASE_ADDR + ((x) * 2)) 125#define ADT7462_TEMP_MIN_REG(x) (ADT7462_REG_MIN_TEMP_BASE_ADDR + (x)) 126#define ADT7462_TEMP_MAX_REG(x) (ADT7462_REG_MAX_TEMP_BASE_ADDR + (x)) 127#define TEMP_FRAC_OFFSET 6 128 129#define ADT7462_FAN_COUNT 8 130#define ADT7462_REG_FAN_MIN(x) (ADT7462_REG_FAN_MIN_BASE_ADDR + (x)) 131 132#define ADT7462_PWM_COUNT 4 133#define ADT7462_REG_PWM(x) (ADT7462_REG_PWM_BASE_ADDR + (x)) 134#define ADT7462_REG_PWM_MIN(x) (ADT7462_REG_PWM_MIN_BASE_ADDR + (x)) 135#define ADT7462_REG_PWM_TMIN(x) \ 136 (ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x)) 137#define ADT7462_REG_PWM_TRANGE(x) \ 138 (ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x)) 139 140#define ADT7462_PIN_CFG_REG_COUNT 4 141#define ADT7462_REG_PIN_CFG(x) (ADT7462_REG_PIN_CFG_BASE_ADDR + (x)) 142#define ADT7462_REG_PWM_CFG(x) (ADT7462_REG_PWM_CFG_BASE_ADDR + (x)) 143 144#define ADT7462_ALARM_REG_COUNT 4 145 146/* 147 * The chip can measure 13 different voltage sources: 148 * 149 * 1. +12V1 (pin 7) 150 * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23) 151 * 3. +12V3 (pin 22) 152 * 4. +5V (pin 21) 153 * 5. +1.25V/+0.9V (pin 19) 154 * 6. +2.5V/+1.8V (pin 15) 155 * 7. +3.3v (pin 13) 156 * 8. +12V2 (pin 8) 157 * 9. Vbatt/FSB_Vtt (pin 26) 158 * A. +3.3V/+1.2V1 (pin 25) 159 * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24) 160 * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V) 161 * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V) 162 * 163 * Each of these 13 has a factor to convert raw to voltage. Even better, 164 * the pins can be connected to other sensors (tach/gpio/hot/etc), which 165 * makes the bookkeeping tricky. 166 * 167 * Some, but not all, of these voltages have low/high limits. 168 */ 169#define ADT7462_VOLT_COUNT 13 170 171#define ADT7462_VENDOR 0x41 172#define ADT7462_DEVICE 0x62 173/* datasheet only mentions a revision 4 */ 174#define ADT7462_REVISION 0x04 175 176/* How often do we reread sensors values? (In jiffies) */ 177#define SENSOR_REFRESH_INTERVAL (2 * HZ) 178 179/* How often do we reread sensor limit values? (In jiffies) */ 180#define LIMIT_REFRESH_INTERVAL (60 * HZ) 181 182/* datasheet says to divide this number by the fan reading to get fan rpm */ 183#define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x)) 184#define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM 185#define FAN_PERIOD_INVALID 65535 186#define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID) 187 188#define MASK_AND_SHIFT(value, prefix) \ 189 (((value) & prefix##_MASK) >> prefix##_SHIFT) 190 191struct adt7462_data { 192 struct i2c_client *client; 193 struct mutex lock; 194 char sensors_valid; 195 char limits_valid; 196 unsigned long sensors_last_updated; /* In jiffies */ 197 unsigned long limits_last_updated; /* In jiffies */ 198 199 u8 temp[ADT7462_TEMP_COUNT]; 200 /* bits 6-7 are quarter pieces of temp */ 201 u8 temp_frac[ADT7462_TEMP_COUNT]; 202 u8 temp_min[ADT7462_TEMP_COUNT]; 203 u8 temp_max[ADT7462_TEMP_COUNT]; 204 u16 fan[ADT7462_FAN_COUNT]; 205 u8 fan_enabled; 206 u8 fan_min[ADT7462_FAN_COUNT]; 207 u8 cfg2; 208 u8 pwm[ADT7462_PWM_COUNT]; 209 u8 pin_cfg[ADT7462_PIN_CFG_REG_COUNT]; 210 u8 voltages[ADT7462_VOLT_COUNT]; 211 u8 volt_max[ADT7462_VOLT_COUNT]; 212 u8 volt_min[ADT7462_VOLT_COUNT]; 213 u8 pwm_min[ADT7462_PWM_COUNT]; 214 u8 pwm_tmin[ADT7462_PWM_COUNT]; 215 u8 pwm_trange[ADT7462_PWM_COUNT]; 216 u8 pwm_max; /* only one per chip */ 217 u8 pwm_cfg[ADT7462_PWM_COUNT]; 218 u8 alarms[ADT7462_ALARM_REG_COUNT]; 219}; 220 221/* 222 * 16-bit registers on the ADT7462 are low-byte first. The data sheet says 223 * that the low byte must be read before the high byte. 224 */ 225static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg) 226{ 227 u16 foo; 228 foo = i2c_smbus_read_byte_data(client, reg); 229 foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8); 230 return foo; 231} 232 233/* For some reason these registers are not contiguous. */ 234static int ADT7462_REG_FAN(int fan) 235{ 236 if (fan < 4) 237 return ADT7462_REG_FAN_BASE_ADDR + (2 * fan); 238 return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4)); 239} 240 241/* Voltage registers are scattered everywhere */ 242static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which) 243{ 244 switch (which) { 245 case 0: 246 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT)) 247 return 0x7C; 248 break; 249 case 1: 250 return 0x69; 251 case 2: 252 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) 253 return 0x7F; 254 break; 255 case 3: 256 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT)) 257 return 0x7E; 258 break; 259 case 4: 260 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) 261 return 0x4B; 262 break; 263 case 5: 264 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) 265 return 0x49; 266 break; 267 case 6: 268 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT)) 269 return 0x68; 270 break; 271 case 7: 272 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT)) 273 return 0x7D; 274 break; 275 case 8: 276 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT)) 277 return 0x6C; 278 break; 279 case 9: 280 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT)) 281 return 0x6B; 282 break; 283 case 10: 284 return 0x6A; 285 case 11: 286 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 287 ADT7462_PIN28_VOLT && 288 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 289 return 0x50; 290 break; 291 case 12: 292 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 293 ADT7462_PIN28_VOLT && 294 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 295 return 0x4C; 296 break; 297 } 298 return 0; 299} 300 301static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which) 302{ 303 switch (which) { 304 case 0: 305 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT)) 306 return 0x6D; 307 break; 308 case 1: 309 return 0x72; 310 case 2: 311 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) 312 return 0x6F; 313 break; 314 case 3: 315 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT)) 316 return 0x71; 317 break; 318 case 4: 319 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) 320 return 0x47; 321 break; 322 case 5: 323 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) 324 return 0x45; 325 break; 326 case 6: 327 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT)) 328 return 0x70; 329 break; 330 case 7: 331 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT)) 332 return 0x6E; 333 break; 334 case 8: 335 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT)) 336 return 0x75; 337 break; 338 case 9: 339 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT)) 340 return 0x74; 341 break; 342 case 10: 343 return 0x73; 344 case 11: 345 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 346 ADT7462_PIN28_VOLT && 347 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 348 return 0x76; 349 break; 350 case 12: 351 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 352 ADT7462_PIN28_VOLT && 353 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 354 return 0x77; 355 break; 356 } 357 return 0; 358} 359 360static int ADT7462_REG_VOLT(struct adt7462_data *data, int which) 361{ 362 switch (which) { 363 case 0: 364 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT)) 365 return 0xA3; 366 break; 367 case 1: 368 return 0x90; 369 case 2: 370 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) 371 return 0xA9; 372 break; 373 case 3: 374 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT)) 375 return 0xA7; 376 break; 377 case 4: 378 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) 379 return 0x8F; 380 break; 381 case 5: 382 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) 383 return 0x8B; 384 break; 385 case 6: 386 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT)) 387 return 0x96; 388 break; 389 case 7: 390 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT)) 391 return 0xA5; 392 break; 393 case 8: 394 if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT)) 395 return 0x93; 396 break; 397 case 9: 398 if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT)) 399 return 0x92; 400 break; 401 case 10: 402 return 0x91; 403 case 11: 404 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 405 ADT7462_PIN28_VOLT && 406 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 407 return 0x94; 408 break; 409 case 12: 410 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 411 ADT7462_PIN28_VOLT && 412 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 413 return 0x95; 414 break; 415 } 416 return 0; 417} 418 419/* Provide labels for sysfs */ 420static const char *voltage_label(struct adt7462_data *data, int which) 421{ 422 switch (which) { 423 case 0: 424 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT)) 425 return "+12V1"; 426 break; 427 case 1: 428 switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) { 429 case 0: 430 return "Vccp1"; 431 case 1: 432 return "+2.5V"; 433 case 2: 434 return "+1.8V"; 435 case 3: 436 return "+1.5V"; 437 } 438 fallthrough; 439 case 2: 440 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) 441 return "+12V3"; 442 break; 443 case 3: 444 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT)) 445 return "+5V"; 446 break; 447 case 4: 448 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) { 449 if (data->pin_cfg[1] & ADT7462_PIN19_INPUT) 450 return "+0.9V"; 451 return "+1.25V"; 452 } 453 break; 454 case 5: 455 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) { 456 if (data->pin_cfg[1] & ADT7462_PIN19_INPUT) 457 return "+1.8V"; 458 return "+2.5V"; 459 } 460 break; 461 case 6: 462 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT)) 463 return "+3.3V"; 464 break; 465 case 7: 466 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT)) 467 return "+12V2"; 468 break; 469 case 8: 470 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) { 471 case 0: 472 return "Vbatt"; 473 case 1: 474 return "FSB_Vtt"; 475 } 476 break; 477 case 9: 478 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) { 479 case 0: 480 return "+3.3V"; 481 case 1: 482 return "+1.2V1"; 483 } 484 break; 485 case 10: 486 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) { 487 case 0: 488 return "Vccp2"; 489 case 1: 490 return "+2.5V"; 491 case 2: 492 return "+1.8V"; 493 case 3: 494 return "+1.5"; 495 } 496 fallthrough; 497 case 11: 498 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 499 ADT7462_PIN28_VOLT && 500 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 501 return "+1.5V ICH"; 502 break; 503 case 12: 504 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 505 ADT7462_PIN28_VOLT && 506 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 507 return "+1.5V 3GPIO"; 508 break; 509 } 510 return "N/A"; 511} 512 513/* Multipliers are actually in uV, not mV. */ 514static int voltage_multiplier(struct adt7462_data *data, int which) 515{ 516 switch (which) { 517 case 0: 518 if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT)) 519 return 62500; 520 break; 521 case 1: 522 switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) { 523 case 0: 524 if (data->pin_cfg[0] & ADT7462_VID_INPUT) 525 return 12500; 526 return 6250; 527 case 1: 528 return 13000; 529 case 2: 530 return 9400; 531 case 3: 532 return 7800; 533 } 534 fallthrough; 535 case 2: 536 if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) 537 return 62500; 538 break; 539 case 3: 540 if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT)) 541 return 26000; 542 break; 543 case 4: 544 if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) { 545 if (data->pin_cfg[1] & ADT7462_PIN19_INPUT) 546 return 4690; 547 return 6500; 548 } 549 break; 550 case 5: 551 if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) { 552 if (data->pin_cfg[1] & ADT7462_PIN15_INPUT) 553 return 9400; 554 return 13000; 555 } 556 break; 557 case 6: 558 if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT)) 559 return 17200; 560 break; 561 case 7: 562 if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT)) 563 return 62500; 564 break; 565 case 8: 566 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) { 567 case 0: 568 return 15600; 569 case 1: 570 return 6250; 571 } 572 break; 573 case 9: 574 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) { 575 case 0: 576 return 17200; 577 case 1: 578 return 6250; 579 } 580 break; 581 case 10: 582 switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) { 583 case 0: 584 return 6250; 585 case 1: 586 return 13000; 587 case 2: 588 return 9400; 589 case 3: 590 return 7800; 591 } 592 fallthrough; 593 case 11: 594 case 12: 595 if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == 596 ADT7462_PIN28_VOLT && 597 !(data->pin_cfg[0] & ADT7462_VID_INPUT)) 598 return 7800; 599 } 600 return 0; 601} 602 603static int temp_enabled(struct adt7462_data *data, int which) 604{ 605 switch (which) { 606 case 0: 607 case 2: 608 return 1; 609 case 1: 610 if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT) 611 return 1; 612 break; 613 case 3: 614 if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT) 615 return 1; 616 break; 617 } 618 return 0; 619} 620 621static const char *temp_label(struct adt7462_data *data, int which) 622{ 623 switch (which) { 624 case 0: 625 return "local"; 626 case 1: 627 if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT) 628 return "remote1"; 629 break; 630 case 2: 631 return "remote2"; 632 case 3: 633 if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT) 634 return "remote3"; 635 break; 636 } 637 return "N/A"; 638} 639 640/* Map Trange register values to mC */ 641#define NUM_TRANGE_VALUES 16 642static const int trange_values[NUM_TRANGE_VALUES] = { 643 2000, 644 2500, 645 3300, 646 4000, 647 5000, 648 6700, 649 8000, 650 10000, 651 13300, 652 16000, 653 20000, 654 26700, 655 32000, 656 40000, 657 53300, 658 80000 659}; 660 661static int find_trange_value(int trange) 662{ 663 int i; 664 665 for (i = 0; i < NUM_TRANGE_VALUES; i++) 666 if (trange_values[i] == trange) 667 return i; 668 669 return -EINVAL; 670} 671 672static struct adt7462_data *adt7462_update_device(struct device *dev) 673{ 674 struct adt7462_data *data = dev_get_drvdata(dev); 675 struct i2c_client *client = data->client; 676 unsigned long local_jiffies = jiffies; 677 int i; 678 679 mutex_lock(&data->lock); 680 if (time_before(local_jiffies, data->sensors_last_updated + 681 SENSOR_REFRESH_INTERVAL) 682 && data->sensors_valid) 683 goto no_sensor_update; 684 685 for (i = 0; i < ADT7462_TEMP_COUNT; i++) { 686 /* 687 * Reading the fractional register locks the integral 688 * register until both have been read. 689 */ 690 data->temp_frac[i] = i2c_smbus_read_byte_data(client, 691 ADT7462_TEMP_REG(i)); 692 data->temp[i] = i2c_smbus_read_byte_data(client, 693 ADT7462_TEMP_REG(i) + 1); 694 } 695 696 for (i = 0; i < ADT7462_FAN_COUNT; i++) 697 data->fan[i] = adt7462_read_word_data(client, 698 ADT7462_REG_FAN(i)); 699 700 data->fan_enabled = i2c_smbus_read_byte_data(client, 701 ADT7462_REG_FAN_ENABLE); 702 703 for (i = 0; i < ADT7462_PWM_COUNT; i++) 704 data->pwm[i] = i2c_smbus_read_byte_data(client, 705 ADT7462_REG_PWM(i)); 706 707 for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++) 708 data->pin_cfg[i] = i2c_smbus_read_byte_data(client, 709 ADT7462_REG_PIN_CFG(i)); 710 711 for (i = 0; i < ADT7462_VOLT_COUNT; i++) { 712 int reg = ADT7462_REG_VOLT(data, i); 713 if (!reg) 714 data->voltages[i] = 0; 715 else 716 data->voltages[i] = i2c_smbus_read_byte_data(client, 717 reg); 718 } 719 720 data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1); 721 data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2); 722 data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3); 723 data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4); 724 725 data->sensors_last_updated = local_jiffies; 726 data->sensors_valid = 1; 727 728no_sensor_update: 729 if (time_before(local_jiffies, data->limits_last_updated + 730 LIMIT_REFRESH_INTERVAL) 731 && data->limits_valid) 732 goto out; 733 734 for (i = 0; i < ADT7462_TEMP_COUNT; i++) { 735 data->temp_min[i] = i2c_smbus_read_byte_data(client, 736 ADT7462_TEMP_MIN_REG(i)); 737 data->temp_max[i] = i2c_smbus_read_byte_data(client, 738 ADT7462_TEMP_MAX_REG(i)); 739 } 740 741 for (i = 0; i < ADT7462_FAN_COUNT; i++) 742 data->fan_min[i] = i2c_smbus_read_byte_data(client, 743 ADT7462_REG_FAN_MIN(i)); 744 745 for (i = 0; i < ADT7462_VOLT_COUNT; i++) { 746 int reg = ADT7462_REG_VOLT_MAX(data, i); 747 data->volt_max[i] = 748 (reg ? i2c_smbus_read_byte_data(client, reg) : 0); 749 750 reg = ADT7462_REG_VOLT_MIN(data, i); 751 data->volt_min[i] = 752 (reg ? i2c_smbus_read_byte_data(client, reg) : 0); 753 } 754 755 for (i = 0; i < ADT7462_PWM_COUNT; i++) { 756 data->pwm_min[i] = i2c_smbus_read_byte_data(client, 757 ADT7462_REG_PWM_MIN(i)); 758 data->pwm_tmin[i] = i2c_smbus_read_byte_data(client, 759 ADT7462_REG_PWM_TMIN(i)); 760 data->pwm_trange[i] = i2c_smbus_read_byte_data(client, 761 ADT7462_REG_PWM_TRANGE(i)); 762 data->pwm_cfg[i] = i2c_smbus_read_byte_data(client, 763 ADT7462_REG_PWM_CFG(i)); 764 } 765 766 data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX); 767 768 data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2); 769 770 data->limits_last_updated = local_jiffies; 771 data->limits_valid = 1; 772 773out: 774 mutex_unlock(&data->lock); 775 return data; 776} 777 778static ssize_t temp_min_show(struct device *dev, 779 struct device_attribute *devattr, char *buf) 780{ 781 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 782 struct adt7462_data *data = adt7462_update_device(dev); 783 784 if (!temp_enabled(data, attr->index)) 785 return sprintf(buf, "0\n"); 786 787 return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64)); 788} 789 790static ssize_t temp_min_store(struct device *dev, 791 struct device_attribute *devattr, 792 const char *buf, size_t count) 793{ 794 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 795 struct adt7462_data *data = dev_get_drvdata(dev); 796 struct i2c_client *client = data->client; 797 long temp; 798 799 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index)) 800 return -EINVAL; 801 802 temp = clamp_val(temp, -64000, 191000); 803 temp = DIV_ROUND_CLOSEST(temp, 1000) + 64; 804 805 mutex_lock(&data->lock); 806 data->temp_min[attr->index] = temp; 807 i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index), 808 temp); 809 mutex_unlock(&data->lock); 810 811 return count; 812} 813 814static ssize_t temp_max_show(struct device *dev, 815 struct device_attribute *devattr, char *buf) 816{ 817 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 818 struct adt7462_data *data = adt7462_update_device(dev); 819 820 if (!temp_enabled(data, attr->index)) 821 return sprintf(buf, "0\n"); 822 823 return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64)); 824} 825 826static ssize_t temp_max_store(struct device *dev, 827 struct device_attribute *devattr, 828 const char *buf, size_t count) 829{ 830 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 831 struct adt7462_data *data = dev_get_drvdata(dev); 832 struct i2c_client *client = data->client; 833 long temp; 834 835 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index)) 836 return -EINVAL; 837 838 temp = clamp_val(temp, -64000, 191000); 839 temp = DIV_ROUND_CLOSEST(temp, 1000) + 64; 840 841 mutex_lock(&data->lock); 842 data->temp_max[attr->index] = temp; 843 i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index), 844 temp); 845 mutex_unlock(&data->lock); 846 847 return count; 848} 849 850static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, 851 char *buf) 852{ 853 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 854 struct adt7462_data *data = adt7462_update_device(dev); 855 u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET; 856 857 if (!temp_enabled(data, attr->index)) 858 return sprintf(buf, "0\n"); 859 860 return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) + 861 250 * frac); 862} 863 864static ssize_t temp_label_show(struct device *dev, 865 struct device_attribute *devattr, char *buf) 866{ 867 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 868 struct adt7462_data *data = adt7462_update_device(dev); 869 870 return sprintf(buf, "%s\n", temp_label(data, attr->index)); 871} 872 873static ssize_t volt_max_show(struct device *dev, 874 struct device_attribute *devattr, char *buf) 875{ 876 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 877 struct adt7462_data *data = adt7462_update_device(dev); 878 int x = voltage_multiplier(data, attr->index); 879 880 x *= data->volt_max[attr->index]; 881 x /= 1000; /* convert from uV to mV */ 882 883 return sprintf(buf, "%d\n", x); 884} 885 886static ssize_t volt_max_store(struct device *dev, 887 struct device_attribute *devattr, 888 const char *buf, size_t count) 889{ 890 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 891 struct adt7462_data *data = dev_get_drvdata(dev); 892 struct i2c_client *client = data->client; 893 int x = voltage_multiplier(data, attr->index); 894 long temp; 895 896 if (kstrtol(buf, 10, &temp) || !x) 897 return -EINVAL; 898 899 temp = clamp_val(temp, 0, 255 * x / 1000); 900 temp *= 1000; /* convert mV to uV */ 901 temp = DIV_ROUND_CLOSEST(temp, x); 902 903 mutex_lock(&data->lock); 904 data->volt_max[attr->index] = temp; 905 i2c_smbus_write_byte_data(client, 906 ADT7462_REG_VOLT_MAX(data, attr->index), 907 temp); 908 mutex_unlock(&data->lock); 909 910 return count; 911} 912 913static ssize_t volt_min_show(struct device *dev, 914 struct device_attribute *devattr, char *buf) 915{ 916 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 917 struct adt7462_data *data = adt7462_update_device(dev); 918 int x = voltage_multiplier(data, attr->index); 919 920 x *= data->volt_min[attr->index]; 921 x /= 1000; /* convert from uV to mV */ 922 923 return sprintf(buf, "%d\n", x); 924} 925 926static ssize_t volt_min_store(struct device *dev, 927 struct device_attribute *devattr, 928 const char *buf, size_t count) 929{ 930 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 931 struct adt7462_data *data = dev_get_drvdata(dev); 932 struct i2c_client *client = data->client; 933 int x = voltage_multiplier(data, attr->index); 934 long temp; 935 936 if (kstrtol(buf, 10, &temp) || !x) 937 return -EINVAL; 938 939 temp = clamp_val(temp, 0, 255 * x / 1000); 940 temp *= 1000; /* convert mV to uV */ 941 temp = DIV_ROUND_CLOSEST(temp, x); 942 943 mutex_lock(&data->lock); 944 data->volt_min[attr->index] = temp; 945 i2c_smbus_write_byte_data(client, 946 ADT7462_REG_VOLT_MIN(data, attr->index), 947 temp); 948 mutex_unlock(&data->lock); 949 950 return count; 951} 952 953static ssize_t voltage_show(struct device *dev, 954 struct device_attribute *devattr, char *buf) 955{ 956 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 957 struct adt7462_data *data = adt7462_update_device(dev); 958 int x = voltage_multiplier(data, attr->index); 959 960 x *= data->voltages[attr->index]; 961 x /= 1000; /* convert from uV to mV */ 962 963 return sprintf(buf, "%d\n", x); 964} 965 966static ssize_t voltage_label_show(struct device *dev, 967 struct device_attribute *devattr, char *buf) 968{ 969 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 970 struct adt7462_data *data = adt7462_update_device(dev); 971 972 return sprintf(buf, "%s\n", voltage_label(data, attr->index)); 973} 974 975static ssize_t alarm_show(struct device *dev, 976 struct device_attribute *devattr, char *buf) 977{ 978 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 979 struct adt7462_data *data = adt7462_update_device(dev); 980 int reg = attr->index >> ADT7462_ALARM_REG_SHIFT; 981 int mask = attr->index & ADT7462_ALARM_FLAG_MASK; 982 983 if (data->alarms[reg] & mask) 984 return sprintf(buf, "1\n"); 985 else 986 return sprintf(buf, "0\n"); 987} 988 989static int fan_enabled(struct adt7462_data *data, int fan) 990{ 991 return data->fan_enabled & (1 << fan); 992} 993 994static ssize_t fan_min_show(struct device *dev, 995 struct device_attribute *devattr, char *buf) 996{ 997 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 998 struct adt7462_data *data = adt7462_update_device(dev); 999 u16 temp; 1000 1001 /* Only the MSB of the min fan period is stored... */ 1002 temp = data->fan_min[attr->index]; 1003 temp <<= 8; 1004 1005 if (!fan_enabled(data, attr->index) || 1006 !FAN_DATA_VALID(temp)) 1007 return sprintf(buf, "0\n"); 1008 1009 return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp)); 1010} 1011 1012static ssize_t fan_min_store(struct device *dev, 1013 struct device_attribute *devattr, 1014 const char *buf, size_t count) 1015{ 1016 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1017 struct adt7462_data *data = dev_get_drvdata(dev); 1018 struct i2c_client *client = data->client; 1019 long temp; 1020 1021 if (kstrtol(buf, 10, &temp) || !temp || 1022 !fan_enabled(data, attr->index)) 1023 return -EINVAL; 1024 1025 temp = FAN_RPM_TO_PERIOD(temp); 1026 temp >>= 8; 1027 temp = clamp_val(temp, 1, 255); 1028 1029 mutex_lock(&data->lock); 1030 data->fan_min[attr->index] = temp; 1031 i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index), 1032 temp); 1033 mutex_unlock(&data->lock); 1034 1035 return count; 1036} 1037 1038static ssize_t fan_show(struct device *dev, struct device_attribute *devattr, 1039 char *buf) 1040{ 1041 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1042 struct adt7462_data *data = adt7462_update_device(dev); 1043 1044 if (!fan_enabled(data, attr->index) || 1045 !FAN_DATA_VALID(data->fan[attr->index])) 1046 return sprintf(buf, "0\n"); 1047 1048 return sprintf(buf, "%d\n", 1049 FAN_PERIOD_TO_RPM(data->fan[attr->index])); 1050} 1051 1052static ssize_t force_pwm_max_show(struct device *dev, 1053 struct device_attribute *devattr, char *buf) 1054{ 1055 struct adt7462_data *data = adt7462_update_device(dev); 1056 return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0)); 1057} 1058 1059static ssize_t force_pwm_max_store(struct device *dev, 1060 struct device_attribute *devattr, 1061 const char *buf, size_t count) 1062{ 1063 struct adt7462_data *data = dev_get_drvdata(dev); 1064 struct i2c_client *client = data->client; 1065 long temp; 1066 u8 reg; 1067 1068 if (kstrtol(buf, 10, &temp)) 1069 return -EINVAL; 1070 1071 mutex_lock(&data->lock); 1072 reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2); 1073 if (temp) 1074 reg |= ADT7462_FSPD_MASK; 1075 else 1076 reg &= ~ADT7462_FSPD_MASK; 1077 data->cfg2 = reg; 1078 i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg); 1079 mutex_unlock(&data->lock); 1080 1081 return count; 1082} 1083 1084static ssize_t pwm_show(struct device *dev, struct device_attribute *devattr, 1085 char *buf) 1086{ 1087 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1088 struct adt7462_data *data = adt7462_update_device(dev); 1089 return sprintf(buf, "%d\n", data->pwm[attr->index]); 1090} 1091 1092static ssize_t pwm_store(struct device *dev, struct device_attribute *devattr, 1093 const char *buf, size_t count) 1094{ 1095 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1096 struct adt7462_data *data = dev_get_drvdata(dev); 1097 struct i2c_client *client = data->client; 1098 long temp; 1099 1100 if (kstrtol(buf, 10, &temp)) 1101 return -EINVAL; 1102 1103 temp = clamp_val(temp, 0, 255); 1104 1105 mutex_lock(&data->lock); 1106 data->pwm[attr->index] = temp; 1107 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp); 1108 mutex_unlock(&data->lock); 1109 1110 return count; 1111} 1112 1113static ssize_t pwm_max_show(struct device *dev, 1114 struct device_attribute *devattr, char *buf) 1115{ 1116 struct adt7462_data *data = adt7462_update_device(dev); 1117 return sprintf(buf, "%d\n", data->pwm_max); 1118} 1119 1120static ssize_t pwm_max_store(struct device *dev, 1121 struct device_attribute *devattr, 1122 const char *buf, size_t count) 1123{ 1124 struct adt7462_data *data = dev_get_drvdata(dev); 1125 struct i2c_client *client = data->client; 1126 long temp; 1127 1128 if (kstrtol(buf, 10, &temp)) 1129 return -EINVAL; 1130 1131 temp = clamp_val(temp, 0, 255); 1132 1133 mutex_lock(&data->lock); 1134 data->pwm_max = temp; 1135 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp); 1136 mutex_unlock(&data->lock); 1137 1138 return count; 1139} 1140 1141static ssize_t pwm_min_show(struct device *dev, 1142 struct device_attribute *devattr, char *buf) 1143{ 1144 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1145 struct adt7462_data *data = adt7462_update_device(dev); 1146 return sprintf(buf, "%d\n", data->pwm_min[attr->index]); 1147} 1148 1149static ssize_t pwm_min_store(struct device *dev, 1150 struct device_attribute *devattr, 1151 const char *buf, size_t count) 1152{ 1153 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1154 struct adt7462_data *data = dev_get_drvdata(dev); 1155 struct i2c_client *client = data->client; 1156 long temp; 1157 1158 if (kstrtol(buf, 10, &temp)) 1159 return -EINVAL; 1160 1161 temp = clamp_val(temp, 0, 255); 1162 1163 mutex_lock(&data->lock); 1164 data->pwm_min[attr->index] = temp; 1165 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index), 1166 temp); 1167 mutex_unlock(&data->lock); 1168 1169 return count; 1170} 1171 1172static ssize_t pwm_hyst_show(struct device *dev, 1173 struct device_attribute *devattr, char *buf) 1174{ 1175 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1176 struct adt7462_data *data = adt7462_update_device(dev); 1177 return sprintf(buf, "%d\n", 1000 * 1178 (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK)); 1179} 1180 1181static ssize_t pwm_hyst_store(struct device *dev, 1182 struct device_attribute *devattr, 1183 const char *buf, size_t count) 1184{ 1185 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1186 struct adt7462_data *data = dev_get_drvdata(dev); 1187 struct i2c_client *client = data->client; 1188 long temp; 1189 1190 if (kstrtol(buf, 10, &temp)) 1191 return -EINVAL; 1192 1193 temp = clamp_val(temp, 0, 15000); 1194 temp = DIV_ROUND_CLOSEST(temp, 1000); 1195 1196 /* package things up */ 1197 temp &= ADT7462_PWM_HYST_MASK; 1198 temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK; 1199 1200 mutex_lock(&data->lock); 1201 data->pwm_trange[attr->index] = temp; 1202 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index), 1203 temp); 1204 mutex_unlock(&data->lock); 1205 1206 return count; 1207} 1208 1209static ssize_t pwm_tmax_show(struct device *dev, 1210 struct device_attribute *devattr, char *buf) 1211{ 1212 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1213 struct adt7462_data *data = adt7462_update_device(dev); 1214 1215 /* tmax = tmin + trange */ 1216 int trange = trange_values[data->pwm_trange[attr->index] >> 1217 ADT7462_PWM_RANGE_SHIFT]; 1218 int tmin = (data->pwm_tmin[attr->index] - 64) * 1000; 1219 1220 return sprintf(buf, "%d\n", tmin + trange); 1221} 1222 1223static ssize_t pwm_tmax_store(struct device *dev, 1224 struct device_attribute *devattr, 1225 const char *buf, size_t count) 1226{ 1227 int temp; 1228 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1229 struct adt7462_data *data = dev_get_drvdata(dev); 1230 struct i2c_client *client = data->client; 1231 int tmin, trange_value; 1232 long trange; 1233 1234 if (kstrtol(buf, 10, &trange)) 1235 return -EINVAL; 1236 1237 /* trange = tmax - tmin */ 1238 tmin = (data->pwm_tmin[attr->index] - 64) * 1000; 1239 trange_value = find_trange_value(trange - tmin); 1240 if (trange_value < 0) 1241 return trange_value; 1242 1243 temp = trange_value << ADT7462_PWM_RANGE_SHIFT; 1244 temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK; 1245 1246 mutex_lock(&data->lock); 1247 data->pwm_trange[attr->index] = temp; 1248 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index), 1249 temp); 1250 mutex_unlock(&data->lock); 1251 1252 return count; 1253} 1254 1255static ssize_t pwm_tmin_show(struct device *dev, 1256 struct device_attribute *devattr, char *buf) 1257{ 1258 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1259 struct adt7462_data *data = adt7462_update_device(dev); 1260 return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64)); 1261} 1262 1263static ssize_t pwm_tmin_store(struct device *dev, 1264 struct device_attribute *devattr, 1265 const char *buf, size_t count) 1266{ 1267 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1268 struct adt7462_data *data = dev_get_drvdata(dev); 1269 struct i2c_client *client = data->client; 1270 long temp; 1271 1272 if (kstrtol(buf, 10, &temp)) 1273 return -EINVAL; 1274 1275 temp = clamp_val(temp, -64000, 191000); 1276 temp = DIV_ROUND_CLOSEST(temp, 1000) + 64; 1277 1278 mutex_lock(&data->lock); 1279 data->pwm_tmin[attr->index] = temp; 1280 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index), 1281 temp); 1282 mutex_unlock(&data->lock); 1283 1284 return count; 1285} 1286 1287static ssize_t pwm_auto_show(struct device *dev, 1288 struct device_attribute *devattr, char *buf) 1289{ 1290 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1291 struct adt7462_data *data = adt7462_update_device(dev); 1292 int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT; 1293 1294 switch (cfg) { 1295 case 4: /* off */ 1296 return sprintf(buf, "0\n"); 1297 case 7: /* manual */ 1298 return sprintf(buf, "1\n"); 1299 default: /* automatic */ 1300 return sprintf(buf, "2\n"); 1301 } 1302} 1303 1304static void set_pwm_channel(struct i2c_client *client, 1305 struct adt7462_data *data, 1306 int which, 1307 int value) 1308{ 1309 int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK; 1310 temp |= value << ADT7462_PWM_CHANNEL_SHIFT; 1311 1312 mutex_lock(&data->lock); 1313 data->pwm_cfg[which] = temp; 1314 i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp); 1315 mutex_unlock(&data->lock); 1316} 1317 1318static ssize_t pwm_auto_store(struct device *dev, 1319 struct device_attribute *devattr, 1320 const char *buf, size_t count) 1321{ 1322 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1323 struct adt7462_data *data = dev_get_drvdata(dev); 1324 struct i2c_client *client = data->client; 1325 long temp; 1326 1327 if (kstrtol(buf, 10, &temp)) 1328 return -EINVAL; 1329 1330 switch (temp) { 1331 case 0: /* off */ 1332 set_pwm_channel(client, data, attr->index, 4); 1333 return count; 1334 case 1: /* manual */ 1335 set_pwm_channel(client, data, attr->index, 7); 1336 return count; 1337 default: 1338 return -EINVAL; 1339 } 1340} 1341 1342static ssize_t pwm_auto_temp_show(struct device *dev, 1343 struct device_attribute *devattr, char *buf) 1344{ 1345 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1346 struct adt7462_data *data = adt7462_update_device(dev); 1347 int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT; 1348 1349 switch (channel) { 1350 case 0: /* temp[1234] only */ 1351 case 1: 1352 case 2: 1353 case 3: 1354 return sprintf(buf, "%d\n", (1 << channel)); 1355 case 5: /* temp1 & temp4 */ 1356 return sprintf(buf, "9\n"); 1357 case 6: 1358 return sprintf(buf, "15\n"); 1359 default: 1360 return sprintf(buf, "0\n"); 1361 } 1362} 1363 1364static int cvt_auto_temp(int input) 1365{ 1366 if (input == 0xF) 1367 return 6; 1368 if (input == 0x9) 1369 return 5; 1370 if (input < 1 || !is_power_of_2(input)) 1371 return -EINVAL; 1372 return ilog2(input); 1373} 1374 1375static ssize_t pwm_auto_temp_store(struct device *dev, 1376 struct device_attribute *devattr, 1377 const char *buf, size_t count) 1378{ 1379 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1380 struct adt7462_data *data = dev_get_drvdata(dev); 1381 struct i2c_client *client = data->client; 1382 long temp; 1383 1384 if (kstrtol(buf, 10, &temp)) 1385 return -EINVAL; 1386 1387 temp = cvt_auto_temp(temp); 1388 if (temp < 0) 1389 return temp; 1390 1391 set_pwm_channel(client, data, attr->index, temp); 1392 1393 return count; 1394} 1395 1396static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0); 1397static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1); 1398static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2); 1399static SENSOR_DEVICE_ATTR_RW(temp4_max, temp_max, 3); 1400 1401static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0); 1402static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1); 1403static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2); 1404static SENSOR_DEVICE_ATTR_RW(temp4_min, temp_min, 3); 1405 1406static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0); 1407static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1); 1408static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2); 1409static SENSOR_DEVICE_ATTR_RO(temp4_input, temp, 3); 1410 1411static SENSOR_DEVICE_ATTR_RO(temp1_label, temp_label, 0); 1412static SENSOR_DEVICE_ATTR_RO(temp2_label, temp_label, 1); 1413static SENSOR_DEVICE_ATTR_RO(temp3_label, temp_label, 2); 1414static SENSOR_DEVICE_ATTR_RO(temp4_label, temp_label, 3); 1415 1416static SENSOR_DEVICE_ATTR_RO(temp1_alarm, alarm, 1417 ADT7462_ALARM1 | ADT7462_LT_ALARM); 1418static SENSOR_DEVICE_ATTR_RO(temp2_alarm, alarm, 1419 ADT7462_ALARM1 | ADT7462_R1T_ALARM); 1420static SENSOR_DEVICE_ATTR_RO(temp3_alarm, alarm, 1421 ADT7462_ALARM1 | ADT7462_R2T_ALARM); 1422static SENSOR_DEVICE_ATTR_RO(temp4_alarm, alarm, 1423 ADT7462_ALARM1 | ADT7462_R3T_ALARM); 1424 1425static SENSOR_DEVICE_ATTR_RW(in1_max, volt_max, 0); 1426static SENSOR_DEVICE_ATTR_RW(in2_max, volt_max, 1); 1427static SENSOR_DEVICE_ATTR_RW(in3_max, volt_max, 2); 1428static SENSOR_DEVICE_ATTR_RW(in4_max, volt_max, 3); 1429static SENSOR_DEVICE_ATTR_RW(in5_max, volt_max, 4); 1430static SENSOR_DEVICE_ATTR_RW(in6_max, volt_max, 5); 1431static SENSOR_DEVICE_ATTR_RW(in7_max, volt_max, 6); 1432static SENSOR_DEVICE_ATTR_RW(in8_max, volt_max, 7); 1433static SENSOR_DEVICE_ATTR_RW(in9_max, volt_max, 8); 1434static SENSOR_DEVICE_ATTR_RW(in10_max, volt_max, 9); 1435static SENSOR_DEVICE_ATTR_RW(in11_max, volt_max, 10); 1436static SENSOR_DEVICE_ATTR_RW(in12_max, volt_max, 11); 1437static SENSOR_DEVICE_ATTR_RW(in13_max, volt_max, 12); 1438 1439static SENSOR_DEVICE_ATTR_RW(in1_min, volt_min, 0); 1440static SENSOR_DEVICE_ATTR_RW(in2_min, volt_min, 1); 1441static SENSOR_DEVICE_ATTR_RW(in3_min, volt_min, 2); 1442static SENSOR_DEVICE_ATTR_RW(in4_min, volt_min, 3); 1443static SENSOR_DEVICE_ATTR_RW(in5_min, volt_min, 4); 1444static SENSOR_DEVICE_ATTR_RW(in6_min, volt_min, 5); 1445static SENSOR_DEVICE_ATTR_RW(in7_min, volt_min, 6); 1446static SENSOR_DEVICE_ATTR_RW(in8_min, volt_min, 7); 1447static SENSOR_DEVICE_ATTR_RW(in9_min, volt_min, 8); 1448static SENSOR_DEVICE_ATTR_RW(in10_min, volt_min, 9); 1449static SENSOR_DEVICE_ATTR_RW(in11_min, volt_min, 10); 1450static SENSOR_DEVICE_ATTR_RW(in12_min, volt_min, 11); 1451static SENSOR_DEVICE_ATTR_RW(in13_min, volt_min, 12); 1452 1453static SENSOR_DEVICE_ATTR_RO(in1_input, voltage, 0); 1454static SENSOR_DEVICE_ATTR_RO(in2_input, voltage, 1); 1455static SENSOR_DEVICE_ATTR_RO(in3_input, voltage, 2); 1456static SENSOR_DEVICE_ATTR_RO(in4_input, voltage, 3); 1457static SENSOR_DEVICE_ATTR_RO(in5_input, voltage, 4); 1458static SENSOR_DEVICE_ATTR_RO(in6_input, voltage, 5); 1459static SENSOR_DEVICE_ATTR_RO(in7_input, voltage, 6); 1460static SENSOR_DEVICE_ATTR_RO(in8_input, voltage, 7); 1461static SENSOR_DEVICE_ATTR_RO(in9_input, voltage, 8); 1462static SENSOR_DEVICE_ATTR_RO(in10_input, voltage, 9); 1463static SENSOR_DEVICE_ATTR_RO(in11_input, voltage, 10); 1464static SENSOR_DEVICE_ATTR_RO(in12_input, voltage, 11); 1465static SENSOR_DEVICE_ATTR_RO(in13_input, voltage, 12); 1466 1467static SENSOR_DEVICE_ATTR_RO(in1_label, voltage_label, 0); 1468static SENSOR_DEVICE_ATTR_RO(in2_label, voltage_label, 1); 1469static SENSOR_DEVICE_ATTR_RO(in3_label, voltage_label, 2); 1470static SENSOR_DEVICE_ATTR_RO(in4_label, voltage_label, 3); 1471static SENSOR_DEVICE_ATTR_RO(in5_label, voltage_label, 4); 1472static SENSOR_DEVICE_ATTR_RO(in6_label, voltage_label, 5); 1473static SENSOR_DEVICE_ATTR_RO(in7_label, voltage_label, 6); 1474static SENSOR_DEVICE_ATTR_RO(in8_label, voltage_label, 7); 1475static SENSOR_DEVICE_ATTR_RO(in9_label, voltage_label, 8); 1476static SENSOR_DEVICE_ATTR_RO(in10_label, voltage_label, 9); 1477static SENSOR_DEVICE_ATTR_RO(in11_label, voltage_label, 10); 1478static SENSOR_DEVICE_ATTR_RO(in12_label, voltage_label, 11); 1479static SENSOR_DEVICE_ATTR_RO(in13_label, voltage_label, 12); 1480 1481static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm, 1482 ADT7462_ALARM2 | ADT7462_V0_ALARM); 1483static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm, 1484 ADT7462_ALARM2 | ADT7462_V7_ALARM); 1485static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm, 1486 ADT7462_ALARM2 | ADT7462_V2_ALARM); 1487static SENSOR_DEVICE_ATTR_RO(in4_alarm, alarm, 1488 ADT7462_ALARM2 | ADT7462_V6_ALARM); 1489static SENSOR_DEVICE_ATTR_RO(in5_alarm, alarm, 1490 ADT7462_ALARM2 | ADT7462_V5_ALARM); 1491static SENSOR_DEVICE_ATTR_RO(in6_alarm, alarm, 1492 ADT7462_ALARM2 | ADT7462_V4_ALARM); 1493static SENSOR_DEVICE_ATTR_RO(in7_alarm, alarm, 1494 ADT7462_ALARM2 | ADT7462_V3_ALARM); 1495static SENSOR_DEVICE_ATTR_RO(in8_alarm, alarm, 1496 ADT7462_ALARM2 | ADT7462_V1_ALARM); 1497static SENSOR_DEVICE_ATTR_RO(in9_alarm, alarm, 1498 ADT7462_ALARM3 | ADT7462_V10_ALARM); 1499static SENSOR_DEVICE_ATTR_RO(in10_alarm, alarm, 1500 ADT7462_ALARM3 | ADT7462_V9_ALARM); 1501static SENSOR_DEVICE_ATTR_RO(in11_alarm, alarm, 1502 ADT7462_ALARM3 | ADT7462_V8_ALARM); 1503static SENSOR_DEVICE_ATTR_RO(in12_alarm, alarm, 1504 ADT7462_ALARM3 | ADT7462_V11_ALARM); 1505static SENSOR_DEVICE_ATTR_RO(in13_alarm, alarm, 1506 ADT7462_ALARM3 | ADT7462_V12_ALARM); 1507 1508static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0); 1509static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1); 1510static SENSOR_DEVICE_ATTR_RW(fan3_min, fan_min, 2); 1511static SENSOR_DEVICE_ATTR_RW(fan4_min, fan_min, 3); 1512static SENSOR_DEVICE_ATTR_RW(fan5_min, fan_min, 4); 1513static SENSOR_DEVICE_ATTR_RW(fan6_min, fan_min, 5); 1514static SENSOR_DEVICE_ATTR_RW(fan7_min, fan_min, 6); 1515static SENSOR_DEVICE_ATTR_RW(fan8_min, fan_min, 7); 1516 1517static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0); 1518static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1); 1519static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2); 1520static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3); 1521static SENSOR_DEVICE_ATTR_RO(fan5_input, fan, 4); 1522static SENSOR_DEVICE_ATTR_RO(fan6_input, fan, 5); 1523static SENSOR_DEVICE_ATTR_RO(fan7_input, fan, 6); 1524static SENSOR_DEVICE_ATTR_RO(fan8_input, fan, 7); 1525 1526static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 1527 ADT7462_ALARM4 | ADT7462_F0_ALARM); 1528static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 1529 ADT7462_ALARM4 | ADT7462_F1_ALARM); 1530static SENSOR_DEVICE_ATTR_RO(fan3_alarm, alarm, 1531 ADT7462_ALARM4 | ADT7462_F2_ALARM); 1532static SENSOR_DEVICE_ATTR_RO(fan4_alarm, alarm, 1533 ADT7462_ALARM4 | ADT7462_F3_ALARM); 1534static SENSOR_DEVICE_ATTR_RO(fan5_alarm, alarm, 1535 ADT7462_ALARM4 | ADT7462_F4_ALARM); 1536static SENSOR_DEVICE_ATTR_RO(fan6_alarm, alarm, 1537 ADT7462_ALARM4 | ADT7462_F5_ALARM); 1538static SENSOR_DEVICE_ATTR_RO(fan7_alarm, alarm, 1539 ADT7462_ALARM4 | ADT7462_F6_ALARM); 1540static SENSOR_DEVICE_ATTR_RO(fan8_alarm, alarm, 1541 ADT7462_ALARM4 | ADT7462_F7_ALARM); 1542 1543static SENSOR_DEVICE_ATTR_RW(force_pwm_max, force_pwm_max, 0); 1544 1545static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0); 1546static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1); 1547static SENSOR_DEVICE_ATTR_RW(pwm3, pwm, 2); 1548static SENSOR_DEVICE_ATTR_RW(pwm4, pwm, 3); 1549 1550static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point1_pwm, pwm_min, 0); 1551static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point1_pwm, pwm_min, 1); 1552static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point1_pwm, pwm_min, 2); 1553static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point1_pwm, pwm_min, 3); 1554 1555static SENSOR_DEVICE_ATTR_RW(pwm1_auto_point2_pwm, pwm_max, 0); 1556static SENSOR_DEVICE_ATTR_RW(pwm2_auto_point2_pwm, pwm_max, 1); 1557static SENSOR_DEVICE_ATTR_RW(pwm3_auto_point2_pwm, pwm_max, 2); 1558static SENSOR_DEVICE_ATTR_RW(pwm4_auto_point2_pwm, pwm_max, 3); 1559 1560static SENSOR_DEVICE_ATTR_RW(temp1_auto_point1_hyst, pwm_hyst, 0); 1561static SENSOR_DEVICE_ATTR_RW(temp2_auto_point1_hyst, pwm_hyst, 1); 1562static SENSOR_DEVICE_ATTR_RW(temp3_auto_point1_hyst, pwm_hyst, 2); 1563static SENSOR_DEVICE_ATTR_RW(temp4_auto_point1_hyst, pwm_hyst, 3); 1564 1565static SENSOR_DEVICE_ATTR_RW(temp1_auto_point2_hyst, pwm_hyst, 0); 1566static SENSOR_DEVICE_ATTR_RW(temp2_auto_point2_hyst, pwm_hyst, 1); 1567static SENSOR_DEVICE_ATTR_RW(temp3_auto_point2_hyst, pwm_hyst, 2); 1568static SENSOR_DEVICE_ATTR_RW(temp4_auto_point2_hyst, pwm_hyst, 3); 1569 1570static SENSOR_DEVICE_ATTR_RW(temp1_auto_point1_temp, pwm_tmin, 0); 1571static SENSOR_DEVICE_ATTR_RW(temp2_auto_point1_temp, pwm_tmin, 1); 1572static SENSOR_DEVICE_ATTR_RW(temp3_auto_point1_temp, pwm_tmin, 2); 1573static SENSOR_DEVICE_ATTR_RW(temp4_auto_point1_temp, pwm_tmin, 3); 1574 1575static SENSOR_DEVICE_ATTR_RW(temp1_auto_point2_temp, pwm_tmax, 0); 1576static SENSOR_DEVICE_ATTR_RW(temp2_auto_point2_temp, pwm_tmax, 1); 1577static SENSOR_DEVICE_ATTR_RW(temp3_auto_point2_temp, pwm_tmax, 2); 1578static SENSOR_DEVICE_ATTR_RW(temp4_auto_point2_temp, pwm_tmax, 3); 1579 1580static SENSOR_DEVICE_ATTR_RW(pwm1_enable, pwm_auto, 0); 1581static SENSOR_DEVICE_ATTR_RW(pwm2_enable, pwm_auto, 1); 1582static SENSOR_DEVICE_ATTR_RW(pwm3_enable, pwm_auto, 2); 1583static SENSOR_DEVICE_ATTR_RW(pwm4_enable, pwm_auto, 3); 1584 1585static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels_temp, pwm_auto_temp, 0); 1586static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels_temp, pwm_auto_temp, 1); 1587static SENSOR_DEVICE_ATTR_RW(pwm3_auto_channels_temp, pwm_auto_temp, 2); 1588static SENSOR_DEVICE_ATTR_RW(pwm4_auto_channels_temp, pwm_auto_temp, 3); 1589 1590static struct attribute *adt7462_attrs[] = { 1591 &sensor_dev_attr_temp1_max.dev_attr.attr, 1592 &sensor_dev_attr_temp2_max.dev_attr.attr, 1593 &sensor_dev_attr_temp3_max.dev_attr.attr, 1594 &sensor_dev_attr_temp4_max.dev_attr.attr, 1595 1596 &sensor_dev_attr_temp1_min.dev_attr.attr, 1597 &sensor_dev_attr_temp2_min.dev_attr.attr, 1598 &sensor_dev_attr_temp3_min.dev_attr.attr, 1599 &sensor_dev_attr_temp4_min.dev_attr.attr, 1600 1601 &sensor_dev_attr_temp1_input.dev_attr.attr, 1602 &sensor_dev_attr_temp2_input.dev_attr.attr, 1603 &sensor_dev_attr_temp3_input.dev_attr.attr, 1604 &sensor_dev_attr_temp4_input.dev_attr.attr, 1605 1606 &sensor_dev_attr_temp1_label.dev_attr.attr, 1607 &sensor_dev_attr_temp2_label.dev_attr.attr, 1608 &sensor_dev_attr_temp3_label.dev_attr.attr, 1609 &sensor_dev_attr_temp4_label.dev_attr.attr, 1610 1611 &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1612 &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1613 &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1614 &sensor_dev_attr_temp4_alarm.dev_attr.attr, 1615 1616 &sensor_dev_attr_in1_max.dev_attr.attr, 1617 &sensor_dev_attr_in2_max.dev_attr.attr, 1618 &sensor_dev_attr_in3_max.dev_attr.attr, 1619 &sensor_dev_attr_in4_max.dev_attr.attr, 1620 &sensor_dev_attr_in5_max.dev_attr.attr, 1621 &sensor_dev_attr_in6_max.dev_attr.attr, 1622 &sensor_dev_attr_in7_max.dev_attr.attr, 1623 &sensor_dev_attr_in8_max.dev_attr.attr, 1624 &sensor_dev_attr_in9_max.dev_attr.attr, 1625 &sensor_dev_attr_in10_max.dev_attr.attr, 1626 &sensor_dev_attr_in11_max.dev_attr.attr, 1627 &sensor_dev_attr_in12_max.dev_attr.attr, 1628 &sensor_dev_attr_in13_max.dev_attr.attr, 1629 1630 &sensor_dev_attr_in1_min.dev_attr.attr, 1631 &sensor_dev_attr_in2_min.dev_attr.attr, 1632 &sensor_dev_attr_in3_min.dev_attr.attr, 1633 &sensor_dev_attr_in4_min.dev_attr.attr, 1634 &sensor_dev_attr_in5_min.dev_attr.attr, 1635 &sensor_dev_attr_in6_min.dev_attr.attr, 1636 &sensor_dev_attr_in7_min.dev_attr.attr, 1637 &sensor_dev_attr_in8_min.dev_attr.attr, 1638 &sensor_dev_attr_in9_min.dev_attr.attr, 1639 &sensor_dev_attr_in10_min.dev_attr.attr, 1640 &sensor_dev_attr_in11_min.dev_attr.attr, 1641 &sensor_dev_attr_in12_min.dev_attr.attr, 1642 &sensor_dev_attr_in13_min.dev_attr.attr, 1643 1644 &sensor_dev_attr_in1_input.dev_attr.attr, 1645 &sensor_dev_attr_in2_input.dev_attr.attr, 1646 &sensor_dev_attr_in3_input.dev_attr.attr, 1647 &sensor_dev_attr_in4_input.dev_attr.attr, 1648 &sensor_dev_attr_in5_input.dev_attr.attr, 1649 &sensor_dev_attr_in6_input.dev_attr.attr, 1650 &sensor_dev_attr_in7_input.dev_attr.attr, 1651 &sensor_dev_attr_in8_input.dev_attr.attr, 1652 &sensor_dev_attr_in9_input.dev_attr.attr, 1653 &sensor_dev_attr_in10_input.dev_attr.attr, 1654 &sensor_dev_attr_in11_input.dev_attr.attr, 1655 &sensor_dev_attr_in12_input.dev_attr.attr, 1656 &sensor_dev_attr_in13_input.dev_attr.attr, 1657 1658 &sensor_dev_attr_in1_label.dev_attr.attr, 1659 &sensor_dev_attr_in2_label.dev_attr.attr, 1660 &sensor_dev_attr_in3_label.dev_attr.attr, 1661 &sensor_dev_attr_in4_label.dev_attr.attr, 1662 &sensor_dev_attr_in5_label.dev_attr.attr, 1663 &sensor_dev_attr_in6_label.dev_attr.attr, 1664 &sensor_dev_attr_in7_label.dev_attr.attr, 1665 &sensor_dev_attr_in8_label.dev_attr.attr, 1666 &sensor_dev_attr_in9_label.dev_attr.attr, 1667 &sensor_dev_attr_in10_label.dev_attr.attr, 1668 &sensor_dev_attr_in11_label.dev_attr.attr, 1669 &sensor_dev_attr_in12_label.dev_attr.attr, 1670 &sensor_dev_attr_in13_label.dev_attr.attr, 1671 1672 &sensor_dev_attr_in1_alarm.dev_attr.attr, 1673 &sensor_dev_attr_in2_alarm.dev_attr.attr, 1674 &sensor_dev_attr_in3_alarm.dev_attr.attr, 1675 &sensor_dev_attr_in4_alarm.dev_attr.attr, 1676 &sensor_dev_attr_in5_alarm.dev_attr.attr, 1677 &sensor_dev_attr_in6_alarm.dev_attr.attr, 1678 &sensor_dev_attr_in7_alarm.dev_attr.attr, 1679 &sensor_dev_attr_in8_alarm.dev_attr.attr, 1680 &sensor_dev_attr_in9_alarm.dev_attr.attr, 1681 &sensor_dev_attr_in10_alarm.dev_attr.attr, 1682 &sensor_dev_attr_in11_alarm.dev_attr.attr, 1683 &sensor_dev_attr_in12_alarm.dev_attr.attr, 1684 &sensor_dev_attr_in13_alarm.dev_attr.attr, 1685 1686 &sensor_dev_attr_fan1_min.dev_attr.attr, 1687 &sensor_dev_attr_fan2_min.dev_attr.attr, 1688 &sensor_dev_attr_fan3_min.dev_attr.attr, 1689 &sensor_dev_attr_fan4_min.dev_attr.attr, 1690 &sensor_dev_attr_fan5_min.dev_attr.attr, 1691 &sensor_dev_attr_fan6_min.dev_attr.attr, 1692 &sensor_dev_attr_fan7_min.dev_attr.attr, 1693 &sensor_dev_attr_fan8_min.dev_attr.attr, 1694 1695 &sensor_dev_attr_fan1_input.dev_attr.attr, 1696 &sensor_dev_attr_fan2_input.dev_attr.attr, 1697 &sensor_dev_attr_fan3_input.dev_attr.attr, 1698 &sensor_dev_attr_fan4_input.dev_attr.attr, 1699 &sensor_dev_attr_fan5_input.dev_attr.attr, 1700 &sensor_dev_attr_fan6_input.dev_attr.attr, 1701 &sensor_dev_attr_fan7_input.dev_attr.attr, 1702 &sensor_dev_attr_fan8_input.dev_attr.attr, 1703 1704 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1705 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1706 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1707 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1708 &sensor_dev_attr_fan5_alarm.dev_attr.attr, 1709 &sensor_dev_attr_fan6_alarm.dev_attr.attr, 1710 &sensor_dev_attr_fan7_alarm.dev_attr.attr, 1711 &sensor_dev_attr_fan8_alarm.dev_attr.attr, 1712 1713 &sensor_dev_attr_force_pwm_max.dev_attr.attr, 1714 &sensor_dev_attr_pwm1.dev_attr.attr, 1715 &sensor_dev_attr_pwm2.dev_attr.attr, 1716 &sensor_dev_attr_pwm3.dev_attr.attr, 1717 &sensor_dev_attr_pwm4.dev_attr.attr, 1718 1719 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr, 1720 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, 1721 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, 1722 &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr, 1723 1724 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr, 1725 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr, 1726 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, 1727 &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr, 1728 1729 &sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr, 1730 &sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr, 1731 &sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr, 1732 &sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr, 1733 1734 &sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr, 1735 &sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr, 1736 &sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr, 1737 &sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr, 1738 1739 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, 1740 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, 1741 &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, 1742 &sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr, 1743 1744 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, 1745 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, 1746 &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, 1747 &sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr, 1748 1749 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1750 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 1751 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 1752 &sensor_dev_attr_pwm4_enable.dev_attr.attr, 1753 1754 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr, 1755 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr, 1756 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr, 1757 &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr, 1758 NULL 1759}; 1760 1761ATTRIBUTE_GROUPS(adt7462); 1762 1763/* Return 0 if detection is successful, -ENODEV otherwise */ 1764static int adt7462_detect(struct i2c_client *client, 1765 struct i2c_board_info *info) 1766{ 1767 struct i2c_adapter *adapter = client->adapter; 1768 int vendor, device, revision; 1769 1770 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1771 return -ENODEV; 1772 1773 vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR); 1774 if (vendor != ADT7462_VENDOR) 1775 return -ENODEV; 1776 1777 device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE); 1778 if (device != ADT7462_DEVICE) 1779 return -ENODEV; 1780 1781 revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION); 1782 if (revision != ADT7462_REVISION) 1783 return -ENODEV; 1784 1785 strlcpy(info->type, "adt7462", I2C_NAME_SIZE); 1786 1787 return 0; 1788} 1789 1790static int adt7462_probe(struct i2c_client *client) 1791{ 1792 struct device *dev = &client->dev; 1793 struct adt7462_data *data; 1794 struct device *hwmon_dev; 1795 1796 data = devm_kzalloc(dev, sizeof(struct adt7462_data), GFP_KERNEL); 1797 if (!data) 1798 return -ENOMEM; 1799 1800 data->client = client; 1801 mutex_init(&data->lock); 1802 1803 dev_info(&client->dev, "%s chip found\n", client->name); 1804 1805 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 1806 data, 1807 adt7462_groups); 1808 return PTR_ERR_OR_ZERO(hwmon_dev); 1809} 1810 1811static const struct i2c_device_id adt7462_id[] = { 1812 { "adt7462", 0 }, 1813 { } 1814}; 1815MODULE_DEVICE_TABLE(i2c, adt7462_id); 1816 1817static struct i2c_driver adt7462_driver = { 1818 .class = I2C_CLASS_HWMON, 1819 .driver = { 1820 .name = "adt7462", 1821 }, 1822 .probe_new = adt7462_probe, 1823 .id_table = adt7462_id, 1824 .detect = adt7462_detect, 1825 .address_list = normal_i2c, 1826}; 1827 1828module_i2c_driver(adt7462_driver); 1829 1830MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>"); 1831MODULE_DESCRIPTION("ADT7462 driver"); 1832MODULE_LICENSE("GPL");