1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * adt7475 - Thermal sensor driver for the ADT7475 chip and derivatives 4 * Copyright (C) 2007-2008, Advanced Micro Devices, Inc. 5 * Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net> 6 * Copyright (C) 2008 Hans de Goede <hdegoede@redhat.com> 7 * Copyright (C) 2009 Jean Delvare <jdelvare@suse.de> 8 * 9 * Derived from the lm83 driver by Jean Delvare 10 */ 11 12 #include <linux/module.h> 13 #include <linux/init.h> 14 #include <linux/slab.h> 15 #include <linux/i2c.h> 16 #include <linux/hwmon.h> 17 #include <linux/hwmon-sysfs.h> 18 #include <linux/hwmon-vid.h> 19 #include <linux/err.h> 20 #include <linux/jiffies.h> 21 #include <linux/of.h> 22 #include <linux/property.h> 23 #include <linux/util_macros.h> 24 25 #include <dt-bindings/pwm/pwm.h> 26 27 /* Indexes for the sysfs hooks */ 28 enum adt_sysfs_id { 29 INPUT = 0, 30 MIN = 1, 31 MAX = 2, 32 CONTROL = 3, 33 OFFSET = 3, // Dup 34 AUTOMIN = 4, 35 THERM = 5, 36 HYSTERSIS = 6, 37 /* 38 * These are unique identifiers for the sysfs functions - unlike the 39 * numbers above, these are not also indexes into an array 40 */ 41 ALARM = 9, 42 FAULT = 10, 43 }; 44 45 46 /* 7475 Common Registers */ 47 48 #define REG_DEVREV2 0x12 /* ADT7490 only */ 49 #define REG_IMON 0x1D /* ADT7490 only */ 50 51 #define REG_VTT 0x1E /* ADT7490 only */ 52 #define REG_EXTEND3 0x1F /* ADT7490 only */ 53 54 #define REG_VOLTAGE_BASE 0x20 55 #define REG_TEMP_BASE 0x25 56 #define REG_TACH_BASE 0x28 57 #define REG_PWM_BASE 0x30 58 #define REG_PWM_MAX_BASE 0x38 59 60 #define REG_DEVID 0x3D 61 #define REG_VENDID 0x3E 62 #define REG_DEVID2 0x3F 63 64 #define REG_CONFIG1 0x40 65 66 #define REG_STATUS1 0x41 67 #define REG_STATUS2 0x42 68 69 #define REG_VID 0x43 /* ADT7476 only */ 70 71 #define REG_VOLTAGE_MIN_BASE 0x44 72 #define REG_VOLTAGE_MAX_BASE 0x45 73 74 #define REG_TEMP_MIN_BASE 0x4E 75 #define REG_TEMP_MAX_BASE 0x4F 76 77 #define REG_TACH_MIN_BASE 0x54 78 79 #define REG_PWM_CONFIG_BASE 0x5C 80 81 #define REG_TEMP_TRANGE_BASE 0x5F 82 83 #define REG_ENHANCE_ACOUSTICS1 0x62 84 #define REG_ENHANCE_ACOUSTICS2 0x63 85 86 #define REG_PWM_MIN_BASE 0x64 87 88 #define REG_TEMP_TMIN_BASE 0x67 89 #define REG_TEMP_THERM_BASE 0x6A 90 91 #define REG_REMOTE1_HYSTERSIS 0x6D 92 #define REG_REMOTE2_HYSTERSIS 0x6E 93 94 #define REG_TEMP_OFFSET_BASE 0x70 95 96 #define REG_CONFIG2 0x73 97 98 #define REG_EXTEND1 0x76 99 #define REG_EXTEND2 0x77 100 101 #define REG_CONFIG3 0x78 102 #define REG_CONFIG5 0x7C 103 #define REG_CONFIG4 0x7D 104 105 #define REG_STATUS4 0x81 /* ADT7490 only */ 106 107 #define REG_VTT_MIN 0x84 /* ADT7490 only */ 108 #define REG_VTT_MAX 0x86 /* ADT7490 only */ 109 110 #define REG_IMON_MIN 0x85 /* ADT7490 only */ 111 #define REG_IMON_MAX 0x87 /* ADT7490 only */ 112 113 #define VID_VIDSEL 0x80 /* ADT7476 only */ 114 115 #define CONFIG2_ATTN 0x20 116 117 #define CONFIG3_SMBALERT 0x01 118 #define CONFIG3_THERM 0x02 119 120 #define CONFIG4_PINFUNC 0x03 121 #define CONFIG4_THERM 0x01 122 #define CONFIG4_SMBALERT 0x02 123 #define CONFIG4_MAXDUTY 0x08 124 #define CONFIG4_ATTN_IN10 0x30 125 #define CONFIG4_ATTN_IN43 0xC0 126 127 #define CONFIG5_TWOSCOMP 0x01 128 #define CONFIG5_TEMPOFFSET 0x02 129 #define CONFIG5_VIDGPIO 0x10 /* ADT7476 only */ 130 131 /* ADT7475 Settings */ 132 133 #define ADT7475_VOLTAGE_COUNT 5 /* Not counting Vtt or Imon */ 134 #define ADT7475_TEMP_COUNT 3 135 #define ADT7475_TACH_COUNT 4 136 #define ADT7475_PWM_COUNT 3 137 138 /* Macro to read the registers */ 139 140 #define adt7475_read(reg) i2c_smbus_read_byte_data(client, (reg)) 141 142 /* Macros to easily index the registers */ 143 144 #define TACH_REG(idx) (REG_TACH_BASE + ((idx) * 2)) 145 #define TACH_MIN_REG(idx) (REG_TACH_MIN_BASE + ((idx) * 2)) 146 147 #define PWM_REG(idx) (REG_PWM_BASE + (idx)) 148 #define PWM_MAX_REG(idx) (REG_PWM_MAX_BASE + (idx)) 149 #define PWM_MIN_REG(idx) (REG_PWM_MIN_BASE + (idx)) 150 #define PWM_CONFIG_REG(idx) (REG_PWM_CONFIG_BASE + (idx)) 151 152 #define VOLTAGE_REG(idx) (REG_VOLTAGE_BASE + (idx)) 153 #define VOLTAGE_MIN_REG(idx) (REG_VOLTAGE_MIN_BASE + ((idx) * 2)) 154 #define VOLTAGE_MAX_REG(idx) (REG_VOLTAGE_MAX_BASE + ((idx) * 2)) 155 156 #define TEMP_REG(idx) (REG_TEMP_BASE + (idx)) 157 #define TEMP_MIN_REG(idx) (REG_TEMP_MIN_BASE + ((idx) * 2)) 158 #define TEMP_MAX_REG(idx) (REG_TEMP_MAX_BASE + ((idx) * 2)) 159 #define TEMP_TMIN_REG(idx) (REG_TEMP_TMIN_BASE + (idx)) 160 #define TEMP_THERM_REG(idx) (REG_TEMP_THERM_BASE + (idx)) 161 #define TEMP_OFFSET_REG(idx) (REG_TEMP_OFFSET_BASE + (idx)) 162 #define TEMP_TRANGE_REG(idx) (REG_TEMP_TRANGE_BASE + (idx)) 163 164 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 165 166 enum chips { adt7473, adt7475, adt7476, adt7490 }; 167 168 static const struct i2c_device_id adt7475_id[] = { 169 { .name = "adt7473", .driver_data = adt7473 }, 170 { .name = "adt7475", .driver_data = adt7475 }, 171 { .name = "adt7476", .driver_data = adt7476 }, 172 { .name = "adt7490", .driver_data = adt7490 }, 173 { } 174 }; 175 MODULE_DEVICE_TABLE(i2c, adt7475_id); 176 177 static const struct of_device_id adt7475_of_match[] = { 178 { 179 .compatible = "adi,adt7473", 180 .data = (void *)adt7473 181 }, 182 { 183 .compatible = "adi,adt7475", 184 .data = (void *)adt7475 185 }, 186 { 187 .compatible = "adi,adt7476", 188 .data = (void *)adt7476 189 }, 190 { 191 .compatible = "adi,adt7490", 192 .data = (void *)adt7490 193 }, 194 { }, 195 }; 196 MODULE_DEVICE_TABLE(of, adt7475_of_match); 197 198 struct adt7475_data { 199 struct i2c_client *client; 200 struct mutex lock; 201 202 unsigned long measure_updated; 203 bool valid; 204 205 u8 config2; 206 u8 config4; 207 u8 config5; 208 u8 has_voltage; 209 u8 bypass_attn; /* Bypass voltage attenuator */ 210 u8 has_pwm2:1; 211 u8 has_fan4:1; 212 u8 has_vid:1; 213 u32 alarms; 214 u16 voltage[3][7]; 215 u16 temp[7][3]; 216 u16 tach[2][4]; 217 u8 pwm[4][3]; 218 u8 range[3]; 219 u8 pwmctl[3]; 220 u8 pwmchan[3]; 221 u8 enh_acoustics[2]; 222 223 u8 vid; 224 u8 vrm; 225 const struct attribute_group *groups[10]; 226 }; 227 228 static struct i2c_driver adt7475_driver; 229 static struct adt7475_data *adt7475_update_device(struct device *dev); 230 static void adt7475_read_hystersis(struct i2c_client *client); 231 static void adt7475_read_pwm(struct i2c_client *client, int index); 232 233 /* Given a temp value, convert it to register value */ 234 235 static inline u16 temp2reg(struct adt7475_data *data, long val) 236 { 237 u16 ret; 238 239 if (!(data->config5 & CONFIG5_TWOSCOMP)) { 240 val = clamp_val(val, -64000, 191000); 241 ret = (val + 64500) / 1000; 242 } else { 243 val = clamp_val(val, -128000, 127000); 244 if (val < -500) 245 ret = (256500 + val) / 1000; 246 else 247 ret = (val + 500) / 1000; 248 } 249 250 return ret << 2; 251 } 252 253 /* Given a register value, convert it to a real temp value */ 254 255 static inline int reg2temp(struct adt7475_data *data, u16 reg) 256 { 257 if (data->config5 & CONFIG5_TWOSCOMP) { 258 if (reg >= 512) 259 return (reg - 1024) * 250; 260 else 261 return reg * 250; 262 } else 263 return (reg - 256) * 250; 264 } 265 266 static inline int tach2rpm(u16 tach) 267 { 268 if (tach == 0 || tach == 0xFFFF) 269 return 0; 270 271 return (90000 * 60) / tach; 272 } 273 274 static inline u16 rpm2tach(unsigned long rpm) 275 { 276 if (rpm == 0) 277 return 0; 278 279 return clamp_val((90000 * 60) / rpm, 1, 0xFFFF); 280 } 281 282 /* Scaling factors for voltage inputs, taken from the ADT7490 datasheet */ 283 static const int adt7473_in_scaling[ADT7475_VOLTAGE_COUNT + 2][2] = { 284 { 45, 94 }, /* +2.5V */ 285 { 175, 525 }, /* Vccp */ 286 { 68, 71 }, /* Vcc */ 287 { 93, 47 }, /* +5V */ 288 { 120, 20 }, /* +12V */ 289 { 45, 45 }, /* Vtt */ 290 { 45, 45 }, /* Imon */ 291 }; 292 293 static inline int reg2volt(int channel, u16 reg, u8 bypass_attn) 294 { 295 const int *r = adt7473_in_scaling[channel]; 296 297 if (bypass_attn & (1 << channel)) 298 return DIV_ROUND_CLOSEST(reg * 2250, 1024); 299 return DIV_ROUND_CLOSEST(reg * (r[0] + r[1]) * 2250, r[1] * 1024); 300 } 301 302 static inline u16 volt2reg(int channel, long volt, u8 bypass_attn) 303 { 304 const int *r = adt7473_in_scaling[channel]; 305 long reg; 306 307 if (bypass_attn & (1 << channel)) 308 reg = DIV_ROUND_CLOSEST(volt * 1024, 2250); 309 else 310 reg = DIV_ROUND_CLOSEST(volt * r[1] * 1024, 311 (r[0] + r[1]) * 2250); 312 return clamp_val(reg, 0, 1023) & (0xff << 2); 313 } 314 315 static int adt7475_read_word(struct i2c_client *client, int reg) 316 { 317 int val1, val2; 318 319 val1 = i2c_smbus_read_byte_data(client, reg); 320 if (val1 < 0) 321 return val1; 322 val2 = i2c_smbus_read_byte_data(client, reg + 1); 323 if (val2 < 0) 324 return val2; 325 326 return val1 | (val2 << 8); 327 } 328 329 static void adt7475_write_word(struct i2c_client *client, int reg, u16 val) 330 { 331 i2c_smbus_write_byte_data(client, reg + 1, val >> 8); 332 i2c_smbus_write_byte_data(client, reg, val & 0xFF); 333 } 334 335 static ssize_t voltage_show(struct device *dev, struct device_attribute *attr, 336 char *buf) 337 { 338 struct adt7475_data *data = adt7475_update_device(dev); 339 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 340 unsigned short val; 341 342 if (IS_ERR(data)) 343 return PTR_ERR(data); 344 345 switch (sattr->nr) { 346 case ALARM: 347 return sprintf(buf, "%d\n", 348 (data->alarms >> sattr->index) & 1); 349 default: 350 val = data->voltage[sattr->nr][sattr->index]; 351 return sprintf(buf, "%d\n", 352 reg2volt(sattr->index, val, data->bypass_attn)); 353 } 354 } 355 356 static ssize_t voltage_store(struct device *dev, 357 struct device_attribute *attr, const char *buf, 358 size_t count) 359 { 360 361 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 362 struct adt7475_data *data = dev_get_drvdata(dev); 363 struct i2c_client *client = data->client; 364 unsigned char reg; 365 long val; 366 367 if (kstrtol(buf, 10, &val)) 368 return -EINVAL; 369 370 mutex_lock(&data->lock); 371 372 data->voltage[sattr->nr][sattr->index] = 373 volt2reg(sattr->index, val, data->bypass_attn); 374 375 if (sattr->index < ADT7475_VOLTAGE_COUNT) { 376 if (sattr->nr == MIN) 377 reg = VOLTAGE_MIN_REG(sattr->index); 378 else 379 reg = VOLTAGE_MAX_REG(sattr->index); 380 } else if (sattr->index == 5) { 381 if (sattr->nr == MIN) 382 reg = REG_VTT_MIN; 383 else 384 reg = REG_VTT_MAX; 385 } else { 386 if (sattr->nr == MIN) 387 reg = REG_IMON_MIN; 388 else 389 reg = REG_IMON_MAX; 390 } 391 392 i2c_smbus_write_byte_data(client, reg, 393 data->voltage[sattr->nr][sattr->index] >> 2); 394 mutex_unlock(&data->lock); 395 396 return count; 397 } 398 399 static ssize_t temp_show(struct device *dev, struct device_attribute *attr, 400 char *buf) 401 { 402 struct adt7475_data *data = adt7475_update_device(dev); 403 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 404 int out; 405 406 if (IS_ERR(data)) 407 return PTR_ERR(data); 408 409 switch (sattr->nr) { 410 case HYSTERSIS: 411 mutex_lock(&data->lock); 412 out = data->temp[sattr->nr][sattr->index]; 413 if (sattr->index != 1) 414 out = (out >> 4) & 0xF; 415 else 416 out = (out & 0xF); 417 /* 418 * Show the value as an absolute number tied to 419 * THERM 420 */ 421 out = reg2temp(data, data->temp[THERM][sattr->index]) - 422 out * 1000; 423 mutex_unlock(&data->lock); 424 break; 425 426 case OFFSET: 427 /* 428 * Offset is always 2's complement, regardless of the 429 * setting in CONFIG5 430 */ 431 mutex_lock(&data->lock); 432 out = (s8)data->temp[sattr->nr][sattr->index]; 433 if (data->config5 & CONFIG5_TEMPOFFSET) 434 out *= 1000; 435 else 436 out *= 500; 437 mutex_unlock(&data->lock); 438 break; 439 440 case ALARM: 441 out = (data->alarms >> (sattr->index + 4)) & 1; 442 break; 443 444 case FAULT: 445 /* Note - only for remote1 and remote2 */ 446 out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000)); 447 break; 448 449 default: 450 /* All other temp values are in the configured format */ 451 out = reg2temp(data, data->temp[sattr->nr][sattr->index]); 452 } 453 454 return sprintf(buf, "%d\n", out); 455 } 456 457 static ssize_t temp_store(struct device *dev, struct device_attribute *attr, 458 const char *buf, size_t count) 459 { 460 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 461 struct adt7475_data *data = dev_get_drvdata(dev); 462 struct i2c_client *client = data->client; 463 unsigned char reg = 0; 464 u8 out; 465 int temp; 466 long val; 467 468 if (kstrtol(buf, 10, &val)) 469 return -EINVAL; 470 471 mutex_lock(&data->lock); 472 473 /* We need the config register in all cases for temp <-> reg conv. */ 474 data->config5 = adt7475_read(REG_CONFIG5); 475 476 switch (sattr->nr) { 477 case OFFSET: 478 if (data->config5 & CONFIG5_TEMPOFFSET) { 479 val = clamp_val(val, -63000, 127000); 480 out = data->temp[OFFSET][sattr->index] = val / 1000; 481 } else { 482 val = clamp_val(val, -63000, 64000); 483 out = data->temp[OFFSET][sattr->index] = val / 500; 484 } 485 break; 486 487 case HYSTERSIS: 488 /* 489 * The value will be given as an absolute value, turn it 490 * into an offset based on THERM 491 */ 492 493 /* Read fresh THERM and HYSTERSIS values from the chip */ 494 data->temp[THERM][sattr->index] = 495 adt7475_read(TEMP_THERM_REG(sattr->index)) << 2; 496 adt7475_read_hystersis(client); 497 498 temp = reg2temp(data, data->temp[THERM][sattr->index]); 499 val = clamp_val(val, temp - 15000, temp); 500 val = (temp - val) / 1000; 501 502 if (sattr->index != 1) { 503 data->temp[HYSTERSIS][sattr->index] &= 0x0F; 504 data->temp[HYSTERSIS][sattr->index] |= (val & 0xF) << 4; 505 } else { 506 data->temp[HYSTERSIS][sattr->index] &= 0xF0; 507 data->temp[HYSTERSIS][sattr->index] |= (val & 0xF); 508 } 509 510 out = data->temp[HYSTERSIS][sattr->index]; 511 break; 512 513 default: 514 data->temp[sattr->nr][sattr->index] = temp2reg(data, val); 515 516 /* 517 * We maintain an extra 2 digits of precision for simplicity 518 * - shift those back off before writing the value 519 */ 520 out = (u8) (data->temp[sattr->nr][sattr->index] >> 2); 521 } 522 523 switch (sattr->nr) { 524 case MIN: 525 reg = TEMP_MIN_REG(sattr->index); 526 break; 527 case MAX: 528 reg = TEMP_MAX_REG(sattr->index); 529 break; 530 case OFFSET: 531 reg = TEMP_OFFSET_REG(sattr->index); 532 break; 533 case AUTOMIN: 534 reg = TEMP_TMIN_REG(sattr->index); 535 break; 536 case THERM: 537 reg = TEMP_THERM_REG(sattr->index); 538 break; 539 case HYSTERSIS: 540 if (sattr->index != 2) 541 reg = REG_REMOTE1_HYSTERSIS; 542 else 543 reg = REG_REMOTE2_HYSTERSIS; 544 545 break; 546 } 547 548 i2c_smbus_write_byte_data(client, reg, out); 549 550 mutex_unlock(&data->lock); 551 return count; 552 } 553 554 /* Assuming CONFIG6[SLOW] is 0 */ 555 static const int ad7475_st_map[] = { 556 37500, 18800, 12500, 7500, 4700, 3100, 1600, 800, 557 }; 558 559 static ssize_t temp_st_show(struct device *dev, struct device_attribute *attr, 560 char *buf) 561 { 562 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 563 struct adt7475_data *data = dev_get_drvdata(dev); 564 long val; 565 566 switch (sattr->index) { 567 case 0: 568 val = data->enh_acoustics[0] & 0xf; 569 break; 570 case 1: 571 val = data->enh_acoustics[1] & 0xf; 572 break; 573 case 2: 574 default: 575 val = (data->enh_acoustics[1] >> 4) & 0xf; 576 break; 577 } 578 579 if (val & 0x8) 580 return sprintf(buf, "%d\n", ad7475_st_map[val & 0x7]); 581 else 582 return sprintf(buf, "0\n"); 583 } 584 585 static ssize_t temp_st_store(struct device *dev, 586 struct device_attribute *attr, const char *buf, 587 size_t count) 588 { 589 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 590 struct adt7475_data *data = dev_get_drvdata(dev); 591 struct i2c_client *client = data->client; 592 unsigned char reg; 593 int shift, idx; 594 ulong val; 595 596 if (kstrtoul(buf, 10, &val)) 597 return -EINVAL; 598 599 switch (sattr->index) { 600 case 0: 601 reg = REG_ENHANCE_ACOUSTICS1; 602 shift = 0; 603 idx = 0; 604 break; 605 case 1: 606 reg = REG_ENHANCE_ACOUSTICS2; 607 shift = 0; 608 idx = 1; 609 break; 610 case 2: 611 default: 612 reg = REG_ENHANCE_ACOUSTICS2; 613 shift = 4; 614 idx = 1; 615 break; 616 } 617 618 if (val > 0) { 619 val = find_closest_descending(val, ad7475_st_map, 620 ARRAY_SIZE(ad7475_st_map)); 621 val |= 0x8; 622 } 623 624 mutex_lock(&data->lock); 625 626 data->enh_acoustics[idx] &= ~(0xf << shift); 627 data->enh_acoustics[idx] |= (val << shift); 628 629 i2c_smbus_write_byte_data(client, reg, data->enh_acoustics[idx]); 630 631 mutex_unlock(&data->lock); 632 633 return count; 634 } 635 636 /* 637 * Table of autorange values - the user will write the value in millidegrees, 638 * and we'll convert it 639 */ 640 static const int autorange_table[] = { 641 2000, 2500, 3330, 4000, 5000, 6670, 8000, 642 10000, 13330, 16000, 20000, 26670, 32000, 40000, 643 53330, 80000 644 }; 645 646 static ssize_t point2_show(struct device *dev, struct device_attribute *attr, 647 char *buf) 648 { 649 struct adt7475_data *data = adt7475_update_device(dev); 650 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 651 int out, val; 652 653 if (IS_ERR(data)) 654 return PTR_ERR(data); 655 656 mutex_lock(&data->lock); 657 out = (data->range[sattr->index] >> 4) & 0x0F; 658 val = reg2temp(data, data->temp[AUTOMIN][sattr->index]); 659 mutex_unlock(&data->lock); 660 661 return sprintf(buf, "%d\n", val + autorange_table[out]); 662 } 663 664 static ssize_t point2_store(struct device *dev, struct device_attribute *attr, 665 const char *buf, size_t count) 666 { 667 struct adt7475_data *data = dev_get_drvdata(dev); 668 struct i2c_client *client = data->client; 669 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 670 int temp; 671 long val; 672 673 if (kstrtol(buf, 10, &val)) 674 return -EINVAL; 675 676 mutex_lock(&data->lock); 677 678 /* Get a fresh copy of the needed registers */ 679 data->config5 = adt7475_read(REG_CONFIG5); 680 data->temp[AUTOMIN][sattr->index] = 681 adt7475_read(TEMP_TMIN_REG(sattr->index)) << 2; 682 data->range[sattr->index] = 683 adt7475_read(TEMP_TRANGE_REG(sattr->index)); 684 685 /* 686 * The user will write an absolute value, so subtract the start point 687 * to figure the range 688 */ 689 temp = reg2temp(data, data->temp[AUTOMIN][sattr->index]); 690 val = clamp_val(val, temp + autorange_table[0], 691 temp + autorange_table[ARRAY_SIZE(autorange_table) - 1]); 692 val -= temp; 693 694 /* Find the nearest table entry to what the user wrote */ 695 val = find_closest(val, autorange_table, ARRAY_SIZE(autorange_table)); 696 697 data->range[sattr->index] &= ~0xF0; 698 data->range[sattr->index] |= val << 4; 699 700 i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index), 701 data->range[sattr->index]); 702 703 mutex_unlock(&data->lock); 704 return count; 705 } 706 707 static ssize_t tach_show(struct device *dev, struct device_attribute *attr, 708 char *buf) 709 { 710 struct adt7475_data *data = adt7475_update_device(dev); 711 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 712 int out; 713 714 if (IS_ERR(data)) 715 return PTR_ERR(data); 716 717 if (sattr->nr == ALARM) 718 out = (data->alarms >> (sattr->index + 10)) & 1; 719 else 720 out = tach2rpm(data->tach[sattr->nr][sattr->index]); 721 722 return sprintf(buf, "%d\n", out); 723 } 724 725 static ssize_t tach_store(struct device *dev, struct device_attribute *attr, 726 const char *buf, size_t count) 727 { 728 729 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 730 struct adt7475_data *data = dev_get_drvdata(dev); 731 struct i2c_client *client = data->client; 732 unsigned long val; 733 734 if (kstrtoul(buf, 10, &val)) 735 return -EINVAL; 736 737 mutex_lock(&data->lock); 738 739 data->tach[MIN][sattr->index] = rpm2tach(val); 740 741 adt7475_write_word(client, TACH_MIN_REG(sattr->index), 742 data->tach[MIN][sattr->index]); 743 744 mutex_unlock(&data->lock); 745 return count; 746 } 747 748 static ssize_t pwm_show(struct device *dev, struct device_attribute *attr, 749 char *buf) 750 { 751 struct adt7475_data *data = adt7475_update_device(dev); 752 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 753 754 if (IS_ERR(data)) 755 return PTR_ERR(data); 756 757 return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]); 758 } 759 760 static ssize_t pwmchan_show(struct device *dev, struct device_attribute *attr, 761 char *buf) 762 { 763 struct adt7475_data *data = adt7475_update_device(dev); 764 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 765 766 if (IS_ERR(data)) 767 return PTR_ERR(data); 768 769 return sprintf(buf, "%d\n", data->pwmchan[sattr->index]); 770 } 771 772 static ssize_t pwmctrl_show(struct device *dev, struct device_attribute *attr, 773 char *buf) 774 { 775 struct adt7475_data *data = adt7475_update_device(dev); 776 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 777 778 if (IS_ERR(data)) 779 return PTR_ERR(data); 780 781 return sprintf(buf, "%d\n", data->pwmctl[sattr->index]); 782 } 783 784 static ssize_t pwm_store(struct device *dev, struct device_attribute *attr, 785 const char *buf, size_t count) 786 { 787 788 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 789 struct adt7475_data *data = dev_get_drvdata(dev); 790 struct i2c_client *client = data->client; 791 unsigned char reg = 0; 792 long val; 793 794 if (kstrtol(buf, 10, &val)) 795 return -EINVAL; 796 797 mutex_lock(&data->lock); 798 799 switch (sattr->nr) { 800 case INPUT: 801 /* Get a fresh value for CONTROL */ 802 data->pwm[CONTROL][sattr->index] = 803 adt7475_read(PWM_CONFIG_REG(sattr->index)); 804 805 /* 806 * If we are not in manual mode, then we shouldn't allow 807 * the user to set the pwm speed 808 */ 809 if (((data->pwm[CONTROL][sattr->index] >> 5) & 7) != 7) { 810 mutex_unlock(&data->lock); 811 return count; 812 } 813 814 reg = PWM_REG(sattr->index); 815 break; 816 817 case MIN: 818 reg = PWM_MIN_REG(sattr->index); 819 break; 820 821 case MAX: 822 reg = PWM_MAX_REG(sattr->index); 823 break; 824 } 825 826 data->pwm[sattr->nr][sattr->index] = clamp_val(val, 0, 0xFF); 827 i2c_smbus_write_byte_data(client, reg, 828 data->pwm[sattr->nr][sattr->index]); 829 mutex_unlock(&data->lock); 830 831 return count; 832 } 833 834 static ssize_t stall_disable_show(struct device *dev, 835 struct device_attribute *attr, char *buf) 836 { 837 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 838 struct adt7475_data *data = dev_get_drvdata(dev); 839 840 u8 mask = BIT(5 + sattr->index); 841 842 return sprintf(buf, "%d\n", !!(data->enh_acoustics[0] & mask)); 843 } 844 845 static ssize_t stall_disable_store(struct device *dev, 846 struct device_attribute *attr, 847 const char *buf, size_t count) 848 { 849 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 850 struct adt7475_data *data = dev_get_drvdata(dev); 851 struct i2c_client *client = data->client; 852 long val; 853 u8 mask = BIT(5 + sattr->index); 854 855 if (kstrtol(buf, 10, &val)) 856 return -EINVAL; 857 858 mutex_lock(&data->lock); 859 860 data->enh_acoustics[0] &= ~mask; 861 if (val) 862 data->enh_acoustics[0] |= mask; 863 864 i2c_smbus_write_byte_data(client, REG_ENHANCE_ACOUSTICS1, 865 data->enh_acoustics[0]); 866 867 mutex_unlock(&data->lock); 868 869 return count; 870 } 871 872 /* Called by set_pwmctrl and set_pwmchan */ 873 874 static int hw_set_pwm(struct i2c_client *client, int index, 875 unsigned int pwmctl, unsigned int pwmchan) 876 { 877 struct adt7475_data *data = i2c_get_clientdata(client); 878 long val = 0; 879 880 switch (pwmctl) { 881 case 0: 882 val = 0x03; /* Run at full speed */ 883 break; 884 case 1: 885 val = 0x07; /* Manual mode */ 886 break; 887 case 2: 888 switch (pwmchan) { 889 case 1: 890 /* Remote1 controls PWM */ 891 val = 0x00; 892 break; 893 case 2: 894 /* local controls PWM */ 895 val = 0x01; 896 break; 897 case 4: 898 /* remote2 controls PWM */ 899 val = 0x02; 900 break; 901 case 6: 902 /* local/remote2 control PWM */ 903 val = 0x05; 904 break; 905 case 7: 906 /* All three control PWM */ 907 val = 0x06; 908 break; 909 default: 910 return -EINVAL; 911 } 912 break; 913 default: 914 return -EINVAL; 915 } 916 917 data->pwmctl[index] = pwmctl; 918 data->pwmchan[index] = pwmchan; 919 920 data->pwm[CONTROL][index] &= ~0xE0; 921 data->pwm[CONTROL][index] |= (val & 7) << 5; 922 923 i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index), 924 data->pwm[CONTROL][index]); 925 926 return 0; 927 } 928 929 static ssize_t pwmchan_store(struct device *dev, 930 struct device_attribute *attr, const char *buf, 931 size_t count) 932 { 933 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 934 struct adt7475_data *data = dev_get_drvdata(dev); 935 struct i2c_client *client = data->client; 936 int r; 937 long val; 938 939 if (kstrtol(buf, 10, &val)) 940 return -EINVAL; 941 942 mutex_lock(&data->lock); 943 /* Read Modify Write PWM values */ 944 adt7475_read_pwm(client, sattr->index); 945 r = hw_set_pwm(client, sattr->index, data->pwmctl[sattr->index], val); 946 if (r) 947 count = r; 948 mutex_unlock(&data->lock); 949 950 return count; 951 } 952 953 static ssize_t pwmctrl_store(struct device *dev, 954 struct device_attribute *attr, const char *buf, 955 size_t count) 956 { 957 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 958 struct adt7475_data *data = dev_get_drvdata(dev); 959 struct i2c_client *client = data->client; 960 int r; 961 long val; 962 963 if (kstrtol(buf, 10, &val)) 964 return -EINVAL; 965 966 mutex_lock(&data->lock); 967 /* Read Modify Write PWM values */ 968 adt7475_read_pwm(client, sattr->index); 969 r = hw_set_pwm(client, sattr->index, val, data->pwmchan[sattr->index]); 970 if (r) 971 count = r; 972 mutex_unlock(&data->lock); 973 974 return count; 975 } 976 977 /* List of frequencies for the PWM */ 978 static const int pwmfreq_table[] = { 979 11, 14, 22, 29, 35, 44, 58, 88, 22500 980 }; 981 982 static ssize_t pwmfreq_show(struct device *dev, struct device_attribute *attr, 983 char *buf) 984 { 985 struct adt7475_data *data = adt7475_update_device(dev); 986 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 987 int idx; 988 989 if (IS_ERR(data)) 990 return PTR_ERR(data); 991 idx = clamp_val(data->range[sattr->index] & 0xf, 0, 992 ARRAY_SIZE(pwmfreq_table) - 1); 993 994 return sprintf(buf, "%d\n", pwmfreq_table[idx]); 995 } 996 997 static ssize_t pwmfreq_store(struct device *dev, 998 struct device_attribute *attr, const char *buf, 999 size_t count) 1000 { 1001 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); 1002 struct adt7475_data *data = dev_get_drvdata(dev); 1003 struct i2c_client *client = data->client; 1004 int out; 1005 long val; 1006 1007 if (kstrtol(buf, 10, &val)) 1008 return -EINVAL; 1009 1010 out = find_closest(val, pwmfreq_table, ARRAY_SIZE(pwmfreq_table)); 1011 1012 mutex_lock(&data->lock); 1013 1014 data->range[sattr->index] = 1015 adt7475_read(TEMP_TRANGE_REG(sattr->index)); 1016 data->range[sattr->index] &= ~0xf; 1017 data->range[sattr->index] |= out; 1018 1019 i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index), 1020 data->range[sattr->index]); 1021 1022 mutex_unlock(&data->lock); 1023 return count; 1024 } 1025 1026 static ssize_t pwm_use_point2_pwm_at_crit_show(struct device *dev, 1027 struct device_attribute *devattr, 1028 char *buf) 1029 { 1030 struct adt7475_data *data = adt7475_update_device(dev); 1031 1032 if (IS_ERR(data)) 1033 return PTR_ERR(data); 1034 1035 return sprintf(buf, "%d\n", !!(data->config4 & CONFIG4_MAXDUTY)); 1036 } 1037 1038 static ssize_t pwm_use_point2_pwm_at_crit_store(struct device *dev, 1039 struct device_attribute *devattr, 1040 const char *buf, size_t count) 1041 { 1042 struct adt7475_data *data = dev_get_drvdata(dev); 1043 struct i2c_client *client = data->client; 1044 long val; 1045 1046 if (kstrtol(buf, 10, &val)) 1047 return -EINVAL; 1048 if (val != 0 && val != 1) 1049 return -EINVAL; 1050 1051 mutex_lock(&data->lock); 1052 data->config4 = i2c_smbus_read_byte_data(client, REG_CONFIG4); 1053 if (val) 1054 data->config4 |= CONFIG4_MAXDUTY; 1055 else 1056 data->config4 &= ~CONFIG4_MAXDUTY; 1057 i2c_smbus_write_byte_data(client, REG_CONFIG4, data->config4); 1058 mutex_unlock(&data->lock); 1059 1060 return count; 1061 } 1062 1063 static ssize_t vrm_show(struct device *dev, struct device_attribute *devattr, 1064 char *buf) 1065 { 1066 struct adt7475_data *data = dev_get_drvdata(dev); 1067 return sprintf(buf, "%d\n", (int)data->vrm); 1068 } 1069 1070 static ssize_t vrm_store(struct device *dev, struct device_attribute *devattr, 1071 const char *buf, size_t count) 1072 { 1073 struct adt7475_data *data = dev_get_drvdata(dev); 1074 long val; 1075 1076 if (kstrtol(buf, 10, &val)) 1077 return -EINVAL; 1078 if (val < 0 || val > 255) 1079 return -EINVAL; 1080 data->vrm = val; 1081 1082 return count; 1083 } 1084 1085 static ssize_t cpu0_vid_show(struct device *dev, 1086 struct device_attribute *devattr, char *buf) 1087 { 1088 struct adt7475_data *data = adt7475_update_device(dev); 1089 1090 if (IS_ERR(data)) 1091 return PTR_ERR(data); 1092 1093 return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm)); 1094 } 1095 1096 static SENSOR_DEVICE_ATTR_2_RO(in0_input, voltage, INPUT, 0); 1097 static SENSOR_DEVICE_ATTR_2_RW(in0_max, voltage, MAX, 0); 1098 static SENSOR_DEVICE_ATTR_2_RW(in0_min, voltage, MIN, 0); 1099 static SENSOR_DEVICE_ATTR_2_RO(in0_alarm, voltage, ALARM, 0); 1100 static SENSOR_DEVICE_ATTR_2_RO(in1_input, voltage, INPUT, 1); 1101 static SENSOR_DEVICE_ATTR_2_RW(in1_max, voltage, MAX, 1); 1102 static SENSOR_DEVICE_ATTR_2_RW(in1_min, voltage, MIN, 1); 1103 static SENSOR_DEVICE_ATTR_2_RO(in1_alarm, voltage, ALARM, 1); 1104 static SENSOR_DEVICE_ATTR_2_RO(in2_input, voltage, INPUT, 2); 1105 static SENSOR_DEVICE_ATTR_2_RW(in2_max, voltage, MAX, 2); 1106 static SENSOR_DEVICE_ATTR_2_RW(in2_min, voltage, MIN, 2); 1107 static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, voltage, ALARM, 2); 1108 static SENSOR_DEVICE_ATTR_2_RO(in3_input, voltage, INPUT, 3); 1109 static SENSOR_DEVICE_ATTR_2_RW(in3_max, voltage, MAX, 3); 1110 static SENSOR_DEVICE_ATTR_2_RW(in3_min, voltage, MIN, 3); 1111 static SENSOR_DEVICE_ATTR_2_RO(in3_alarm, voltage, ALARM, 3); 1112 static SENSOR_DEVICE_ATTR_2_RO(in4_input, voltage, INPUT, 4); 1113 static SENSOR_DEVICE_ATTR_2_RW(in4_max, voltage, MAX, 4); 1114 static SENSOR_DEVICE_ATTR_2_RW(in4_min, voltage, MIN, 4); 1115 static SENSOR_DEVICE_ATTR_2_RO(in4_alarm, voltage, ALARM, 8); 1116 static SENSOR_DEVICE_ATTR_2_RO(in5_input, voltage, INPUT, 5); 1117 static SENSOR_DEVICE_ATTR_2_RW(in5_max, voltage, MAX, 5); 1118 static SENSOR_DEVICE_ATTR_2_RW(in5_min, voltage, MIN, 5); 1119 static SENSOR_DEVICE_ATTR_2_RO(in5_alarm, voltage, ALARM, 31); 1120 static SENSOR_DEVICE_ATTR_2_RO(in6_input, voltage, INPUT, 6); 1121 static SENSOR_DEVICE_ATTR_2_RW(in6_max, voltage, MAX, 6); 1122 static SENSOR_DEVICE_ATTR_2_RW(in6_min, voltage, MIN, 6); 1123 static SENSOR_DEVICE_ATTR_2_RO(in6_alarm, voltage, ALARM, 30); 1124 static SENSOR_DEVICE_ATTR_2_RO(temp1_input, temp, INPUT, 0); 1125 static SENSOR_DEVICE_ATTR_2_RO(temp1_alarm, temp, ALARM, 0); 1126 static SENSOR_DEVICE_ATTR_2_RO(temp1_fault, temp, FAULT, 0); 1127 static SENSOR_DEVICE_ATTR_2_RW(temp1_max, temp, MAX, 0); 1128 static SENSOR_DEVICE_ATTR_2_RW(temp1_min, temp, MIN, 0); 1129 static SENSOR_DEVICE_ATTR_2_RW(temp1_offset, temp, OFFSET, 0); 1130 static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_point1_temp, temp, AUTOMIN, 0); 1131 static SENSOR_DEVICE_ATTR_2_RW(temp1_auto_point2_temp, point2, 0, 0); 1132 static SENSOR_DEVICE_ATTR_2_RW(temp1_crit, temp, THERM, 0); 1133 static SENSOR_DEVICE_ATTR_2_RW(temp1_crit_hyst, temp, HYSTERSIS, 0); 1134 static SENSOR_DEVICE_ATTR_2_RW(temp1_smoothing, temp_st, 0, 0); 1135 static SENSOR_DEVICE_ATTR_2_RO(temp2_input, temp, INPUT, 1); 1136 static SENSOR_DEVICE_ATTR_2_RO(temp2_alarm, temp, ALARM, 1); 1137 static SENSOR_DEVICE_ATTR_2_RW(temp2_max, temp, MAX, 1); 1138 static SENSOR_DEVICE_ATTR_2_RW(temp2_min, temp, MIN, 1); 1139 static SENSOR_DEVICE_ATTR_2_RW(temp2_offset, temp, OFFSET, 1); 1140 static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_point1_temp, temp, AUTOMIN, 1); 1141 static SENSOR_DEVICE_ATTR_2_RW(temp2_auto_point2_temp, point2, 0, 1); 1142 static SENSOR_DEVICE_ATTR_2_RW(temp2_crit, temp, THERM, 1); 1143 static SENSOR_DEVICE_ATTR_2_RW(temp2_crit_hyst, temp, HYSTERSIS, 1); 1144 static SENSOR_DEVICE_ATTR_2_RW(temp2_smoothing, temp_st, 0, 1); 1145 static SENSOR_DEVICE_ATTR_2_RO(temp3_input, temp, INPUT, 2); 1146 static SENSOR_DEVICE_ATTR_2_RO(temp3_alarm, temp, ALARM, 2); 1147 static SENSOR_DEVICE_ATTR_2_RO(temp3_fault, temp, FAULT, 2); 1148 static SENSOR_DEVICE_ATTR_2_RW(temp3_max, temp, MAX, 2); 1149 static SENSOR_DEVICE_ATTR_2_RW(temp3_min, temp, MIN, 2); 1150 static SENSOR_DEVICE_ATTR_2_RW(temp3_offset, temp, OFFSET, 2); 1151 static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_point1_temp, temp, AUTOMIN, 2); 1152 static SENSOR_DEVICE_ATTR_2_RW(temp3_auto_point2_temp, point2, 0, 2); 1153 static SENSOR_DEVICE_ATTR_2_RW(temp3_crit, temp, THERM, 2); 1154 static SENSOR_DEVICE_ATTR_2_RW(temp3_crit_hyst, temp, HYSTERSIS, 2); 1155 static SENSOR_DEVICE_ATTR_2_RW(temp3_smoothing, temp_st, 0, 2); 1156 static SENSOR_DEVICE_ATTR_2_RO(fan1_input, tach, INPUT, 0); 1157 static SENSOR_DEVICE_ATTR_2_RW(fan1_min, tach, MIN, 0); 1158 static SENSOR_DEVICE_ATTR_2_RO(fan1_alarm, tach, ALARM, 0); 1159 static SENSOR_DEVICE_ATTR_2_RO(fan2_input, tach, INPUT, 1); 1160 static SENSOR_DEVICE_ATTR_2_RW(fan2_min, tach, MIN, 1); 1161 static SENSOR_DEVICE_ATTR_2_RO(fan2_alarm, tach, ALARM, 1); 1162 static SENSOR_DEVICE_ATTR_2_RO(fan3_input, tach, INPUT, 2); 1163 static SENSOR_DEVICE_ATTR_2_RW(fan3_min, tach, MIN, 2); 1164 static SENSOR_DEVICE_ATTR_2_RO(fan3_alarm, tach, ALARM, 2); 1165 static SENSOR_DEVICE_ATTR_2_RO(fan4_input, tach, INPUT, 3); 1166 static SENSOR_DEVICE_ATTR_2_RW(fan4_min, tach, MIN, 3); 1167 static SENSOR_DEVICE_ATTR_2_RO(fan4_alarm, tach, ALARM, 3); 1168 static SENSOR_DEVICE_ATTR_2_RW(pwm1, pwm, INPUT, 0); 1169 static SENSOR_DEVICE_ATTR_2_RW(pwm1_freq, pwmfreq, INPUT, 0); 1170 static SENSOR_DEVICE_ATTR_2_RW(pwm1_enable, pwmctrl, INPUT, 0); 1171 static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_channels_temp, pwmchan, INPUT, 0); 1172 static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point1_pwm, pwm, MIN, 0); 1173 static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point2_pwm, pwm, MAX, 0); 1174 static SENSOR_DEVICE_ATTR_2_RW(pwm1_stall_disable, stall_disable, 0, 0); 1175 static SENSOR_DEVICE_ATTR_2_RW(pwm2, pwm, INPUT, 1); 1176 static SENSOR_DEVICE_ATTR_2_RW(pwm2_freq, pwmfreq, INPUT, 1); 1177 static SENSOR_DEVICE_ATTR_2_RW(pwm2_enable, pwmctrl, INPUT, 1); 1178 static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_channels_temp, pwmchan, INPUT, 1); 1179 static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point1_pwm, pwm, MIN, 1); 1180 static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point2_pwm, pwm, MAX, 1); 1181 static SENSOR_DEVICE_ATTR_2_RW(pwm2_stall_disable, stall_disable, 0, 1); 1182 static SENSOR_DEVICE_ATTR_2_RW(pwm3, pwm, INPUT, 2); 1183 static SENSOR_DEVICE_ATTR_2_RW(pwm3_freq, pwmfreq, INPUT, 2); 1184 static SENSOR_DEVICE_ATTR_2_RW(pwm3_enable, pwmctrl, INPUT, 2); 1185 static SENSOR_DEVICE_ATTR_2_RW(pwm3_auto_channels_temp, pwmchan, INPUT, 2); 1186 static SENSOR_DEVICE_ATTR_2_RW(pwm3_auto_point1_pwm, pwm, MIN, 2); 1187 static SENSOR_DEVICE_ATTR_2_RW(pwm3_auto_point2_pwm, pwm, MAX, 2); 1188 static SENSOR_DEVICE_ATTR_2_RW(pwm3_stall_disable, stall_disable, 0, 2); 1189 1190 /* Non-standard name, might need revisiting */ 1191 static DEVICE_ATTR_RW(pwm_use_point2_pwm_at_crit); 1192 1193 static DEVICE_ATTR_RW(vrm); 1194 static DEVICE_ATTR_RO(cpu0_vid); 1195 1196 static struct attribute *adt7475_attrs[] = { 1197 &sensor_dev_attr_in1_input.dev_attr.attr, 1198 &sensor_dev_attr_in1_max.dev_attr.attr, 1199 &sensor_dev_attr_in1_min.dev_attr.attr, 1200 &sensor_dev_attr_in1_alarm.dev_attr.attr, 1201 &sensor_dev_attr_in2_input.dev_attr.attr, 1202 &sensor_dev_attr_in2_max.dev_attr.attr, 1203 &sensor_dev_attr_in2_min.dev_attr.attr, 1204 &sensor_dev_attr_in2_alarm.dev_attr.attr, 1205 &sensor_dev_attr_temp1_input.dev_attr.attr, 1206 &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1207 &sensor_dev_attr_temp1_fault.dev_attr.attr, 1208 &sensor_dev_attr_temp1_max.dev_attr.attr, 1209 &sensor_dev_attr_temp1_min.dev_attr.attr, 1210 &sensor_dev_attr_temp1_offset.dev_attr.attr, 1211 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr, 1212 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr, 1213 &sensor_dev_attr_temp1_crit.dev_attr.attr, 1214 &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr, 1215 &sensor_dev_attr_temp1_smoothing.dev_attr.attr, 1216 &sensor_dev_attr_temp2_input.dev_attr.attr, 1217 &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1218 &sensor_dev_attr_temp2_max.dev_attr.attr, 1219 &sensor_dev_attr_temp2_min.dev_attr.attr, 1220 &sensor_dev_attr_temp2_offset.dev_attr.attr, 1221 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr, 1222 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr, 1223 &sensor_dev_attr_temp2_crit.dev_attr.attr, 1224 &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr, 1225 &sensor_dev_attr_temp2_smoothing.dev_attr.attr, 1226 &sensor_dev_attr_temp3_input.dev_attr.attr, 1227 &sensor_dev_attr_temp3_fault.dev_attr.attr, 1228 &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1229 &sensor_dev_attr_temp3_max.dev_attr.attr, 1230 &sensor_dev_attr_temp3_min.dev_attr.attr, 1231 &sensor_dev_attr_temp3_offset.dev_attr.attr, 1232 &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr, 1233 &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr, 1234 &sensor_dev_attr_temp3_crit.dev_attr.attr, 1235 &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr, 1236 &sensor_dev_attr_temp3_smoothing.dev_attr.attr, 1237 &sensor_dev_attr_fan1_input.dev_attr.attr, 1238 &sensor_dev_attr_fan1_min.dev_attr.attr, 1239 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1240 &sensor_dev_attr_fan2_input.dev_attr.attr, 1241 &sensor_dev_attr_fan2_min.dev_attr.attr, 1242 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1243 &sensor_dev_attr_fan3_input.dev_attr.attr, 1244 &sensor_dev_attr_fan3_min.dev_attr.attr, 1245 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1246 &sensor_dev_attr_pwm1.dev_attr.attr, 1247 &sensor_dev_attr_pwm1_freq.dev_attr.attr, 1248 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1249 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr, 1250 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr, 1251 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr, 1252 &sensor_dev_attr_pwm1_stall_disable.dev_attr.attr, 1253 &sensor_dev_attr_pwm3.dev_attr.attr, 1254 &sensor_dev_attr_pwm3_freq.dev_attr.attr, 1255 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 1256 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr, 1257 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, 1258 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, 1259 &sensor_dev_attr_pwm3_stall_disable.dev_attr.attr, 1260 &dev_attr_pwm_use_point2_pwm_at_crit.attr, 1261 NULL, 1262 }; 1263 1264 static struct attribute *fan4_attrs[] = { 1265 &sensor_dev_attr_fan4_input.dev_attr.attr, 1266 &sensor_dev_attr_fan4_min.dev_attr.attr, 1267 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1268 NULL 1269 }; 1270 1271 static struct attribute *pwm2_attrs[] = { 1272 &sensor_dev_attr_pwm2.dev_attr.attr, 1273 &sensor_dev_attr_pwm2_freq.dev_attr.attr, 1274 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 1275 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr, 1276 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, 1277 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr, 1278 &sensor_dev_attr_pwm2_stall_disable.dev_attr.attr, 1279 NULL 1280 }; 1281 1282 static struct attribute *in0_attrs[] = { 1283 &sensor_dev_attr_in0_input.dev_attr.attr, 1284 &sensor_dev_attr_in0_max.dev_attr.attr, 1285 &sensor_dev_attr_in0_min.dev_attr.attr, 1286 &sensor_dev_attr_in0_alarm.dev_attr.attr, 1287 NULL 1288 }; 1289 1290 static struct attribute *in3_attrs[] = { 1291 &sensor_dev_attr_in3_input.dev_attr.attr, 1292 &sensor_dev_attr_in3_max.dev_attr.attr, 1293 &sensor_dev_attr_in3_min.dev_attr.attr, 1294 &sensor_dev_attr_in3_alarm.dev_attr.attr, 1295 NULL 1296 }; 1297 1298 static struct attribute *in4_attrs[] = { 1299 &sensor_dev_attr_in4_input.dev_attr.attr, 1300 &sensor_dev_attr_in4_max.dev_attr.attr, 1301 &sensor_dev_attr_in4_min.dev_attr.attr, 1302 &sensor_dev_attr_in4_alarm.dev_attr.attr, 1303 NULL 1304 }; 1305 1306 static struct attribute *in5_attrs[] = { 1307 &sensor_dev_attr_in5_input.dev_attr.attr, 1308 &sensor_dev_attr_in5_max.dev_attr.attr, 1309 &sensor_dev_attr_in5_min.dev_attr.attr, 1310 &sensor_dev_attr_in5_alarm.dev_attr.attr, 1311 NULL 1312 }; 1313 1314 static struct attribute *in6_attrs[] = { 1315 &sensor_dev_attr_in6_input.dev_attr.attr, 1316 &sensor_dev_attr_in6_max.dev_attr.attr, 1317 &sensor_dev_attr_in6_min.dev_attr.attr, 1318 &sensor_dev_attr_in6_alarm.dev_attr.attr, 1319 NULL 1320 }; 1321 1322 static struct attribute *vid_attrs[] = { 1323 &dev_attr_cpu0_vid.attr, 1324 &dev_attr_vrm.attr, 1325 NULL 1326 }; 1327 1328 static const struct attribute_group adt7475_attr_group = { .attrs = adt7475_attrs }; 1329 static const struct attribute_group fan4_attr_group = { .attrs = fan4_attrs }; 1330 static const struct attribute_group pwm2_attr_group = { .attrs = pwm2_attrs }; 1331 static const struct attribute_group in0_attr_group = { .attrs = in0_attrs }; 1332 static const struct attribute_group in3_attr_group = { .attrs = in3_attrs }; 1333 static const struct attribute_group in4_attr_group = { .attrs = in4_attrs }; 1334 static const struct attribute_group in5_attr_group = { .attrs = in5_attrs }; 1335 static const struct attribute_group in6_attr_group = { .attrs = in6_attrs }; 1336 static const struct attribute_group vid_attr_group = { .attrs = vid_attrs }; 1337 1338 static int adt7475_detect(struct i2c_client *client, 1339 struct i2c_board_info *info) 1340 { 1341 struct i2c_adapter *adapter = client->adapter; 1342 int vendid, devid, devid2; 1343 const char *name; 1344 1345 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1346 return -ENODEV; 1347 1348 vendid = adt7475_read(REG_VENDID); 1349 devid2 = adt7475_read(REG_DEVID2); 1350 if (vendid != 0x41 || /* Analog Devices */ 1351 (devid2 & 0xf8) != 0x68) 1352 return -ENODEV; 1353 1354 devid = adt7475_read(REG_DEVID); 1355 if (devid == 0x73) 1356 name = "adt7473"; 1357 else if (devid == 0x75 && client->addr == 0x2e) 1358 name = "adt7475"; 1359 else if (devid == 0x76) 1360 name = "adt7476"; 1361 else if ((devid2 & 0xfc) == 0x6c) 1362 name = "adt7490"; 1363 else { 1364 dev_dbg(&adapter->dev, 1365 "Couldn't detect an ADT7473/75/76/90 part at " 1366 "0x%02x\n", (unsigned int)client->addr); 1367 return -ENODEV; 1368 } 1369 1370 strscpy(info->type, name, I2C_NAME_SIZE); 1371 1372 return 0; 1373 } 1374 1375 static int adt7475_update_limits(struct i2c_client *client) 1376 { 1377 struct adt7475_data *data = i2c_get_clientdata(client); 1378 int i; 1379 int ret; 1380 1381 ret = adt7475_read(REG_CONFIG4); 1382 if (ret < 0) 1383 return ret; 1384 data->config4 = ret; 1385 1386 ret = adt7475_read(REG_CONFIG5); 1387 if (ret < 0) 1388 return ret; 1389 data->config5 = ret; 1390 1391 for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) { 1392 if (!(data->has_voltage & (1 << i))) 1393 continue; 1394 /* Adjust values so they match the input precision */ 1395 ret = adt7475_read(VOLTAGE_MIN_REG(i)); 1396 if (ret < 0) 1397 return ret; 1398 data->voltage[MIN][i] = ret << 2; 1399 1400 ret = adt7475_read(VOLTAGE_MAX_REG(i)); 1401 if (ret < 0) 1402 return ret; 1403 data->voltage[MAX][i] = ret << 2; 1404 } 1405 1406 if (data->has_voltage & (1 << 5)) { 1407 ret = adt7475_read(REG_VTT_MIN); 1408 if (ret < 0) 1409 return ret; 1410 data->voltage[MIN][5] = ret << 2; 1411 1412 ret = adt7475_read(REG_VTT_MAX); 1413 if (ret < 0) 1414 return ret; 1415 data->voltage[MAX][5] = ret << 2; 1416 } 1417 1418 if (data->has_voltage & (1 << 6)) { 1419 ret = adt7475_read(REG_IMON_MIN); 1420 if (ret < 0) 1421 return ret; 1422 data->voltage[MIN][6] = ret << 2; 1423 1424 ret = adt7475_read(REG_IMON_MAX); 1425 if (ret < 0) 1426 return ret; 1427 data->voltage[MAX][6] = ret << 2; 1428 } 1429 1430 for (i = 0; i < ADT7475_TEMP_COUNT; i++) { 1431 /* Adjust values so they match the input precision */ 1432 ret = adt7475_read(TEMP_MIN_REG(i)); 1433 if (ret < 0) 1434 return ret; 1435 data->temp[MIN][i] = ret << 2; 1436 1437 ret = adt7475_read(TEMP_MAX_REG(i)); 1438 if (ret < 0) 1439 return ret; 1440 data->temp[MAX][i] = ret << 2; 1441 1442 ret = adt7475_read(TEMP_TMIN_REG(i)); 1443 if (ret < 0) 1444 return ret; 1445 data->temp[AUTOMIN][i] = ret << 2; 1446 1447 ret = adt7475_read(TEMP_THERM_REG(i)); 1448 if (ret < 0) 1449 return ret; 1450 data->temp[THERM][i] = ret << 2; 1451 1452 ret = adt7475_read(TEMP_OFFSET_REG(i)); 1453 if (ret < 0) 1454 return ret; 1455 data->temp[OFFSET][i] = ret; 1456 } 1457 adt7475_read_hystersis(client); 1458 1459 for (i = 0; i < ADT7475_TACH_COUNT; i++) { 1460 if (i == 3 && !data->has_fan4) 1461 continue; 1462 ret = adt7475_read_word(client, TACH_MIN_REG(i)); 1463 if (ret < 0) 1464 return ret; 1465 data->tach[MIN][i] = ret; 1466 } 1467 1468 for (i = 0; i < ADT7475_PWM_COUNT; i++) { 1469 if (i == 1 && !data->has_pwm2) 1470 continue; 1471 ret = adt7475_read(PWM_MAX_REG(i)); 1472 if (ret < 0) 1473 return ret; 1474 data->pwm[MAX][i] = ret; 1475 1476 ret = adt7475_read(PWM_MIN_REG(i)); 1477 if (ret < 0) 1478 return ret; 1479 data->pwm[MIN][i] = ret; 1480 /* Set the channel and control information */ 1481 adt7475_read_pwm(client, i); 1482 } 1483 1484 ret = adt7475_read(TEMP_TRANGE_REG(0)); 1485 if (ret < 0) 1486 return ret; 1487 data->range[0] = ret; 1488 1489 ret = adt7475_read(TEMP_TRANGE_REG(1)); 1490 if (ret < 0) 1491 return ret; 1492 data->range[1] = ret; 1493 1494 ret = adt7475_read(TEMP_TRANGE_REG(2)); 1495 if (ret < 0) 1496 return ret; 1497 data->range[2] = ret; 1498 1499 return 0; 1500 } 1501 1502 static int load_config3(const struct i2c_client *client, const char *propname) 1503 { 1504 const char *function; 1505 u8 config3; 1506 int ret; 1507 1508 ret = device_property_read_string(&client->dev, propname, &function); 1509 if (!ret) { 1510 ret = adt7475_read(REG_CONFIG3); 1511 if (ret < 0) 1512 return ret; 1513 1514 config3 = ret & ~CONFIG3_SMBALERT; 1515 if (!strcmp("pwm2", function)) 1516 ; 1517 else if (!strcmp("smbalert#", function)) 1518 config3 |= CONFIG3_SMBALERT; 1519 else 1520 return -EINVAL; 1521 1522 return i2c_smbus_write_byte_data(client, REG_CONFIG3, config3); 1523 } 1524 1525 return 0; 1526 } 1527 1528 static int load_config4(const struct i2c_client *client, const char *propname) 1529 { 1530 const char *function; 1531 u8 config4; 1532 int ret; 1533 1534 ret = device_property_read_string(&client->dev, propname, &function); 1535 if (!ret) { 1536 ret = adt7475_read(REG_CONFIG4); 1537 if (ret < 0) 1538 return ret; 1539 1540 config4 = ret & ~CONFIG4_PINFUNC; 1541 1542 if (!strcmp("tach4", function)) 1543 ; 1544 else if (!strcmp("therm#", function)) 1545 config4 |= CONFIG4_THERM; 1546 else if (!strcmp("smbalert#", function)) 1547 config4 |= CONFIG4_SMBALERT; 1548 else if (!strcmp("gpio", function)) 1549 config4 |= CONFIG4_PINFUNC; 1550 else 1551 return -EINVAL; 1552 1553 return i2c_smbus_write_byte_data(client, REG_CONFIG4, config4); 1554 } 1555 1556 return 0; 1557 } 1558 1559 static int load_config(const struct i2c_client *client, enum chips chip) 1560 { 1561 int err; 1562 const char *prop1, *prop2; 1563 1564 switch (chip) { 1565 case adt7473: 1566 case adt7475: 1567 prop1 = "adi,pin5-function"; 1568 prop2 = "adi,pin9-function"; 1569 break; 1570 case adt7476: 1571 case adt7490: 1572 prop1 = "adi,pin10-function"; 1573 prop2 = "adi,pin14-function"; 1574 break; 1575 } 1576 1577 err = load_config3(client, prop1); 1578 if (err) { 1579 dev_err(&client->dev, "failed to configure %s\n", prop1); 1580 return err; 1581 } 1582 1583 err = load_config4(client, prop2); 1584 if (err) { 1585 dev_err(&client->dev, "failed to configure %s\n", prop2); 1586 return err; 1587 } 1588 1589 return 0; 1590 } 1591 1592 static int set_property_bit(const struct i2c_client *client, char *property, 1593 u8 *config, u8 bit_index) 1594 { 1595 u32 prop_value = 0; 1596 int ret = device_property_read_u32(&client->dev, property, 1597 &prop_value); 1598 1599 if (!ret) { 1600 if (prop_value) 1601 *config |= (1 << bit_index); 1602 else 1603 *config &= ~(1 << bit_index); 1604 } 1605 1606 return ret; 1607 } 1608 1609 static int load_attenuators(const struct i2c_client *client, enum chips chip, 1610 struct adt7475_data *data) 1611 { 1612 switch (chip) { 1613 case adt7476: 1614 case adt7490: 1615 set_property_bit(client, "adi,bypass-attenuator-in0", 1616 &data->config4, 4); 1617 set_property_bit(client, "adi,bypass-attenuator-in1", 1618 &data->config4, 5); 1619 set_property_bit(client, "adi,bypass-attenuator-in3", 1620 &data->config4, 6); 1621 set_property_bit(client, "adi,bypass-attenuator-in4", 1622 &data->config4, 7); 1623 1624 return i2c_smbus_write_byte_data(client, REG_CONFIG4, 1625 data->config4); 1626 case adt7473: 1627 case adt7475: 1628 set_property_bit(client, "adi,bypass-attenuator-in1", 1629 &data->config2, 5); 1630 1631 return i2c_smbus_write_byte_data(client, REG_CONFIG2, 1632 data->config2); 1633 } 1634 1635 return 0; 1636 } 1637 1638 static int adt7475_set_pwm_polarity(struct i2c_client *client) 1639 { 1640 u32 states[ADT7475_PWM_COUNT]; 1641 int ret, i; 1642 u8 val; 1643 1644 ret = device_property_read_u32_array(&client->dev, 1645 "adi,pwm-active-state", states, 1646 ARRAY_SIZE(states)); 1647 if (ret) 1648 return ret; 1649 1650 for (i = 0; i < ADT7475_PWM_COUNT; i++) { 1651 ret = adt7475_read(PWM_CONFIG_REG(i)); 1652 if (ret < 0) 1653 return ret; 1654 val = ret; 1655 if (states[i]) 1656 val &= ~BIT(4); 1657 else 1658 val |= BIT(4); 1659 1660 ret = i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(i), val); 1661 if (ret) 1662 return ret; 1663 } 1664 1665 return 0; 1666 } 1667 1668 struct adt7475_pwm_config { 1669 int index; 1670 int freq; 1671 int flags; 1672 int duty; 1673 }; 1674 1675 static int _adt7475_pwm_properties_parse_args(u32 args[4], struct adt7475_pwm_config *cfg) 1676 { 1677 int freq_hz; 1678 int duty; 1679 1680 if (args[1] == 0) 1681 return -EINVAL; 1682 1683 freq_hz = 1000000000UL / args[1]; 1684 if (args[3] >= args[1]) 1685 duty = 255; 1686 else 1687 duty = div_u64(255ULL * args[3], args[1]); 1688 1689 cfg->index = args[0]; 1690 cfg->freq = find_closest(freq_hz, pwmfreq_table, ARRAY_SIZE(pwmfreq_table)); 1691 cfg->flags = args[2]; 1692 cfg->duty = duty; 1693 1694 return 0; 1695 } 1696 1697 static int adt7475_pwm_properties_parse_reference_args(struct fwnode_handle *fwnode, 1698 struct adt7475_pwm_config *cfg) 1699 { 1700 int ret, i; 1701 struct fwnode_reference_args rargs = {}; 1702 u32 args[4] = {}; 1703 1704 ret = fwnode_property_get_reference_args(fwnode, "pwms", "#pwm-cells", 0, 0, &rargs); 1705 if (ret) 1706 return ret; 1707 1708 if (rargs.nargs != 3 && rargs.nargs != 4) { 1709 fwnode_handle_put(rargs.fwnode); 1710 return -EINVAL; 1711 } 1712 1713 /* Let duty_cycle default to period */ 1714 args[3] = rargs.args[1]; 1715 1716 for (i = 0; i < rargs.nargs; i++) 1717 args[i] = rargs.args[i]; 1718 1719 ret = _adt7475_pwm_properties_parse_args(args, cfg); 1720 1721 fwnode_handle_put(rargs.fwnode); 1722 1723 return ret; 1724 } 1725 1726 static int adt7475_pwm_properties_parse_args(struct fwnode_handle *fwnode, 1727 struct adt7475_pwm_config *cfg) 1728 { 1729 int ret; 1730 u32 args[4] = {}; 1731 size_t n_vals = fwnode_property_count_u32(fwnode, "pwms"); 1732 1733 if (n_vals != 3 && n_vals != 4) 1734 return -EOVERFLOW; 1735 1736 ret = fwnode_property_read_u32_array(fwnode, "pwms", args, n_vals); 1737 if (ret) 1738 return ret; 1739 1740 /* 1741 * If there are no item to define the duty_cycle, default it to the 1742 * period. 1743 */ 1744 if (n_vals == 3) 1745 args[3] = args[1]; 1746 1747 return _adt7475_pwm_properties_parse_args(args, cfg); 1748 } 1749 1750 static int adt7475_fan_pwm_config(struct i2c_client *client) 1751 { 1752 struct adt7475_data *data = i2c_get_clientdata(client); 1753 struct adt7475_pwm_config cfg = {}; 1754 int ret; 1755 1756 device_for_each_child_node_scoped(&client->dev, child) { 1757 if (!fwnode_property_present(child, "pwms")) 1758 continue; 1759 1760 if (is_of_node(child)) 1761 ret = adt7475_pwm_properties_parse_reference_args(child, &cfg); 1762 else 1763 ret = adt7475_pwm_properties_parse_args(child, &cfg); 1764 1765 if (cfg.index >= ADT7475_PWM_COUNT) 1766 return -EINVAL; 1767 1768 ret = adt7475_read(PWM_CONFIG_REG(cfg.index)); 1769 if (ret < 0) 1770 return ret; 1771 data->pwm[CONTROL][cfg.index] = ret; 1772 if (cfg.flags & PWM_POLARITY_INVERTED) 1773 data->pwm[CONTROL][cfg.index] |= BIT(4); 1774 else 1775 data->pwm[CONTROL][cfg.index] &= ~BIT(4); 1776 1777 /* Force to manual mode so PWM values take effect */ 1778 data->pwm[CONTROL][cfg.index] &= ~0xE0; 1779 data->pwm[CONTROL][cfg.index] |= 0x07 << 5; 1780 1781 ret = i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(cfg.index), 1782 data->pwm[CONTROL][cfg.index]); 1783 if (ret) 1784 return ret; 1785 1786 data->pwm[INPUT][cfg.index] = cfg.duty; 1787 ret = i2c_smbus_write_byte_data(client, PWM_REG(cfg.index), 1788 data->pwm[INPUT][cfg.index]); 1789 if (ret) 1790 return ret; 1791 1792 data->range[cfg.index] = adt7475_read(TEMP_TRANGE_REG(cfg.index)); 1793 data->range[cfg.index] &= ~0xf; 1794 data->range[cfg.index] |= cfg.freq; 1795 1796 ret = i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(cfg.index), 1797 data->range[cfg.index]); 1798 if (ret) 1799 return ret; 1800 } 1801 1802 return 0; 1803 } 1804 1805 static int adt7475_probe(struct i2c_client *client) 1806 { 1807 enum chips chip; 1808 static const char * const names[] = { 1809 [adt7473] = "ADT7473", 1810 [adt7475] = "ADT7475", 1811 [adt7476] = "ADT7476", 1812 [adt7490] = "ADT7490", 1813 }; 1814 1815 struct adt7475_data *data; 1816 struct device *hwmon_dev; 1817 int i, ret = 0, revision, group_num = 0; 1818 u8 config3; 1819 1820 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); 1821 if (data == NULL) 1822 return -ENOMEM; 1823 1824 mutex_init(&data->lock); 1825 data->client = client; 1826 i2c_set_clientdata(client, data); 1827 1828 chip = (uintptr_t)i2c_get_match_data(client); 1829 1830 /* Initialize device-specific values */ 1831 switch (chip) { 1832 case adt7476: 1833 data->has_voltage = 0x0e; /* in1 to in3 */ 1834 revision = adt7475_read(REG_DEVID2) & 0x07; 1835 break; 1836 case adt7490: 1837 data->has_voltage = 0x7e; /* in1 to in6 */ 1838 revision = adt7475_read(REG_DEVID2) & 0x03; 1839 if (revision == 0x03) 1840 revision += adt7475_read(REG_DEVREV2); 1841 break; 1842 default: 1843 data->has_voltage = 0x06; /* in1, in2 */ 1844 revision = adt7475_read(REG_DEVID2) & 0x07; 1845 } 1846 1847 ret = load_config(client, chip); 1848 if (ret) 1849 return ret; 1850 1851 config3 = adt7475_read(REG_CONFIG3); 1852 /* Pin PWM2 may alternatively be used for ALERT output */ 1853 if (!(config3 & CONFIG3_SMBALERT)) 1854 data->has_pwm2 = 1; 1855 /* Meaning of this bit is inverted for the ADT7473-1 */ 1856 if (chip == adt7473 && revision >= 1) 1857 data->has_pwm2 = !data->has_pwm2; 1858 1859 data->config4 = adt7475_read(REG_CONFIG4); 1860 /* Pin TACH4 may alternatively be used for THERM */ 1861 if ((data->config4 & CONFIG4_PINFUNC) == 0x0) 1862 data->has_fan4 = 1; 1863 1864 /* 1865 * THERM configuration is more complex on the ADT7476 and ADT7490, 1866 * because 2 different pins (TACH4 and +2.5 Vin) can be used for 1867 * this function 1868 */ 1869 if (chip == adt7490) { 1870 if ((data->config4 & CONFIG4_PINFUNC) == 0x1 && 1871 !(config3 & CONFIG3_THERM)) 1872 data->has_fan4 = 1; 1873 } 1874 if (chip == adt7476 || chip == adt7490) { 1875 if (!(config3 & CONFIG3_THERM) || 1876 (data->config4 & CONFIG4_PINFUNC) == 0x1) 1877 data->has_voltage |= (1 << 0); /* in0 */ 1878 } 1879 1880 /* 1881 * On the ADT7476, the +12V input pin may instead be used as VID5, 1882 * and VID pins may alternatively be used as GPIO 1883 */ 1884 if (chip == adt7476) { 1885 u8 vid = adt7475_read(REG_VID); 1886 if (!(vid & VID_VIDSEL)) 1887 data->has_voltage |= (1 << 4); /* in4 */ 1888 1889 data->has_vid = !(adt7475_read(REG_CONFIG5) & CONFIG5_VIDGPIO); 1890 } 1891 1892 /* Voltage attenuators can be bypassed, globally or individually */ 1893 data->config2 = adt7475_read(REG_CONFIG2); 1894 ret = load_attenuators(client, chip, data); 1895 if (ret) 1896 dev_warn(&client->dev, "Error configuring attenuator bypass\n"); 1897 1898 if (data->config2 & CONFIG2_ATTN) { 1899 data->bypass_attn = (0x3 << 3) | 0x3; 1900 } else { 1901 data->bypass_attn = ((data->config4 & CONFIG4_ATTN_IN10) >> 4) | 1902 ((data->config4 & CONFIG4_ATTN_IN43) >> 3); 1903 } 1904 data->bypass_attn &= data->has_voltage; 1905 1906 /* 1907 * Call adt7475_read_pwm for all pwm's as this will reprogram any 1908 * pwm's which are disabled to manual mode with 0% duty cycle 1909 */ 1910 for (i = 0; i < ADT7475_PWM_COUNT; i++) 1911 adt7475_read_pwm(client, i); 1912 1913 ret = adt7475_set_pwm_polarity(client); 1914 if (ret && ret != -EINVAL) 1915 dev_warn(&client->dev, "Error configuring pwm polarity\n"); 1916 1917 ret = adt7475_fan_pwm_config(client); 1918 if (ret) 1919 dev_warn(&client->dev, "Error %d configuring fan/pwm\n", ret); 1920 1921 /* Start monitoring */ 1922 switch (chip) { 1923 case adt7475: 1924 case adt7476: 1925 i2c_smbus_write_byte_data(client, REG_CONFIG1, 1926 adt7475_read(REG_CONFIG1) | 0x01); 1927 break; 1928 default: 1929 break; 1930 } 1931 1932 data->groups[group_num++] = &adt7475_attr_group; 1933 1934 /* Features that can be disabled individually */ 1935 if (data->has_fan4) { 1936 data->groups[group_num++] = &fan4_attr_group; 1937 } 1938 if (data->has_pwm2) { 1939 data->groups[group_num++] = &pwm2_attr_group; 1940 } 1941 if (data->has_voltage & (1 << 0)) { 1942 data->groups[group_num++] = &in0_attr_group; 1943 } 1944 if (data->has_voltage & (1 << 3)) { 1945 data->groups[group_num++] = &in3_attr_group; 1946 } 1947 if (data->has_voltage & (1 << 4)) { 1948 data->groups[group_num++] = &in4_attr_group; 1949 } 1950 if (data->has_voltage & (1 << 5)) { 1951 data->groups[group_num++] = &in5_attr_group; 1952 } 1953 if (data->has_voltage & (1 << 6)) { 1954 data->groups[group_num++] = &in6_attr_group; 1955 } 1956 if (data->has_vid) { 1957 data->vrm = vid_which_vrm(); 1958 data->groups[group_num] = &vid_attr_group; 1959 } 1960 1961 /* register device with all the acquired attributes */ 1962 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, 1963 client->name, data, 1964 data->groups); 1965 1966 if (IS_ERR(hwmon_dev)) { 1967 ret = PTR_ERR(hwmon_dev); 1968 return ret; 1969 } 1970 1971 dev_info(&client->dev, "%s device, revision %d\n", 1972 names[chip], revision); 1973 if ((data->has_voltage & 0x11) || data->has_fan4 || data->has_pwm2) 1974 dev_info(&client->dev, "Optional features:%s%s%s%s%s\n", 1975 (data->has_voltage & (1 << 0)) ? " in0" : "", 1976 (data->has_voltage & (1 << 4)) ? " in4" : "", 1977 data->has_fan4 ? " fan4" : "", 1978 data->has_pwm2 ? " pwm2" : "", 1979 data->has_vid ? " vid" : ""); 1980 if (data->bypass_attn) 1981 dev_info(&client->dev, "Bypassing attenuators on:%s%s%s%s\n", 1982 (data->bypass_attn & (1 << 0)) ? " in0" : "", 1983 (data->bypass_attn & (1 << 1)) ? " in1" : "", 1984 (data->bypass_attn & (1 << 3)) ? " in3" : "", 1985 (data->bypass_attn & (1 << 4)) ? " in4" : ""); 1986 1987 /* Limits and settings, should never change update more than once */ 1988 ret = adt7475_update_limits(client); 1989 if (ret) 1990 return ret; 1991 1992 return 0; 1993 } 1994 1995 static struct i2c_driver adt7475_driver = { 1996 .class = I2C_CLASS_HWMON, 1997 .driver = { 1998 .name = "adt7475", 1999 .of_match_table = adt7475_of_match, 2000 }, 2001 .probe = adt7475_probe, 2002 .id_table = adt7475_id, 2003 .detect = adt7475_detect, 2004 .address_list = normal_i2c, 2005 }; 2006 2007 static void adt7475_read_hystersis(struct i2c_client *client) 2008 { 2009 struct adt7475_data *data = i2c_get_clientdata(client); 2010 2011 data->temp[HYSTERSIS][0] = (u16) adt7475_read(REG_REMOTE1_HYSTERSIS); 2012 data->temp[HYSTERSIS][1] = data->temp[HYSTERSIS][0]; 2013 data->temp[HYSTERSIS][2] = (u16) adt7475_read(REG_REMOTE2_HYSTERSIS); 2014 } 2015 2016 static void adt7475_read_pwm(struct i2c_client *client, int index) 2017 { 2018 struct adt7475_data *data = i2c_get_clientdata(client); 2019 unsigned int v; 2020 2021 data->pwm[CONTROL][index] = adt7475_read(PWM_CONFIG_REG(index)); 2022 2023 /* 2024 * Figure out the internal value for pwmctrl and pwmchan 2025 * based on the current settings 2026 */ 2027 v = (data->pwm[CONTROL][index] >> 5) & 7; 2028 2029 if (v == 3) 2030 data->pwmctl[index] = 0; 2031 else if (v == 7) 2032 data->pwmctl[index] = 1; 2033 else if (v == 4) { 2034 /* 2035 * The fan is disabled - we don't want to 2036 * support that, so change to manual mode and 2037 * set the duty cycle to 0 instead 2038 */ 2039 data->pwm[INPUT][index] = 0; 2040 data->pwm[CONTROL][index] &= ~0xE0; 2041 data->pwm[CONTROL][index] |= (7 << 5); 2042 2043 i2c_smbus_write_byte_data(client, PWM_REG(index), 2044 data->pwm[INPUT][index]); 2045 2046 i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index), 2047 data->pwm[CONTROL][index]); 2048 2049 data->pwmctl[index] = 1; 2050 } else { 2051 data->pwmctl[index] = 2; 2052 2053 switch (v) { 2054 case 0: 2055 data->pwmchan[index] = 1; 2056 break; 2057 case 1: 2058 data->pwmchan[index] = 2; 2059 break; 2060 case 2: 2061 data->pwmchan[index] = 4; 2062 break; 2063 case 5: 2064 data->pwmchan[index] = 6; 2065 break; 2066 case 6: 2067 data->pwmchan[index] = 7; 2068 break; 2069 } 2070 } 2071 } 2072 2073 static int adt7475_update_measure(struct device *dev) 2074 { 2075 struct adt7475_data *data = dev_get_drvdata(dev); 2076 struct i2c_client *client = data->client; 2077 u16 ext; 2078 int i; 2079 int ret; 2080 2081 ret = adt7475_read(REG_STATUS2); 2082 if (ret < 0) 2083 return ret; 2084 data->alarms = ret << 8; 2085 2086 ret = adt7475_read(REG_STATUS1); 2087 if (ret < 0) 2088 return ret; 2089 data->alarms |= ret; 2090 2091 ret = adt7475_read(REG_EXTEND2); 2092 if (ret < 0) 2093 return ret; 2094 2095 ext = (ret << 8); 2096 2097 ret = adt7475_read(REG_EXTEND1); 2098 if (ret < 0) 2099 return ret; 2100 2101 ext |= ret; 2102 2103 for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) { 2104 if (!(data->has_voltage & (1 << i))) 2105 continue; 2106 ret = adt7475_read(VOLTAGE_REG(i)); 2107 if (ret < 0) 2108 return ret; 2109 data->voltage[INPUT][i] = 2110 (ret << 2) | 2111 ((ext >> (i * 2)) & 3); 2112 } 2113 2114 for (i = 0; i < ADT7475_TEMP_COUNT; i++) { 2115 ret = adt7475_read(TEMP_REG(i)); 2116 if (ret < 0) 2117 return ret; 2118 data->temp[INPUT][i] = 2119 (ret << 2) | 2120 ((ext >> ((i + 5) * 2)) & 3); 2121 } 2122 2123 if (data->has_voltage & (1 << 5)) { 2124 ret = adt7475_read(REG_STATUS4); 2125 if (ret < 0) 2126 return ret; 2127 data->alarms |= ret << 24; 2128 2129 ret = adt7475_read(REG_EXTEND3); 2130 if (ret < 0) 2131 return ret; 2132 ext = ret; 2133 2134 ret = adt7475_read(REG_VTT); 2135 if (ret < 0) 2136 return ret; 2137 data->voltage[INPUT][5] = ret << 2 | 2138 ((ext >> 4) & 3); 2139 } 2140 2141 if (data->has_voltage & (1 << 6)) { 2142 ret = adt7475_read(REG_STATUS4); 2143 if (ret < 0) 2144 return ret; 2145 data->alarms |= ret << 24; 2146 2147 ret = adt7475_read(REG_EXTEND3); 2148 if (ret < 0) 2149 return ret; 2150 ext = ret; 2151 2152 ret = adt7475_read(REG_IMON); 2153 if (ret < 0) 2154 return ret; 2155 data->voltage[INPUT][6] = ret << 2 | 2156 ((ext >> 6) & 3); 2157 } 2158 2159 for (i = 0; i < ADT7475_TACH_COUNT; i++) { 2160 if (i == 3 && !data->has_fan4) 2161 continue; 2162 ret = adt7475_read_word(client, TACH_REG(i)); 2163 if (ret < 0) 2164 return ret; 2165 data->tach[INPUT][i] = ret; 2166 } 2167 2168 /* Updated by hw when in auto mode */ 2169 for (i = 0; i < ADT7475_PWM_COUNT; i++) { 2170 if (i == 1 && !data->has_pwm2) 2171 continue; 2172 ret = adt7475_read(PWM_REG(i)); 2173 if (ret < 0) 2174 return ret; 2175 data->pwm[INPUT][i] = ret; 2176 } 2177 2178 if (data->has_vid) { 2179 ret = adt7475_read(REG_VID); 2180 if (ret < 0) 2181 return ret; 2182 data->vid = ret & 0x3f; 2183 } 2184 2185 return 0; 2186 } 2187 2188 static struct adt7475_data *adt7475_update_device(struct device *dev) 2189 { 2190 struct adt7475_data *data = dev_get_drvdata(dev); 2191 int ret; 2192 2193 mutex_lock(&data->lock); 2194 2195 /* Measurement values update every 2 seconds */ 2196 if (time_after(jiffies, data->measure_updated + HZ * 2) || 2197 !data->valid) { 2198 ret = adt7475_update_measure(dev); 2199 if (ret) { 2200 data->valid = false; 2201 mutex_unlock(&data->lock); 2202 return ERR_PTR(ret); 2203 } 2204 data->measure_updated = jiffies; 2205 data->valid = true; 2206 } 2207 2208 mutex_unlock(&data->lock); 2209 2210 return data; 2211 } 2212 2213 module_i2c_driver(adt7475_driver); 2214 2215 MODULE_AUTHOR("Advanced Micro Devices, Inc"); 2216 MODULE_DESCRIPTION("adt7475 driver"); 2217 MODULE_LICENSE("GPL"); 2218