lm85.c (50134B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * lm85.c - Part of lm_sensors, Linux kernel modules for hardware 4 * monitoring 5 * Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl> 6 * Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> 7 * Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> 8 * Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> 9 * Copyright (C) 2007--2014 Jean Delvare <jdelvare@suse.de> 10 * 11 * Chip details at <http://www.national.com/ds/LM/LM85.pdf> 12 */ 13 14#include <linux/module.h> 15#include <linux/of_device.h> 16#include <linux/init.h> 17#include <linux/slab.h> 18#include <linux/jiffies.h> 19#include <linux/i2c.h> 20#include <linux/hwmon.h> 21#include <linux/hwmon-vid.h> 22#include <linux/hwmon-sysfs.h> 23#include <linux/err.h> 24#include <linux/mutex.h> 25#include <linux/util_macros.h> 26 27/* Addresses to scan */ 28static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 29 30enum chips { 31 lm85, lm96000, 32 adm1027, adt7463, adt7468, 33 emc6d100, emc6d102, emc6d103, emc6d103s 34}; 35 36/* The LM85 registers */ 37 38#define LM85_REG_IN(nr) (0x20 + (nr)) 39#define LM85_REG_IN_MIN(nr) (0x44 + (nr) * 2) 40#define LM85_REG_IN_MAX(nr) (0x45 + (nr) * 2) 41 42#define LM85_REG_TEMP(nr) (0x25 + (nr)) 43#define LM85_REG_TEMP_MIN(nr) (0x4e + (nr) * 2) 44#define LM85_REG_TEMP_MAX(nr) (0x4f + (nr) * 2) 45 46/* Fan speeds are LSB, MSB (2 bytes) */ 47#define LM85_REG_FAN(nr) (0x28 + (nr) * 2) 48#define LM85_REG_FAN_MIN(nr) (0x54 + (nr) * 2) 49 50#define LM85_REG_PWM(nr) (0x30 + (nr)) 51 52#define LM85_REG_COMPANY 0x3e 53#define LM85_REG_VERSTEP 0x3f 54 55#define ADT7468_REG_CFG5 0x7c 56#define ADT7468_OFF64 (1 << 0) 57#define ADT7468_HFPWM (1 << 1) 58#define IS_ADT7468_OFF64(data) \ 59 ((data)->type == adt7468 && !((data)->cfg5 & ADT7468_OFF64)) 60#define IS_ADT7468_HFPWM(data) \ 61 ((data)->type == adt7468 && !((data)->cfg5 & ADT7468_HFPWM)) 62 63/* These are the recognized values for the above regs */ 64#define LM85_COMPANY_NATIONAL 0x01 65#define LM85_COMPANY_ANALOG_DEV 0x41 66#define LM85_COMPANY_SMSC 0x5c 67#define LM85_VERSTEP_LM85C 0x60 68#define LM85_VERSTEP_LM85B 0x62 69#define LM85_VERSTEP_LM96000_1 0x68 70#define LM85_VERSTEP_LM96000_2 0x69 71#define LM85_VERSTEP_ADM1027 0x60 72#define LM85_VERSTEP_ADT7463 0x62 73#define LM85_VERSTEP_ADT7463C 0x6A 74#define LM85_VERSTEP_ADT7468_1 0x71 75#define LM85_VERSTEP_ADT7468_2 0x72 76#define LM85_VERSTEP_EMC6D100_A0 0x60 77#define LM85_VERSTEP_EMC6D100_A1 0x61 78#define LM85_VERSTEP_EMC6D102 0x65 79#define LM85_VERSTEP_EMC6D103_A0 0x68 80#define LM85_VERSTEP_EMC6D103_A1 0x69 81#define LM85_VERSTEP_EMC6D103S 0x6A /* Also known as EMC6D103:A2 */ 82 83#define LM85_REG_CONFIG 0x40 84 85#define LM85_REG_ALARM1 0x41 86#define LM85_REG_ALARM2 0x42 87 88#define LM85_REG_VID 0x43 89 90/* Automated FAN control */ 91#define LM85_REG_AFAN_CONFIG(nr) (0x5c + (nr)) 92#define LM85_REG_AFAN_RANGE(nr) (0x5f + (nr)) 93#define LM85_REG_AFAN_SPIKE1 0x62 94#define LM85_REG_AFAN_MINPWM(nr) (0x64 + (nr)) 95#define LM85_REG_AFAN_LIMIT(nr) (0x67 + (nr)) 96#define LM85_REG_AFAN_CRITICAL(nr) (0x6a + (nr)) 97#define LM85_REG_AFAN_HYST1 0x6d 98#define LM85_REG_AFAN_HYST2 0x6e 99 100#define ADM1027_REG_EXTEND_ADC1 0x76 101#define ADM1027_REG_EXTEND_ADC2 0x77 102 103#define EMC6D100_REG_ALARM3 0x7d 104/* IN5, IN6 and IN7 */ 105#define EMC6D100_REG_IN(nr) (0x70 + ((nr) - 5)) 106#define EMC6D100_REG_IN_MIN(nr) (0x73 + ((nr) - 5) * 2) 107#define EMC6D100_REG_IN_MAX(nr) (0x74 + ((nr) - 5) * 2) 108#define EMC6D102_REG_EXTEND_ADC1 0x85 109#define EMC6D102_REG_EXTEND_ADC2 0x86 110#define EMC6D102_REG_EXTEND_ADC3 0x87 111#define EMC6D102_REG_EXTEND_ADC4 0x88 112 113/* 114 * Conversions. Rounding and limit checking is only done on the TO_REG 115 * variants. Note that you should be a bit careful with which arguments 116 * these macros are called: arguments may be evaluated more than once. 117 */ 118 119/* IN are scaled according to built-in resistors */ 120static const int lm85_scaling[] = { /* .001 Volts */ 121 2500, 2250, 3300, 5000, 12000, 122 3300, 1500, 1800 /*EMC6D100*/ 123}; 124#define SCALE(val, from, to) (((val) * (to) + ((from) / 2)) / (from)) 125 126#define INS_TO_REG(n, val) \ 127 SCALE(clamp_val(val, 0, 255 * lm85_scaling[n] / 192), \ 128 lm85_scaling[n], 192) 129 130#define INSEXT_FROM_REG(n, val, ext) \ 131 SCALE(((val) << 4) + (ext), 192 << 4, lm85_scaling[n]) 132 133#define INS_FROM_REG(n, val) SCALE((val), 192, lm85_scaling[n]) 134 135/* FAN speed is measured using 90kHz clock */ 136static inline u16 FAN_TO_REG(unsigned long val) 137{ 138 if (!val) 139 return 0xffff; 140 return clamp_val(5400000 / val, 1, 0xfffe); 141} 142#define FAN_FROM_REG(val) ((val) == 0 ? -1 : (val) == 0xffff ? 0 : \ 143 5400000 / (val)) 144 145/* Temperature is reported in .001 degC increments */ 146#define TEMP_TO_REG(val) \ 147 DIV_ROUND_CLOSEST(clamp_val((val), -127000, 127000), 1000) 148#define TEMPEXT_FROM_REG(val, ext) \ 149 SCALE(((val) << 4) + (ext), 16, 1000) 150#define TEMP_FROM_REG(val) ((val) * 1000) 151 152#define PWM_TO_REG(val) clamp_val(val, 0, 255) 153#define PWM_FROM_REG(val) (val) 154 155/* 156 * ZONEs have the following parameters: 157 * Limit (low) temp, 1. degC 158 * Hysteresis (below limit), 1. degC (0-15) 159 * Range of speed control, .1 degC (2-80) 160 * Critical (high) temp, 1. degC 161 * 162 * FAN PWMs have the following parameters: 163 * Reference Zone, 1, 2, 3, etc. 164 * Spinup time, .05 sec 165 * PWM value at limit/low temp, 1 count 166 * PWM Frequency, 1. Hz 167 * PWM is Min or OFF below limit, flag 168 * Invert PWM output, flag 169 * 170 * Some chips filter the temp, others the fan. 171 * Filter constant (or disabled) .1 seconds 172 */ 173 174/* These are the zone temperature range encodings in .001 degree C */ 175static const int lm85_range_map[] = { 176 2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000, 177 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 178}; 179 180static int RANGE_TO_REG(long range) 181{ 182 return find_closest(range, lm85_range_map, ARRAY_SIZE(lm85_range_map)); 183} 184#define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f] 185 186/* These are the PWM frequency encodings */ 187static const int lm85_freq_map[] = { /* 1 Hz */ 188 10, 15, 23, 30, 38, 47, 61, 94 189}; 190 191static const int lm96000_freq_map[] = { /* 1 Hz */ 192 10, 15, 23, 30, 38, 47, 61, 94, 193 22500, 24000, 25700, 25700, 27700, 27700, 30000, 30000 194}; 195 196static const int adm1027_freq_map[] = { /* 1 Hz */ 197 11, 15, 22, 29, 35, 44, 59, 88 198}; 199 200static int FREQ_TO_REG(const int *map, 201 unsigned int map_size, unsigned long freq) 202{ 203 return find_closest(freq, map, map_size); 204} 205 206static int FREQ_FROM_REG(const int *map, unsigned int map_size, u8 reg) 207{ 208 return map[reg % map_size]; 209} 210 211/* 212 * Since we can't use strings, I'm abusing these numbers 213 * to stand in for the following meanings: 214 * 1 -- PWM responds to Zone 1 215 * 2 -- PWM responds to Zone 2 216 * 3 -- PWM responds to Zone 3 217 * 23 -- PWM responds to the higher temp of Zone 2 or 3 218 * 123 -- PWM responds to highest of Zone 1, 2, or 3 219 * 0 -- PWM is always at 0% (ie, off) 220 * -1 -- PWM is always at 100% 221 * -2 -- PWM responds to manual control 222 */ 223 224static const int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; 225#define ZONE_FROM_REG(val) lm85_zone_map[(val) >> 5] 226 227static int ZONE_TO_REG(int zone) 228{ 229 int i; 230 231 for (i = 0; i <= 7; ++i) 232 if (zone == lm85_zone_map[i]) 233 break; 234 if (i > 7) /* Not found. */ 235 i = 3; /* Always 100% */ 236 return i << 5; 237} 238 239#define HYST_TO_REG(val) clamp_val(((val) + 500) / 1000, 0, 15) 240#define HYST_FROM_REG(val) ((val) * 1000) 241 242/* 243 * Chip sampling rates 244 * 245 * Some sensors are not updated more frequently than once per second 246 * so it doesn't make sense to read them more often than that. 247 * We cache the results and return the saved data if the driver 248 * is called again before a second has elapsed. 249 * 250 * Also, there is significant configuration data for this chip 251 * given the automatic PWM fan control that is possible. There 252 * are about 47 bytes of config data to only 22 bytes of actual 253 * readings. So, we keep the config data up to date in the cache 254 * when it is written and only sample it once every 1 *minute* 255 */ 256#define LM85_DATA_INTERVAL (HZ + HZ / 2) 257#define LM85_CONFIG_INTERVAL (1 * 60 * HZ) 258 259/* 260 * LM85 can automatically adjust fan speeds based on temperature 261 * This structure encapsulates an entire Zone config. There are 262 * three zones (one for each temperature input) on the lm85 263 */ 264struct lm85_zone { 265 s8 limit; /* Low temp limit */ 266 u8 hyst; /* Low limit hysteresis. (0-15) */ 267 u8 range; /* Temp range, encoded */ 268 s8 critical; /* "All fans ON" temp limit */ 269 u8 max_desired; /* 270 * Actual "max" temperature specified. Preserved 271 * to prevent "drift" as other autofan control 272 * values change. 273 */ 274}; 275 276struct lm85_autofan { 277 u8 config; /* Register value */ 278 u8 min_pwm; /* Minimum PWM value, encoded */ 279 u8 min_off; /* Min PWM or OFF below "limit", flag */ 280}; 281 282/* 283 * For each registered chip, we need to keep some data in memory. 284 * The structure is dynamically allocated. 285 */ 286struct lm85_data { 287 struct i2c_client *client; 288 const struct attribute_group *groups[6]; 289 const int *freq_map; 290 unsigned int freq_map_size; 291 292 enum chips type; 293 294 bool has_vid5; /* true if VID5 is configured for ADT7463 or ADT7468 */ 295 296 struct mutex update_lock; 297 bool valid; /* true if following fields are valid */ 298 unsigned long last_reading; /* In jiffies */ 299 unsigned long last_config; /* In jiffies */ 300 301 u8 in[8]; /* Register value */ 302 u8 in_max[8]; /* Register value */ 303 u8 in_min[8]; /* Register value */ 304 s8 temp[3]; /* Register value */ 305 s8 temp_min[3]; /* Register value */ 306 s8 temp_max[3]; /* Register value */ 307 u16 fan[4]; /* Register value */ 308 u16 fan_min[4]; /* Register value */ 309 u8 pwm[3]; /* Register value */ 310 u8 pwm_freq[3]; /* Register encoding */ 311 u8 temp_ext[3]; /* Decoded values */ 312 u8 in_ext[8]; /* Decoded values */ 313 u8 vid; /* Register value */ 314 u8 vrm; /* VRM version */ 315 u32 alarms; /* Register encoding, combined */ 316 u8 cfg5; /* Config Register 5 on ADT7468 */ 317 struct lm85_autofan autofan[3]; 318 struct lm85_zone zone[3]; 319}; 320 321static int lm85_read_value(struct i2c_client *client, u8 reg) 322{ 323 int res; 324 325 /* What size location is it? */ 326 switch (reg) { 327 case LM85_REG_FAN(0): /* Read WORD data */ 328 case LM85_REG_FAN(1): 329 case LM85_REG_FAN(2): 330 case LM85_REG_FAN(3): 331 case LM85_REG_FAN_MIN(0): 332 case LM85_REG_FAN_MIN(1): 333 case LM85_REG_FAN_MIN(2): 334 case LM85_REG_FAN_MIN(3): 335 case LM85_REG_ALARM1: /* Read both bytes at once */ 336 res = i2c_smbus_read_byte_data(client, reg) & 0xff; 337 res |= i2c_smbus_read_byte_data(client, reg + 1) << 8; 338 break; 339 default: /* Read BYTE data */ 340 res = i2c_smbus_read_byte_data(client, reg); 341 break; 342 } 343 344 return res; 345} 346 347static void lm85_write_value(struct i2c_client *client, u8 reg, int value) 348{ 349 switch (reg) { 350 case LM85_REG_FAN(0): /* Write WORD data */ 351 case LM85_REG_FAN(1): 352 case LM85_REG_FAN(2): 353 case LM85_REG_FAN(3): 354 case LM85_REG_FAN_MIN(0): 355 case LM85_REG_FAN_MIN(1): 356 case LM85_REG_FAN_MIN(2): 357 case LM85_REG_FAN_MIN(3): 358 /* NOTE: ALARM is read only, so not included here */ 359 i2c_smbus_write_byte_data(client, reg, value & 0xff); 360 i2c_smbus_write_byte_data(client, reg + 1, value >> 8); 361 break; 362 default: /* Write BYTE data */ 363 i2c_smbus_write_byte_data(client, reg, value); 364 break; 365 } 366} 367 368static struct lm85_data *lm85_update_device(struct device *dev) 369{ 370 struct lm85_data *data = dev_get_drvdata(dev); 371 struct i2c_client *client = data->client; 372 int i; 373 374 mutex_lock(&data->update_lock); 375 376 if (!data->valid || 377 time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) { 378 /* Things that change quickly */ 379 dev_dbg(&client->dev, "Reading sensor values\n"); 380 381 /* 382 * Have to read extended bits first to "freeze" the 383 * more significant bits that are read later. 384 * There are 2 additional resolution bits per channel and we 385 * have room for 4, so we shift them to the left. 386 */ 387 if (data->type == adm1027 || data->type == adt7463 || 388 data->type == adt7468) { 389 int ext1 = lm85_read_value(client, 390 ADM1027_REG_EXTEND_ADC1); 391 int ext2 = lm85_read_value(client, 392 ADM1027_REG_EXTEND_ADC2); 393 int val = (ext1 << 8) + ext2; 394 395 for (i = 0; i <= 4; i++) 396 data->in_ext[i] = 397 ((val >> (i * 2)) & 0x03) << 2; 398 399 for (i = 0; i <= 2; i++) 400 data->temp_ext[i] = 401 (val >> ((i + 4) * 2)) & 0x0c; 402 } 403 404 data->vid = lm85_read_value(client, LM85_REG_VID); 405 406 for (i = 0; i <= 3; ++i) { 407 data->in[i] = 408 lm85_read_value(client, LM85_REG_IN(i)); 409 data->fan[i] = 410 lm85_read_value(client, LM85_REG_FAN(i)); 411 } 412 413 if (!data->has_vid5) 414 data->in[4] = lm85_read_value(client, LM85_REG_IN(4)); 415 416 if (data->type == adt7468) 417 data->cfg5 = lm85_read_value(client, ADT7468_REG_CFG5); 418 419 for (i = 0; i <= 2; ++i) { 420 data->temp[i] = 421 lm85_read_value(client, LM85_REG_TEMP(i)); 422 data->pwm[i] = 423 lm85_read_value(client, LM85_REG_PWM(i)); 424 425 if (IS_ADT7468_OFF64(data)) 426 data->temp[i] -= 64; 427 } 428 429 data->alarms = lm85_read_value(client, LM85_REG_ALARM1); 430 431 if (data->type == emc6d100) { 432 /* Three more voltage sensors */ 433 for (i = 5; i <= 7; ++i) { 434 data->in[i] = lm85_read_value(client, 435 EMC6D100_REG_IN(i)); 436 } 437 /* More alarm bits */ 438 data->alarms |= lm85_read_value(client, 439 EMC6D100_REG_ALARM3) << 16; 440 } else if (data->type == emc6d102 || data->type == emc6d103 || 441 data->type == emc6d103s) { 442 /* 443 * Have to read LSB bits after the MSB ones because 444 * the reading of the MSB bits has frozen the 445 * LSBs (backward from the ADM1027). 446 */ 447 int ext1 = lm85_read_value(client, 448 EMC6D102_REG_EXTEND_ADC1); 449 int ext2 = lm85_read_value(client, 450 EMC6D102_REG_EXTEND_ADC2); 451 int ext3 = lm85_read_value(client, 452 EMC6D102_REG_EXTEND_ADC3); 453 int ext4 = lm85_read_value(client, 454 EMC6D102_REG_EXTEND_ADC4); 455 data->in_ext[0] = ext3 & 0x0f; 456 data->in_ext[1] = ext4 & 0x0f; 457 data->in_ext[2] = ext4 >> 4; 458 data->in_ext[3] = ext3 >> 4; 459 data->in_ext[4] = ext2 >> 4; 460 461 data->temp_ext[0] = ext1 & 0x0f; 462 data->temp_ext[1] = ext2 & 0x0f; 463 data->temp_ext[2] = ext1 >> 4; 464 } 465 466 data->last_reading = jiffies; 467 } /* last_reading */ 468 469 if (!data->valid || 470 time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) { 471 /* Things that don't change often */ 472 dev_dbg(&client->dev, "Reading config values\n"); 473 474 for (i = 0; i <= 3; ++i) { 475 data->in_min[i] = 476 lm85_read_value(client, LM85_REG_IN_MIN(i)); 477 data->in_max[i] = 478 lm85_read_value(client, LM85_REG_IN_MAX(i)); 479 data->fan_min[i] = 480 lm85_read_value(client, LM85_REG_FAN_MIN(i)); 481 } 482 483 if (!data->has_vid5) { 484 data->in_min[4] = lm85_read_value(client, 485 LM85_REG_IN_MIN(4)); 486 data->in_max[4] = lm85_read_value(client, 487 LM85_REG_IN_MAX(4)); 488 } 489 490 if (data->type == emc6d100) { 491 for (i = 5; i <= 7; ++i) { 492 data->in_min[i] = lm85_read_value(client, 493 EMC6D100_REG_IN_MIN(i)); 494 data->in_max[i] = lm85_read_value(client, 495 EMC6D100_REG_IN_MAX(i)); 496 } 497 } 498 499 for (i = 0; i <= 2; ++i) { 500 int val; 501 502 data->temp_min[i] = 503 lm85_read_value(client, LM85_REG_TEMP_MIN(i)); 504 data->temp_max[i] = 505 lm85_read_value(client, LM85_REG_TEMP_MAX(i)); 506 507 data->autofan[i].config = 508 lm85_read_value(client, LM85_REG_AFAN_CONFIG(i)); 509 val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); 510 data->pwm_freq[i] = val % data->freq_map_size; 511 data->zone[i].range = val >> 4; 512 data->autofan[i].min_pwm = 513 lm85_read_value(client, LM85_REG_AFAN_MINPWM(i)); 514 data->zone[i].limit = 515 lm85_read_value(client, LM85_REG_AFAN_LIMIT(i)); 516 data->zone[i].critical = 517 lm85_read_value(client, LM85_REG_AFAN_CRITICAL(i)); 518 519 if (IS_ADT7468_OFF64(data)) { 520 data->temp_min[i] -= 64; 521 data->temp_max[i] -= 64; 522 data->zone[i].limit -= 64; 523 data->zone[i].critical -= 64; 524 } 525 } 526 527 if (data->type != emc6d103s) { 528 i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1); 529 data->autofan[0].min_off = (i & 0x20) != 0; 530 data->autofan[1].min_off = (i & 0x40) != 0; 531 data->autofan[2].min_off = (i & 0x80) != 0; 532 533 i = lm85_read_value(client, LM85_REG_AFAN_HYST1); 534 data->zone[0].hyst = i >> 4; 535 data->zone[1].hyst = i & 0x0f; 536 537 i = lm85_read_value(client, LM85_REG_AFAN_HYST2); 538 data->zone[2].hyst = i >> 4; 539 } 540 541 data->last_config = jiffies; 542 } /* last_config */ 543 544 data->valid = true; 545 546 mutex_unlock(&data->update_lock); 547 548 return data; 549} 550 551/* 4 Fans */ 552static ssize_t fan_show(struct device *dev, struct device_attribute *attr, 553 char *buf) 554{ 555 int nr = to_sensor_dev_attr(attr)->index; 556 struct lm85_data *data = lm85_update_device(dev); 557 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr])); 558} 559 560static ssize_t fan_min_show(struct device *dev, struct device_attribute *attr, 561 char *buf) 562{ 563 int nr = to_sensor_dev_attr(attr)->index; 564 struct lm85_data *data = lm85_update_device(dev); 565 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr])); 566} 567 568static ssize_t fan_min_store(struct device *dev, 569 struct device_attribute *attr, const char *buf, 570 size_t count) 571{ 572 int nr = to_sensor_dev_attr(attr)->index; 573 struct lm85_data *data = dev_get_drvdata(dev); 574 struct i2c_client *client = data->client; 575 unsigned long val; 576 int err; 577 578 err = kstrtoul(buf, 10, &val); 579 if (err) 580 return err; 581 582 mutex_lock(&data->update_lock); 583 data->fan_min[nr] = FAN_TO_REG(val); 584 lm85_write_value(client, LM85_REG_FAN_MIN(nr), data->fan_min[nr]); 585 mutex_unlock(&data->update_lock); 586 return count; 587} 588 589static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0); 590static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0); 591static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1); 592static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1); 593static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2); 594static SENSOR_DEVICE_ATTR_RW(fan3_min, fan_min, 2); 595static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3); 596static SENSOR_DEVICE_ATTR_RW(fan4_min, fan_min, 3); 597 598/* vid, vrm, alarms */ 599 600static ssize_t cpu0_vid_show(struct device *dev, 601 struct device_attribute *attr, char *buf) 602{ 603 struct lm85_data *data = lm85_update_device(dev); 604 int vid; 605 606 if (data->has_vid5) { 607 /* 6-pin VID (VRM 10) */ 608 vid = vid_from_reg(data->vid & 0x3f, data->vrm); 609 } else { 610 /* 5-pin VID (VRM 9) */ 611 vid = vid_from_reg(data->vid & 0x1f, data->vrm); 612 } 613 614 return sprintf(buf, "%d\n", vid); 615} 616 617static DEVICE_ATTR_RO(cpu0_vid); 618 619static ssize_t vrm_show(struct device *dev, struct device_attribute *attr, 620 char *buf) 621{ 622 struct lm85_data *data = dev_get_drvdata(dev); 623 return sprintf(buf, "%ld\n", (long) data->vrm); 624} 625 626static ssize_t vrm_store(struct device *dev, struct device_attribute *attr, 627 const char *buf, size_t count) 628{ 629 struct lm85_data *data = dev_get_drvdata(dev); 630 unsigned long val; 631 int err; 632 633 err = kstrtoul(buf, 10, &val); 634 if (err) 635 return err; 636 637 if (val > 255) 638 return -EINVAL; 639 640 data->vrm = val; 641 return count; 642} 643 644static DEVICE_ATTR_RW(vrm); 645 646static ssize_t alarms_show(struct device *dev, struct device_attribute *attr, 647 char *buf) 648{ 649 struct lm85_data *data = lm85_update_device(dev); 650 return sprintf(buf, "%u\n", data->alarms); 651} 652 653static DEVICE_ATTR_RO(alarms); 654 655static ssize_t alarm_show(struct device *dev, struct device_attribute *attr, 656 char *buf) 657{ 658 int nr = to_sensor_dev_attr(attr)->index; 659 struct lm85_data *data = lm85_update_device(dev); 660 return sprintf(buf, "%u\n", (data->alarms >> nr) & 1); 661} 662 663static SENSOR_DEVICE_ATTR_RO(in0_alarm, alarm, 0); 664static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm, 1); 665static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm, 2); 666static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm, 3); 667static SENSOR_DEVICE_ATTR_RO(in4_alarm, alarm, 8); 668static SENSOR_DEVICE_ATTR_RO(in5_alarm, alarm, 18); 669static SENSOR_DEVICE_ATTR_RO(in6_alarm, alarm, 16); 670static SENSOR_DEVICE_ATTR_RO(in7_alarm, alarm, 17); 671static SENSOR_DEVICE_ATTR_RO(temp1_alarm, alarm, 4); 672static SENSOR_DEVICE_ATTR_RO(temp1_fault, alarm, 14); 673static SENSOR_DEVICE_ATTR_RO(temp2_alarm, alarm, 5); 674static SENSOR_DEVICE_ATTR_RO(temp3_alarm, alarm, 6); 675static SENSOR_DEVICE_ATTR_RO(temp3_fault, alarm, 15); 676static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 10); 677static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 11); 678static SENSOR_DEVICE_ATTR_RO(fan3_alarm, alarm, 12); 679static SENSOR_DEVICE_ATTR_RO(fan4_alarm, alarm, 13); 680 681/* pwm */ 682 683static ssize_t pwm_show(struct device *dev, struct device_attribute *attr, 684 char *buf) 685{ 686 int nr = to_sensor_dev_attr(attr)->index; 687 struct lm85_data *data = lm85_update_device(dev); 688 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr])); 689} 690 691static ssize_t pwm_store(struct device *dev, struct device_attribute *attr, 692 const char *buf, size_t count) 693{ 694 int nr = to_sensor_dev_attr(attr)->index; 695 struct lm85_data *data = dev_get_drvdata(dev); 696 struct i2c_client *client = data->client; 697 unsigned long val; 698 int err; 699 700 err = kstrtoul(buf, 10, &val); 701 if (err) 702 return err; 703 704 mutex_lock(&data->update_lock); 705 data->pwm[nr] = PWM_TO_REG(val); 706 lm85_write_value(client, LM85_REG_PWM(nr), data->pwm[nr]); 707 mutex_unlock(&data->update_lock); 708 return count; 709} 710 711static ssize_t pwm_enable_show(struct device *dev, 712 struct device_attribute *attr, char *buf) 713{ 714 int nr = to_sensor_dev_attr(attr)->index; 715 struct lm85_data *data = lm85_update_device(dev); 716 int pwm_zone, enable; 717 718 pwm_zone = ZONE_FROM_REG(data->autofan[nr].config); 719 switch (pwm_zone) { 720 case -1: /* PWM is always at 100% */ 721 enable = 0; 722 break; 723 case 0: /* PWM is always at 0% */ 724 case -2: /* PWM responds to manual control */ 725 enable = 1; 726 break; 727 default: /* PWM in automatic mode */ 728 enable = 2; 729 } 730 return sprintf(buf, "%d\n", enable); 731} 732 733static ssize_t pwm_enable_store(struct device *dev, 734 struct device_attribute *attr, 735 const char *buf, size_t count) 736{ 737 int nr = to_sensor_dev_attr(attr)->index; 738 struct lm85_data *data = dev_get_drvdata(dev); 739 struct i2c_client *client = data->client; 740 u8 config; 741 unsigned long val; 742 int err; 743 744 err = kstrtoul(buf, 10, &val); 745 if (err) 746 return err; 747 748 switch (val) { 749 case 0: 750 config = 3; 751 break; 752 case 1: 753 config = 7; 754 break; 755 case 2: 756 /* 757 * Here we have to choose arbitrarily one of the 5 possible 758 * configurations; I go for the safest 759 */ 760 config = 6; 761 break; 762 default: 763 return -EINVAL; 764 } 765 766 mutex_lock(&data->update_lock); 767 data->autofan[nr].config = lm85_read_value(client, 768 LM85_REG_AFAN_CONFIG(nr)); 769 data->autofan[nr].config = (data->autofan[nr].config & ~0xe0) 770 | (config << 5); 771 lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr), 772 data->autofan[nr].config); 773 mutex_unlock(&data->update_lock); 774 return count; 775} 776 777static ssize_t pwm_freq_show(struct device *dev, 778 struct device_attribute *attr, char *buf) 779{ 780 int nr = to_sensor_dev_attr(attr)->index; 781 struct lm85_data *data = lm85_update_device(dev); 782 int freq; 783 784 if (IS_ADT7468_HFPWM(data)) 785 freq = 22500; 786 else 787 freq = FREQ_FROM_REG(data->freq_map, data->freq_map_size, 788 data->pwm_freq[nr]); 789 790 return sprintf(buf, "%d\n", freq); 791} 792 793static ssize_t pwm_freq_store(struct device *dev, 794 struct device_attribute *attr, const char *buf, 795 size_t count) 796{ 797 int nr = to_sensor_dev_attr(attr)->index; 798 struct lm85_data *data = dev_get_drvdata(dev); 799 struct i2c_client *client = data->client; 800 unsigned long val; 801 int err; 802 803 err = kstrtoul(buf, 10, &val); 804 if (err) 805 return err; 806 807 mutex_lock(&data->update_lock); 808 /* 809 * The ADT7468 has a special high-frequency PWM output mode, 810 * where all PWM outputs are driven by a 22.5 kHz clock. 811 * This might confuse the user, but there's not much we can do. 812 */ 813 if (data->type == adt7468 && val >= 11300) { /* High freq. mode */ 814 data->cfg5 &= ~ADT7468_HFPWM; 815 lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5); 816 } else { /* Low freq. mode */ 817 data->pwm_freq[nr] = FREQ_TO_REG(data->freq_map, 818 data->freq_map_size, val); 819 lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), 820 (data->zone[nr].range << 4) 821 | data->pwm_freq[nr]); 822 if (data->type == adt7468) { 823 data->cfg5 |= ADT7468_HFPWM; 824 lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5); 825 } 826 } 827 mutex_unlock(&data->update_lock); 828 return count; 829} 830 831static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0); 832static SENSOR_DEVICE_ATTR_RW(pwm1_enable, pwm_enable, 0); 833static SENSOR_DEVICE_ATTR_RW(pwm1_freq, pwm_freq, 0); 834static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1); 835static SENSOR_DEVICE_ATTR_RW(pwm2_enable, pwm_enable, 1); 836static SENSOR_DEVICE_ATTR_RW(pwm2_freq, pwm_freq, 1); 837static SENSOR_DEVICE_ATTR_RW(pwm3, pwm, 2); 838static SENSOR_DEVICE_ATTR_RW(pwm3_enable, pwm_enable, 2); 839static SENSOR_DEVICE_ATTR_RW(pwm3_freq, pwm_freq, 2); 840 841/* Voltages */ 842 843static ssize_t in_show(struct device *dev, struct device_attribute *attr, 844 char *buf) 845{ 846 int nr = to_sensor_dev_attr(attr)->index; 847 struct lm85_data *data = lm85_update_device(dev); 848 return sprintf(buf, "%d\n", INSEXT_FROM_REG(nr, data->in[nr], 849 data->in_ext[nr])); 850} 851 852static ssize_t in_min_show(struct device *dev, struct device_attribute *attr, 853 char *buf) 854{ 855 int nr = to_sensor_dev_attr(attr)->index; 856 struct lm85_data *data = lm85_update_device(dev); 857 return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr])); 858} 859 860static ssize_t in_min_store(struct device *dev, struct device_attribute *attr, 861 const char *buf, size_t count) 862{ 863 int nr = to_sensor_dev_attr(attr)->index; 864 struct lm85_data *data = dev_get_drvdata(dev); 865 struct i2c_client *client = data->client; 866 long val; 867 int err; 868 869 err = kstrtol(buf, 10, &val); 870 if (err) 871 return err; 872 873 mutex_lock(&data->update_lock); 874 data->in_min[nr] = INS_TO_REG(nr, val); 875 lm85_write_value(client, LM85_REG_IN_MIN(nr), data->in_min[nr]); 876 mutex_unlock(&data->update_lock); 877 return count; 878} 879 880static ssize_t in_max_show(struct device *dev, struct device_attribute *attr, 881 char *buf) 882{ 883 int nr = to_sensor_dev_attr(attr)->index; 884 struct lm85_data *data = lm85_update_device(dev); 885 return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr])); 886} 887 888static ssize_t in_max_store(struct device *dev, struct device_attribute *attr, 889 const char *buf, size_t count) 890{ 891 int nr = to_sensor_dev_attr(attr)->index; 892 struct lm85_data *data = dev_get_drvdata(dev); 893 struct i2c_client *client = data->client; 894 long val; 895 int err; 896 897 err = kstrtol(buf, 10, &val); 898 if (err) 899 return err; 900 901 mutex_lock(&data->update_lock); 902 data->in_max[nr] = INS_TO_REG(nr, val); 903 lm85_write_value(client, LM85_REG_IN_MAX(nr), data->in_max[nr]); 904 mutex_unlock(&data->update_lock); 905 return count; 906} 907 908static SENSOR_DEVICE_ATTR_RO(in0_input, in, 0); 909static SENSOR_DEVICE_ATTR_RW(in0_min, in_min, 0); 910static SENSOR_DEVICE_ATTR_RW(in0_max, in_max, 0); 911static SENSOR_DEVICE_ATTR_RO(in1_input, in, 1); 912static SENSOR_DEVICE_ATTR_RW(in1_min, in_min, 1); 913static SENSOR_DEVICE_ATTR_RW(in1_max, in_max, 1); 914static SENSOR_DEVICE_ATTR_RO(in2_input, in, 2); 915static SENSOR_DEVICE_ATTR_RW(in2_min, in_min, 2); 916static SENSOR_DEVICE_ATTR_RW(in2_max, in_max, 2); 917static SENSOR_DEVICE_ATTR_RO(in3_input, in, 3); 918static SENSOR_DEVICE_ATTR_RW(in3_min, in_min, 3); 919static SENSOR_DEVICE_ATTR_RW(in3_max, in_max, 3); 920static SENSOR_DEVICE_ATTR_RO(in4_input, in, 4); 921static SENSOR_DEVICE_ATTR_RW(in4_min, in_min, 4); 922static SENSOR_DEVICE_ATTR_RW(in4_max, in_max, 4); 923static SENSOR_DEVICE_ATTR_RO(in5_input, in, 5); 924static SENSOR_DEVICE_ATTR_RW(in5_min, in_min, 5); 925static SENSOR_DEVICE_ATTR_RW(in5_max, in_max, 5); 926static SENSOR_DEVICE_ATTR_RO(in6_input, in, 6); 927static SENSOR_DEVICE_ATTR_RW(in6_min, in_min, 6); 928static SENSOR_DEVICE_ATTR_RW(in6_max, in_max, 6); 929static SENSOR_DEVICE_ATTR_RO(in7_input, in, 7); 930static SENSOR_DEVICE_ATTR_RW(in7_min, in_min, 7); 931static SENSOR_DEVICE_ATTR_RW(in7_max, in_max, 7); 932 933/* Temps */ 934 935static ssize_t temp_show(struct device *dev, struct device_attribute *attr, 936 char *buf) 937{ 938 int nr = to_sensor_dev_attr(attr)->index; 939 struct lm85_data *data = lm85_update_device(dev); 940 return sprintf(buf, "%d\n", TEMPEXT_FROM_REG(data->temp[nr], 941 data->temp_ext[nr])); 942} 943 944static ssize_t temp_min_show(struct device *dev, 945 struct device_attribute *attr, char *buf) 946{ 947 int nr = to_sensor_dev_attr(attr)->index; 948 struct lm85_data *data = lm85_update_device(dev); 949 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr])); 950} 951 952static ssize_t temp_min_store(struct device *dev, 953 struct device_attribute *attr, const char *buf, 954 size_t count) 955{ 956 int nr = to_sensor_dev_attr(attr)->index; 957 struct lm85_data *data = dev_get_drvdata(dev); 958 struct i2c_client *client = data->client; 959 long val; 960 int err; 961 962 err = kstrtol(buf, 10, &val); 963 if (err) 964 return err; 965 966 if (IS_ADT7468_OFF64(data)) 967 val += 64; 968 969 mutex_lock(&data->update_lock); 970 data->temp_min[nr] = TEMP_TO_REG(val); 971 lm85_write_value(client, LM85_REG_TEMP_MIN(nr), data->temp_min[nr]); 972 mutex_unlock(&data->update_lock); 973 return count; 974} 975 976static ssize_t temp_max_show(struct device *dev, 977 struct device_attribute *attr, char *buf) 978{ 979 int nr = to_sensor_dev_attr(attr)->index; 980 struct lm85_data *data = lm85_update_device(dev); 981 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr])); 982} 983 984static ssize_t temp_max_store(struct device *dev, 985 struct device_attribute *attr, const char *buf, 986 size_t count) 987{ 988 int nr = to_sensor_dev_attr(attr)->index; 989 struct lm85_data *data = dev_get_drvdata(dev); 990 struct i2c_client *client = data->client; 991 long val; 992 int err; 993 994 err = kstrtol(buf, 10, &val); 995 if (err) 996 return err; 997 998 if (IS_ADT7468_OFF64(data)) 999 val += 64; 1000 1001 mutex_lock(&data->update_lock); 1002 data->temp_max[nr] = TEMP_TO_REG(val); 1003 lm85_write_value(client, LM85_REG_TEMP_MAX(nr), data->temp_max[nr]); 1004 mutex_unlock(&data->update_lock); 1005 return count; 1006} 1007 1008static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0); 1009static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0); 1010static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0); 1011static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1); 1012static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1); 1013static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1); 1014static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2); 1015static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2); 1016static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2); 1017 1018/* Automatic PWM control */ 1019 1020static ssize_t pwm_auto_channels_show(struct device *dev, 1021 struct device_attribute *attr, 1022 char *buf) 1023{ 1024 int nr = to_sensor_dev_attr(attr)->index; 1025 struct lm85_data *data = lm85_update_device(dev); 1026 return sprintf(buf, "%d\n", ZONE_FROM_REG(data->autofan[nr].config)); 1027} 1028 1029static ssize_t pwm_auto_channels_store(struct device *dev, 1030 struct device_attribute *attr, 1031 const char *buf, size_t count) 1032{ 1033 int nr = to_sensor_dev_attr(attr)->index; 1034 struct lm85_data *data = dev_get_drvdata(dev); 1035 struct i2c_client *client = data->client; 1036 long val; 1037 int err; 1038 1039 err = kstrtol(buf, 10, &val); 1040 if (err) 1041 return err; 1042 1043 mutex_lock(&data->update_lock); 1044 data->autofan[nr].config = (data->autofan[nr].config & (~0xe0)) 1045 | ZONE_TO_REG(val); 1046 lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr), 1047 data->autofan[nr].config); 1048 mutex_unlock(&data->update_lock); 1049 return count; 1050} 1051 1052static ssize_t pwm_auto_pwm_min_show(struct device *dev, 1053 struct device_attribute *attr, char *buf) 1054{ 1055 int nr = to_sensor_dev_attr(attr)->index; 1056 struct lm85_data *data = lm85_update_device(dev); 1057 return sprintf(buf, "%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm)); 1058} 1059 1060static ssize_t pwm_auto_pwm_min_store(struct device *dev, 1061 struct device_attribute *attr, 1062 const char *buf, size_t count) 1063{ 1064 int nr = to_sensor_dev_attr(attr)->index; 1065 struct lm85_data *data = dev_get_drvdata(dev); 1066 struct i2c_client *client = data->client; 1067 unsigned long val; 1068 int err; 1069 1070 err = kstrtoul(buf, 10, &val); 1071 if (err) 1072 return err; 1073 1074 mutex_lock(&data->update_lock); 1075 data->autofan[nr].min_pwm = PWM_TO_REG(val); 1076 lm85_write_value(client, LM85_REG_AFAN_MINPWM(nr), 1077 data->autofan[nr].min_pwm); 1078 mutex_unlock(&data->update_lock); 1079 return count; 1080} 1081 1082static ssize_t pwm_auto_pwm_minctl_show(struct device *dev, 1083 struct device_attribute *attr, 1084 char *buf) 1085{ 1086 int nr = to_sensor_dev_attr(attr)->index; 1087 struct lm85_data *data = lm85_update_device(dev); 1088 return sprintf(buf, "%d\n", data->autofan[nr].min_off); 1089} 1090 1091static ssize_t pwm_auto_pwm_minctl_store(struct device *dev, 1092 struct device_attribute *attr, 1093 const char *buf, size_t count) 1094{ 1095 int nr = to_sensor_dev_attr(attr)->index; 1096 struct lm85_data *data = dev_get_drvdata(dev); 1097 struct i2c_client *client = data->client; 1098 u8 tmp; 1099 long val; 1100 int err; 1101 1102 err = kstrtol(buf, 10, &val); 1103 if (err) 1104 return err; 1105 1106 mutex_lock(&data->update_lock); 1107 data->autofan[nr].min_off = val; 1108 tmp = lm85_read_value(client, LM85_REG_AFAN_SPIKE1); 1109 tmp &= ~(0x20 << nr); 1110 if (data->autofan[nr].min_off) 1111 tmp |= 0x20 << nr; 1112 lm85_write_value(client, LM85_REG_AFAN_SPIKE1, tmp); 1113 mutex_unlock(&data->update_lock); 1114 return count; 1115} 1116 1117static SENSOR_DEVICE_ATTR_RW(pwm1_auto_channels, pwm_auto_channels, 0); 1118static SENSOR_DEVICE_ATTR_RW(pwm1_auto_pwm_min, pwm_auto_pwm_min, 0); 1119static SENSOR_DEVICE_ATTR_RW(pwm1_auto_pwm_minctl, pwm_auto_pwm_minctl, 0); 1120static SENSOR_DEVICE_ATTR_RW(pwm2_auto_channels, pwm_auto_channels, 1); 1121static SENSOR_DEVICE_ATTR_RW(pwm2_auto_pwm_min, pwm_auto_pwm_min, 1); 1122static SENSOR_DEVICE_ATTR_RW(pwm2_auto_pwm_minctl, pwm_auto_pwm_minctl, 1); 1123static SENSOR_DEVICE_ATTR_RW(pwm3_auto_channels, pwm_auto_channels, 2); 1124static SENSOR_DEVICE_ATTR_RW(pwm3_auto_pwm_min, pwm_auto_pwm_min, 2); 1125static SENSOR_DEVICE_ATTR_RW(pwm3_auto_pwm_minctl, pwm_auto_pwm_minctl, 2); 1126 1127/* Temperature settings for automatic PWM control */ 1128 1129static ssize_t temp_auto_temp_off_show(struct device *dev, 1130 struct device_attribute *attr, 1131 char *buf) 1132{ 1133 int nr = to_sensor_dev_attr(attr)->index; 1134 struct lm85_data *data = lm85_update_device(dev); 1135 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) - 1136 HYST_FROM_REG(data->zone[nr].hyst)); 1137} 1138 1139static ssize_t temp_auto_temp_off_store(struct device *dev, 1140 struct device_attribute *attr, 1141 const char *buf, size_t count) 1142{ 1143 int nr = to_sensor_dev_attr(attr)->index; 1144 struct lm85_data *data = dev_get_drvdata(dev); 1145 struct i2c_client *client = data->client; 1146 int min; 1147 long val; 1148 int err; 1149 1150 err = kstrtol(buf, 10, &val); 1151 if (err) 1152 return err; 1153 1154 mutex_lock(&data->update_lock); 1155 min = TEMP_FROM_REG(data->zone[nr].limit); 1156 data->zone[nr].hyst = HYST_TO_REG(min - val); 1157 if (nr == 0 || nr == 1) { 1158 lm85_write_value(client, LM85_REG_AFAN_HYST1, 1159 (data->zone[0].hyst << 4) 1160 | data->zone[1].hyst); 1161 } else { 1162 lm85_write_value(client, LM85_REG_AFAN_HYST2, 1163 (data->zone[2].hyst << 4)); 1164 } 1165 mutex_unlock(&data->update_lock); 1166 return count; 1167} 1168 1169static ssize_t temp_auto_temp_min_show(struct device *dev, 1170 struct device_attribute *attr, 1171 char *buf) 1172{ 1173 int nr = to_sensor_dev_attr(attr)->index; 1174 struct lm85_data *data = lm85_update_device(dev); 1175 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit)); 1176} 1177 1178static ssize_t temp_auto_temp_min_store(struct device *dev, 1179 struct device_attribute *attr, 1180 const char *buf, size_t count) 1181{ 1182 int nr = to_sensor_dev_attr(attr)->index; 1183 struct lm85_data *data = dev_get_drvdata(dev); 1184 struct i2c_client *client = data->client; 1185 long val; 1186 int err; 1187 1188 err = kstrtol(buf, 10, &val); 1189 if (err) 1190 return err; 1191 1192 mutex_lock(&data->update_lock); 1193 data->zone[nr].limit = TEMP_TO_REG(val); 1194 lm85_write_value(client, LM85_REG_AFAN_LIMIT(nr), 1195 data->zone[nr].limit); 1196 1197/* Update temp_auto_max and temp_auto_range */ 1198 data->zone[nr].range = RANGE_TO_REG( 1199 TEMP_FROM_REG(data->zone[nr].max_desired) - 1200 TEMP_FROM_REG(data->zone[nr].limit)); 1201 lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), 1202 ((data->zone[nr].range & 0x0f) << 4) 1203 | data->pwm_freq[nr]); 1204 1205 mutex_unlock(&data->update_lock); 1206 return count; 1207} 1208 1209static ssize_t temp_auto_temp_max_show(struct device *dev, 1210 struct device_attribute *attr, 1211 char *buf) 1212{ 1213 int nr = to_sensor_dev_attr(attr)->index; 1214 struct lm85_data *data = lm85_update_device(dev); 1215 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) + 1216 RANGE_FROM_REG(data->zone[nr].range)); 1217} 1218 1219static ssize_t temp_auto_temp_max_store(struct device *dev, 1220 struct device_attribute *attr, 1221 const char *buf, size_t count) 1222{ 1223 int nr = to_sensor_dev_attr(attr)->index; 1224 struct lm85_data *data = dev_get_drvdata(dev); 1225 struct i2c_client *client = data->client; 1226 int min; 1227 long val; 1228 int err; 1229 1230 err = kstrtol(buf, 10, &val); 1231 if (err) 1232 return err; 1233 1234 mutex_lock(&data->update_lock); 1235 min = TEMP_FROM_REG(data->zone[nr].limit); 1236 data->zone[nr].max_desired = TEMP_TO_REG(val); 1237 data->zone[nr].range = RANGE_TO_REG( 1238 val - min); 1239 lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), 1240 ((data->zone[nr].range & 0x0f) << 4) 1241 | data->pwm_freq[nr]); 1242 mutex_unlock(&data->update_lock); 1243 return count; 1244} 1245 1246static ssize_t temp_auto_temp_crit_show(struct device *dev, 1247 struct device_attribute *attr, 1248 char *buf) 1249{ 1250 int nr = to_sensor_dev_attr(attr)->index; 1251 struct lm85_data *data = lm85_update_device(dev); 1252 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].critical)); 1253} 1254 1255static ssize_t temp_auto_temp_crit_store(struct device *dev, 1256 struct device_attribute *attr, 1257 const char *buf, size_t count) 1258{ 1259 int nr = to_sensor_dev_attr(attr)->index; 1260 struct lm85_data *data = dev_get_drvdata(dev); 1261 struct i2c_client *client = data->client; 1262 long val; 1263 int err; 1264 1265 err = kstrtol(buf, 10, &val); 1266 if (err) 1267 return err; 1268 1269 mutex_lock(&data->update_lock); 1270 data->zone[nr].critical = TEMP_TO_REG(val); 1271 lm85_write_value(client, LM85_REG_AFAN_CRITICAL(nr), 1272 data->zone[nr].critical); 1273 mutex_unlock(&data->update_lock); 1274 return count; 1275} 1276 1277static SENSOR_DEVICE_ATTR_RW(temp1_auto_temp_off, temp_auto_temp_off, 0); 1278static SENSOR_DEVICE_ATTR_RW(temp1_auto_temp_min, temp_auto_temp_min, 0); 1279static SENSOR_DEVICE_ATTR_RW(temp1_auto_temp_max, temp_auto_temp_max, 0); 1280static SENSOR_DEVICE_ATTR_RW(temp1_auto_temp_crit, temp_auto_temp_crit, 0); 1281static SENSOR_DEVICE_ATTR_RW(temp2_auto_temp_off, temp_auto_temp_off, 1); 1282static SENSOR_DEVICE_ATTR_RW(temp2_auto_temp_min, temp_auto_temp_min, 1); 1283static SENSOR_DEVICE_ATTR_RW(temp2_auto_temp_max, temp_auto_temp_max, 1); 1284static SENSOR_DEVICE_ATTR_RW(temp2_auto_temp_crit, temp_auto_temp_crit, 1); 1285static SENSOR_DEVICE_ATTR_RW(temp3_auto_temp_off, temp_auto_temp_off, 2); 1286static SENSOR_DEVICE_ATTR_RW(temp3_auto_temp_min, temp_auto_temp_min, 2); 1287static SENSOR_DEVICE_ATTR_RW(temp3_auto_temp_max, temp_auto_temp_max, 2); 1288static SENSOR_DEVICE_ATTR_RW(temp3_auto_temp_crit, temp_auto_temp_crit, 2); 1289 1290static struct attribute *lm85_attributes[] = { 1291 &sensor_dev_attr_fan1_input.dev_attr.attr, 1292 &sensor_dev_attr_fan2_input.dev_attr.attr, 1293 &sensor_dev_attr_fan3_input.dev_attr.attr, 1294 &sensor_dev_attr_fan4_input.dev_attr.attr, 1295 &sensor_dev_attr_fan1_min.dev_attr.attr, 1296 &sensor_dev_attr_fan2_min.dev_attr.attr, 1297 &sensor_dev_attr_fan3_min.dev_attr.attr, 1298 &sensor_dev_attr_fan4_min.dev_attr.attr, 1299 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1300 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1301 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1302 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1303 1304 &sensor_dev_attr_pwm1.dev_attr.attr, 1305 &sensor_dev_attr_pwm2.dev_attr.attr, 1306 &sensor_dev_attr_pwm3.dev_attr.attr, 1307 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1308 &sensor_dev_attr_pwm2_enable.dev_attr.attr, 1309 &sensor_dev_attr_pwm3_enable.dev_attr.attr, 1310 &sensor_dev_attr_pwm1_freq.dev_attr.attr, 1311 &sensor_dev_attr_pwm2_freq.dev_attr.attr, 1312 &sensor_dev_attr_pwm3_freq.dev_attr.attr, 1313 1314 &sensor_dev_attr_in0_input.dev_attr.attr, 1315 &sensor_dev_attr_in1_input.dev_attr.attr, 1316 &sensor_dev_attr_in2_input.dev_attr.attr, 1317 &sensor_dev_attr_in3_input.dev_attr.attr, 1318 &sensor_dev_attr_in0_min.dev_attr.attr, 1319 &sensor_dev_attr_in1_min.dev_attr.attr, 1320 &sensor_dev_attr_in2_min.dev_attr.attr, 1321 &sensor_dev_attr_in3_min.dev_attr.attr, 1322 &sensor_dev_attr_in0_max.dev_attr.attr, 1323 &sensor_dev_attr_in1_max.dev_attr.attr, 1324 &sensor_dev_attr_in2_max.dev_attr.attr, 1325 &sensor_dev_attr_in3_max.dev_attr.attr, 1326 &sensor_dev_attr_in0_alarm.dev_attr.attr, 1327 &sensor_dev_attr_in1_alarm.dev_attr.attr, 1328 &sensor_dev_attr_in2_alarm.dev_attr.attr, 1329 &sensor_dev_attr_in3_alarm.dev_attr.attr, 1330 1331 &sensor_dev_attr_temp1_input.dev_attr.attr, 1332 &sensor_dev_attr_temp2_input.dev_attr.attr, 1333 &sensor_dev_attr_temp3_input.dev_attr.attr, 1334 &sensor_dev_attr_temp1_min.dev_attr.attr, 1335 &sensor_dev_attr_temp2_min.dev_attr.attr, 1336 &sensor_dev_attr_temp3_min.dev_attr.attr, 1337 &sensor_dev_attr_temp1_max.dev_attr.attr, 1338 &sensor_dev_attr_temp2_max.dev_attr.attr, 1339 &sensor_dev_attr_temp3_max.dev_attr.attr, 1340 &sensor_dev_attr_temp1_alarm.dev_attr.attr, 1341 &sensor_dev_attr_temp2_alarm.dev_attr.attr, 1342 &sensor_dev_attr_temp3_alarm.dev_attr.attr, 1343 &sensor_dev_attr_temp1_fault.dev_attr.attr, 1344 &sensor_dev_attr_temp3_fault.dev_attr.attr, 1345 1346 &sensor_dev_attr_pwm1_auto_channels.dev_attr.attr, 1347 &sensor_dev_attr_pwm2_auto_channels.dev_attr.attr, 1348 &sensor_dev_attr_pwm3_auto_channels.dev_attr.attr, 1349 &sensor_dev_attr_pwm1_auto_pwm_min.dev_attr.attr, 1350 &sensor_dev_attr_pwm2_auto_pwm_min.dev_attr.attr, 1351 &sensor_dev_attr_pwm3_auto_pwm_min.dev_attr.attr, 1352 1353 &sensor_dev_attr_temp1_auto_temp_min.dev_attr.attr, 1354 &sensor_dev_attr_temp2_auto_temp_min.dev_attr.attr, 1355 &sensor_dev_attr_temp3_auto_temp_min.dev_attr.attr, 1356 &sensor_dev_attr_temp1_auto_temp_max.dev_attr.attr, 1357 &sensor_dev_attr_temp2_auto_temp_max.dev_attr.attr, 1358 &sensor_dev_attr_temp3_auto_temp_max.dev_attr.attr, 1359 &sensor_dev_attr_temp1_auto_temp_crit.dev_attr.attr, 1360 &sensor_dev_attr_temp2_auto_temp_crit.dev_attr.attr, 1361 &sensor_dev_attr_temp3_auto_temp_crit.dev_attr.attr, 1362 1363 &dev_attr_vrm.attr, 1364 &dev_attr_cpu0_vid.attr, 1365 &dev_attr_alarms.attr, 1366 NULL 1367}; 1368 1369static const struct attribute_group lm85_group = { 1370 .attrs = lm85_attributes, 1371}; 1372 1373static struct attribute *lm85_attributes_minctl[] = { 1374 &sensor_dev_attr_pwm1_auto_pwm_minctl.dev_attr.attr, 1375 &sensor_dev_attr_pwm2_auto_pwm_minctl.dev_attr.attr, 1376 &sensor_dev_attr_pwm3_auto_pwm_minctl.dev_attr.attr, 1377 NULL 1378}; 1379 1380static const struct attribute_group lm85_group_minctl = { 1381 .attrs = lm85_attributes_minctl, 1382}; 1383 1384static struct attribute *lm85_attributes_temp_off[] = { 1385 &sensor_dev_attr_temp1_auto_temp_off.dev_attr.attr, 1386 &sensor_dev_attr_temp2_auto_temp_off.dev_attr.attr, 1387 &sensor_dev_attr_temp3_auto_temp_off.dev_attr.attr, 1388 NULL 1389}; 1390 1391static const struct attribute_group lm85_group_temp_off = { 1392 .attrs = lm85_attributes_temp_off, 1393}; 1394 1395static struct attribute *lm85_attributes_in4[] = { 1396 &sensor_dev_attr_in4_input.dev_attr.attr, 1397 &sensor_dev_attr_in4_min.dev_attr.attr, 1398 &sensor_dev_attr_in4_max.dev_attr.attr, 1399 &sensor_dev_attr_in4_alarm.dev_attr.attr, 1400 NULL 1401}; 1402 1403static const struct attribute_group lm85_group_in4 = { 1404 .attrs = lm85_attributes_in4, 1405}; 1406 1407static struct attribute *lm85_attributes_in567[] = { 1408 &sensor_dev_attr_in5_input.dev_attr.attr, 1409 &sensor_dev_attr_in6_input.dev_attr.attr, 1410 &sensor_dev_attr_in7_input.dev_attr.attr, 1411 &sensor_dev_attr_in5_min.dev_attr.attr, 1412 &sensor_dev_attr_in6_min.dev_attr.attr, 1413 &sensor_dev_attr_in7_min.dev_attr.attr, 1414 &sensor_dev_attr_in5_max.dev_attr.attr, 1415 &sensor_dev_attr_in6_max.dev_attr.attr, 1416 &sensor_dev_attr_in7_max.dev_attr.attr, 1417 &sensor_dev_attr_in5_alarm.dev_attr.attr, 1418 &sensor_dev_attr_in6_alarm.dev_attr.attr, 1419 &sensor_dev_attr_in7_alarm.dev_attr.attr, 1420 NULL 1421}; 1422 1423static const struct attribute_group lm85_group_in567 = { 1424 .attrs = lm85_attributes_in567, 1425}; 1426 1427static void lm85_init_client(struct i2c_client *client) 1428{ 1429 int value; 1430 1431 /* Start monitoring if needed */ 1432 value = lm85_read_value(client, LM85_REG_CONFIG); 1433 if (!(value & 0x01)) { 1434 dev_info(&client->dev, "Starting monitoring\n"); 1435 lm85_write_value(client, LM85_REG_CONFIG, value | 0x01); 1436 } 1437 1438 /* Warn about unusual configuration bits */ 1439 if (value & 0x02) 1440 dev_warn(&client->dev, "Device configuration is locked\n"); 1441 if (!(value & 0x04)) 1442 dev_warn(&client->dev, "Device is not ready\n"); 1443} 1444 1445static int lm85_is_fake(struct i2c_client *client) 1446{ 1447 /* 1448 * Differenciate between real LM96000 and Winbond WPCD377I. The latter 1449 * emulate the former except that it has no hardware monitoring function 1450 * so the readings are always 0. 1451 */ 1452 int i; 1453 u8 in_temp, fan; 1454 1455 for (i = 0; i < 8; i++) { 1456 in_temp = i2c_smbus_read_byte_data(client, 0x20 + i); 1457 fan = i2c_smbus_read_byte_data(client, 0x28 + i); 1458 if (in_temp != 0x00 || fan != 0xff) 1459 return 0; 1460 } 1461 1462 return 1; 1463} 1464 1465/* Return 0 if detection is successful, -ENODEV otherwise */ 1466static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info) 1467{ 1468 struct i2c_adapter *adapter = client->adapter; 1469 int address = client->addr; 1470 const char *type_name = NULL; 1471 int company, verstep; 1472 1473 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { 1474 /* We need to be able to do byte I/O */ 1475 return -ENODEV; 1476 } 1477 1478 /* Determine the chip type */ 1479 company = lm85_read_value(client, LM85_REG_COMPANY); 1480 verstep = lm85_read_value(client, LM85_REG_VERSTEP); 1481 1482 dev_dbg(&adapter->dev, 1483 "Detecting device at 0x%02x with COMPANY: 0x%02x and VERSTEP: 0x%02x\n", 1484 address, company, verstep); 1485 1486 if (company == LM85_COMPANY_NATIONAL) { 1487 switch (verstep) { 1488 case LM85_VERSTEP_LM85C: 1489 type_name = "lm85c"; 1490 break; 1491 case LM85_VERSTEP_LM85B: 1492 type_name = "lm85b"; 1493 break; 1494 case LM85_VERSTEP_LM96000_1: 1495 case LM85_VERSTEP_LM96000_2: 1496 /* Check for Winbond WPCD377I */ 1497 if (lm85_is_fake(client)) { 1498 dev_dbg(&adapter->dev, 1499 "Found Winbond WPCD377I, ignoring\n"); 1500 return -ENODEV; 1501 } 1502 type_name = "lm96000"; 1503 break; 1504 } 1505 } else if (company == LM85_COMPANY_ANALOG_DEV) { 1506 switch (verstep) { 1507 case LM85_VERSTEP_ADM1027: 1508 type_name = "adm1027"; 1509 break; 1510 case LM85_VERSTEP_ADT7463: 1511 case LM85_VERSTEP_ADT7463C: 1512 type_name = "adt7463"; 1513 break; 1514 case LM85_VERSTEP_ADT7468_1: 1515 case LM85_VERSTEP_ADT7468_2: 1516 type_name = "adt7468"; 1517 break; 1518 } 1519 } else if (company == LM85_COMPANY_SMSC) { 1520 switch (verstep) { 1521 case LM85_VERSTEP_EMC6D100_A0: 1522 case LM85_VERSTEP_EMC6D100_A1: 1523 /* Note: we can't tell a '100 from a '101 */ 1524 type_name = "emc6d100"; 1525 break; 1526 case LM85_VERSTEP_EMC6D102: 1527 type_name = "emc6d102"; 1528 break; 1529 case LM85_VERSTEP_EMC6D103_A0: 1530 case LM85_VERSTEP_EMC6D103_A1: 1531 type_name = "emc6d103"; 1532 break; 1533 case LM85_VERSTEP_EMC6D103S: 1534 type_name = "emc6d103s"; 1535 break; 1536 } 1537 } 1538 1539 if (!type_name) 1540 return -ENODEV; 1541 1542 strlcpy(info->type, type_name, I2C_NAME_SIZE); 1543 1544 return 0; 1545} 1546 1547static const struct i2c_device_id lm85_id[]; 1548 1549static int lm85_probe(struct i2c_client *client) 1550{ 1551 struct device *dev = &client->dev; 1552 struct device *hwmon_dev; 1553 struct lm85_data *data; 1554 int idx = 0; 1555 1556 data = devm_kzalloc(dev, sizeof(struct lm85_data), GFP_KERNEL); 1557 if (!data) 1558 return -ENOMEM; 1559 1560 data->client = client; 1561 if (client->dev.of_node) 1562 data->type = (enum chips)of_device_get_match_data(&client->dev); 1563 else 1564 data->type = i2c_match_id(lm85_id, client)->driver_data; 1565 mutex_init(&data->update_lock); 1566 1567 /* Fill in the chip specific driver values */ 1568 switch (data->type) { 1569 case adm1027: 1570 case adt7463: 1571 case adt7468: 1572 case emc6d100: 1573 case emc6d102: 1574 case emc6d103: 1575 case emc6d103s: 1576 data->freq_map = adm1027_freq_map; 1577 data->freq_map_size = ARRAY_SIZE(adm1027_freq_map); 1578 break; 1579 case lm96000: 1580 data->freq_map = lm96000_freq_map; 1581 data->freq_map_size = ARRAY_SIZE(lm96000_freq_map); 1582 break; 1583 default: 1584 data->freq_map = lm85_freq_map; 1585 data->freq_map_size = ARRAY_SIZE(lm85_freq_map); 1586 } 1587 1588 /* Set the VRM version */ 1589 data->vrm = vid_which_vrm(); 1590 1591 /* Initialize the LM85 chip */ 1592 lm85_init_client(client); 1593 1594 /* sysfs hooks */ 1595 data->groups[idx++] = &lm85_group; 1596 1597 /* minctl and temp_off exist on all chips except emc6d103s */ 1598 if (data->type != emc6d103s) { 1599 data->groups[idx++] = &lm85_group_minctl; 1600 data->groups[idx++] = &lm85_group_temp_off; 1601 } 1602 1603 /* 1604 * The ADT7463/68 have an optional VRM 10 mode where pin 21 is used 1605 * as a sixth digital VID input rather than an analog input. 1606 */ 1607 if (data->type == adt7463 || data->type == adt7468) { 1608 u8 vid = lm85_read_value(client, LM85_REG_VID); 1609 if (vid & 0x80) 1610 data->has_vid5 = true; 1611 } 1612 1613 if (!data->has_vid5) 1614 data->groups[idx++] = &lm85_group_in4; 1615 1616 /* The EMC6D100 has 3 additional voltage inputs */ 1617 if (data->type == emc6d100) 1618 data->groups[idx++] = &lm85_group_in567; 1619 1620 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 1621 data, data->groups); 1622 return PTR_ERR_OR_ZERO(hwmon_dev); 1623} 1624 1625static const struct i2c_device_id lm85_id[] = { 1626 { "adm1027", adm1027 }, 1627 { "adt7463", adt7463 }, 1628 { "adt7468", adt7468 }, 1629 { "lm85", lm85 }, 1630 { "lm85b", lm85 }, 1631 { "lm85c", lm85 }, 1632 { "lm96000", lm96000 }, 1633 { "emc6d100", emc6d100 }, 1634 { "emc6d101", emc6d100 }, 1635 { "emc6d102", emc6d102 }, 1636 { "emc6d103", emc6d103 }, 1637 { "emc6d103s", emc6d103s }, 1638 { } 1639}; 1640MODULE_DEVICE_TABLE(i2c, lm85_id); 1641 1642static const struct of_device_id __maybe_unused lm85_of_match[] = { 1643 { 1644 .compatible = "adi,adm1027", 1645 .data = (void *)adm1027 1646 }, 1647 { 1648 .compatible = "adi,adt7463", 1649 .data = (void *)adt7463 1650 }, 1651 { 1652 .compatible = "adi,adt7468", 1653 .data = (void *)adt7468 1654 }, 1655 { 1656 .compatible = "national,lm85", 1657 .data = (void *)lm85 1658 }, 1659 { 1660 .compatible = "national,lm85b", 1661 .data = (void *)lm85 1662 }, 1663 { 1664 .compatible = "national,lm85c", 1665 .data = (void *)lm85 1666 }, 1667 { 1668 .compatible = "ti,lm96000", 1669 .data = (void *)lm96000 1670 }, 1671 { 1672 .compatible = "smsc,emc6d100", 1673 .data = (void *)emc6d100 1674 }, 1675 { 1676 .compatible = "smsc,emc6d101", 1677 .data = (void *)emc6d100 1678 }, 1679 { 1680 .compatible = "smsc,emc6d102", 1681 .data = (void *)emc6d102 1682 }, 1683 { 1684 .compatible = "smsc,emc6d103", 1685 .data = (void *)emc6d103 1686 }, 1687 { 1688 .compatible = "smsc,emc6d103s", 1689 .data = (void *)emc6d103s 1690 }, 1691 { }, 1692}; 1693MODULE_DEVICE_TABLE(of, lm85_of_match); 1694 1695static struct i2c_driver lm85_driver = { 1696 .class = I2C_CLASS_HWMON, 1697 .driver = { 1698 .name = "lm85", 1699 .of_match_table = of_match_ptr(lm85_of_match), 1700 }, 1701 .probe_new = lm85_probe, 1702 .id_table = lm85_id, 1703 .detect = lm85_detect, 1704 .address_list = normal_i2c, 1705}; 1706 1707module_i2c_driver(lm85_driver); 1708 1709MODULE_LICENSE("GPL"); 1710MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " 1711 "Margit Schubert-While <margitsw@t-online.de>, " 1712 "Justin Thiessen <jthiessen@penguincomputing.com>"); 1713MODULE_DESCRIPTION("LM85-B, LM85-C driver");