1 /* 2 * lm90.c - Part of lm_sensors, Linux kernel modules for hardware 3 * monitoring 4 * Copyright (C) 2003-2010 Jean Delvare <jdelvare@suse.de> 5 * 6 * Based on the lm83 driver. The LM90 is a sensor chip made by National 7 * Semiconductor. It reports up to two temperatures (its own plus up to 8 * one external one) with a 0.125 deg resolution (1 deg for local 9 * temperature) and a 3-4 deg accuracy. 10 * 11 * This driver also supports the LM89 and LM99, two other sensor chips 12 * made by National Semiconductor. Both have an increased remote 13 * temperature measurement accuracy (1 degree), and the LM99 14 * additionally shifts remote temperatures (measured and limits) by 16 15 * degrees, which allows for higher temperatures measurement. 16 * Note that there is no way to differentiate between both chips. 17 * When device is auto-detected, the driver will assume an LM99. 18 * 19 * This driver also supports the LM86, another sensor chip made by 20 * National Semiconductor. It is exactly similar to the LM90 except it 21 * has a higher accuracy. 22 * 23 * This driver also supports the ADM1032, a sensor chip made by Analog 24 * Devices. That chip is similar to the LM90, with a few differences 25 * that are not handled by this driver. Among others, it has a higher 26 * accuracy than the LM90, much like the LM86 does. 27 * 28 * This driver also supports the MAX6657, MAX6658 and MAX6659 sensor 29 * chips made by Maxim. These chips are similar to the LM86. 30 * Note that there is no easy way to differentiate between the three 31 * variants. We use the device address to detect MAX6659, which will result 32 * in a detection as max6657 if it is on address 0x4c. The extra address 33 * and features of the MAX6659 are only supported if the chip is configured 34 * explicitly as max6659, or if its address is not 0x4c. 35 * These chips lack the remote temperature offset feature. 36 * 37 * This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and 38 * MAX6692 chips made by Maxim. These are again similar to the LM86, 39 * but they use unsigned temperature values and can report temperatures 40 * from 0 to 145 degrees. 41 * 42 * This driver also supports the MAX6680 and MAX6681, two other sensor 43 * chips made by Maxim. These are quite similar to the other Maxim 44 * chips. The MAX6680 and MAX6681 only differ in the pinout so they can 45 * be treated identically. 46 * 47 * This driver also supports the MAX6695 and MAX6696, two other sensor 48 * chips made by Maxim. These are also quite similar to other Maxim 49 * chips, but support three temperature sensors instead of two. MAX6695 50 * and MAX6696 only differ in the pinout so they can be treated identically. 51 * 52 * This driver also supports ADT7461 and ADT7461A from Analog Devices as well as 53 * NCT1008 from ON Semiconductor. The chips are supported in both compatibility 54 * and extended mode. They are mostly compatible with LM90 except for a data 55 * format difference for the temperature value registers. 56 * 57 * This driver also supports the SA56004 from Philips. This device is 58 * pin-compatible with the LM86, the ED/EDP parts are also address-compatible. 59 * 60 * This driver also supports the G781 from GMT. This device is compatible 61 * with the ADM1032. 62 * 63 * This driver also supports TMP451 from Texas Instruments. This device is 64 * supported in both compatibility and extended mode. It's mostly compatible 65 * with ADT7461 except for local temperature low byte register and max 66 * conversion rate. 67 * 68 * Since the LM90 was the first chipset supported by this driver, most 69 * comments will refer to this chipset, but are actually general and 70 * concern all supported chipsets, unless mentioned otherwise. 71 * 72 * This program is free software; you can redistribute it and/or modify 73 * it under the terms of the GNU General Public License as published by 74 * the Free Software Foundation; either version 2 of the License, or 75 * (at your option) any later version. 76 * 77 * This program is distributed in the hope that it will be useful, 78 * but WITHOUT ANY WARRANTY; without even the implied warranty of 79 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 80 * GNU General Public License for more details. 81 * 82 * You should have received a copy of the GNU General Public License 83 * along with this program; if not, write to the Free Software 84 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 85 */ 86 87 #include <linux/module.h> 88 #include <linux/init.h> 89 #include <linux/slab.h> 90 #include <linux/jiffies.h> 91 #include <linux/i2c.h> 92 #include <linux/hwmon-sysfs.h> 93 #include <linux/hwmon.h> 94 #include <linux/err.h> 95 #include <linux/mutex.h> 96 #include <linux/sysfs.h> 97 #include <linux/interrupt.h> 98 #include <linux/regulator/consumer.h> 99 100 /* 101 * Addresses to scan 102 * Address is fully defined internally and cannot be changed except for 103 * MAX6659, MAX6680 and MAX6681. 104 * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, ADT7461A, MAX6649, 105 * MAX6657, MAX6658, NCT1008 and W83L771 have address 0x4c. 106 * ADM1032-2, ADT7461-2, ADT7461A-2, LM89-1, LM99-1, MAX6646, and NCT1008D 107 * have address 0x4d. 108 * MAX6647 has address 0x4e. 109 * MAX6659 can have address 0x4c, 0x4d or 0x4e. 110 * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 111 * 0x4c, 0x4d or 0x4e. 112 * SA56004 can have address 0x48 through 0x4F. 113 */ 114 115 static const unsigned short normal_i2c[] = { 116 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 117 0x4d, 0x4e, 0x4f, I2C_CLIENT_END }; 118 119 enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680, 120 max6646, w83l771, max6696, sa56004, g781, tmp451 }; 121 122 /* 123 * The LM90 registers 124 */ 125 126 #define LM90_REG_R_MAN_ID 0xFE 127 #define LM90_REG_R_CHIP_ID 0xFF 128 #define LM90_REG_R_CONFIG1 0x03 129 #define LM90_REG_W_CONFIG1 0x09 130 #define LM90_REG_R_CONFIG2 0xBF 131 #define LM90_REG_W_CONFIG2 0xBF 132 #define LM90_REG_R_CONVRATE 0x04 133 #define LM90_REG_W_CONVRATE 0x0A 134 #define LM90_REG_R_STATUS 0x02 135 #define LM90_REG_R_LOCAL_TEMP 0x00 136 #define LM90_REG_R_LOCAL_HIGH 0x05 137 #define LM90_REG_W_LOCAL_HIGH 0x0B 138 #define LM90_REG_R_LOCAL_LOW 0x06 139 #define LM90_REG_W_LOCAL_LOW 0x0C 140 #define LM90_REG_R_LOCAL_CRIT 0x20 141 #define LM90_REG_W_LOCAL_CRIT 0x20 142 #define LM90_REG_R_REMOTE_TEMPH 0x01 143 #define LM90_REG_R_REMOTE_TEMPL 0x10 144 #define LM90_REG_R_REMOTE_OFFSH 0x11 145 #define LM90_REG_W_REMOTE_OFFSH 0x11 146 #define LM90_REG_R_REMOTE_OFFSL 0x12 147 #define LM90_REG_W_REMOTE_OFFSL 0x12 148 #define LM90_REG_R_REMOTE_HIGHH 0x07 149 #define LM90_REG_W_REMOTE_HIGHH 0x0D 150 #define LM90_REG_R_REMOTE_HIGHL 0x13 151 #define LM90_REG_W_REMOTE_HIGHL 0x13 152 #define LM90_REG_R_REMOTE_LOWH 0x08 153 #define LM90_REG_W_REMOTE_LOWH 0x0E 154 #define LM90_REG_R_REMOTE_LOWL 0x14 155 #define LM90_REG_W_REMOTE_LOWL 0x14 156 #define LM90_REG_R_REMOTE_CRIT 0x19 157 #define LM90_REG_W_REMOTE_CRIT 0x19 158 #define LM90_REG_R_TCRIT_HYST 0x21 159 #define LM90_REG_W_TCRIT_HYST 0x21 160 161 /* MAX6646/6647/6649/6657/6658/6659/6695/6696 registers */ 162 163 #define MAX6657_REG_R_LOCAL_TEMPL 0x11 164 #define MAX6696_REG_R_STATUS2 0x12 165 #define MAX6659_REG_R_REMOTE_EMERG 0x16 166 #define MAX6659_REG_W_REMOTE_EMERG 0x16 167 #define MAX6659_REG_R_LOCAL_EMERG 0x17 168 #define MAX6659_REG_W_LOCAL_EMERG 0x17 169 170 /* SA56004 registers */ 171 172 #define SA56004_REG_R_LOCAL_TEMPL 0x22 173 174 #define LM90_MAX_CONVRATE_MS 16000 /* Maximum conversion rate in ms */ 175 176 /* TMP451 registers */ 177 #define TMP451_REG_R_LOCAL_TEMPL 0x15 178 179 /* 180 * Device flags 181 */ 182 #define LM90_FLAG_ADT7461_EXT (1 << 0) /* ADT7461 extended mode */ 183 /* Device features */ 184 #define LM90_HAVE_OFFSET (1 << 1) /* temperature offset register */ 185 #define LM90_HAVE_REM_LIMIT_EXT (1 << 3) /* extended remote limit */ 186 #define LM90_HAVE_EMERGENCY (1 << 4) /* 3rd upper (emergency) limit */ 187 #define LM90_HAVE_EMERGENCY_ALARM (1 << 5)/* emergency alarm */ 188 #define LM90_HAVE_TEMP3 (1 << 6) /* 3rd temperature sensor */ 189 #define LM90_HAVE_BROKEN_ALERT (1 << 7) /* Broken alert */ 190 191 /* LM90 status */ 192 #define LM90_STATUS_LTHRM (1 << 0) /* local THERM limit tripped */ 193 #define LM90_STATUS_RTHRM (1 << 1) /* remote THERM limit tripped */ 194 #define LM90_STATUS_ROPEN (1 << 2) /* remote is an open circuit */ 195 #define LM90_STATUS_RLOW (1 << 3) /* remote low temp limit tripped */ 196 #define LM90_STATUS_RHIGH (1 << 4) /* remote high temp limit tripped */ 197 #define LM90_STATUS_LLOW (1 << 5) /* local low temp limit tripped */ 198 #define LM90_STATUS_LHIGH (1 << 6) /* local high temp limit tripped */ 199 200 #define MAX6696_STATUS2_R2THRM (1 << 1) /* remote2 THERM limit tripped */ 201 #define MAX6696_STATUS2_R2OPEN (1 << 2) /* remote2 is an open circuit */ 202 #define MAX6696_STATUS2_R2LOW (1 << 3) /* remote2 low temp limit tripped */ 203 #define MAX6696_STATUS2_R2HIGH (1 << 4) /* remote2 high temp limit tripped */ 204 #define MAX6696_STATUS2_ROT2 (1 << 5) /* remote emergency limit tripped */ 205 #define MAX6696_STATUS2_R2OT2 (1 << 6) /* remote2 emergency limit tripped */ 206 #define MAX6696_STATUS2_LOT2 (1 << 7) /* local emergency limit tripped */ 207 208 /* 209 * Driver data (common to all clients) 210 */ 211 212 static const struct i2c_device_id lm90_id[] = { 213 { "adm1032", adm1032 }, 214 { "adt7461", adt7461 }, 215 { "adt7461a", adt7461 }, 216 { "g781", g781 }, 217 { "lm90", lm90 }, 218 { "lm86", lm86 }, 219 { "lm89", lm86 }, 220 { "lm99", lm99 }, 221 { "max6646", max6646 }, 222 { "max6647", max6646 }, 223 { "max6649", max6646 }, 224 { "max6657", max6657 }, 225 { "max6658", max6657 }, 226 { "max6659", max6659 }, 227 { "max6680", max6680 }, 228 { "max6681", max6680 }, 229 { "max6695", max6696 }, 230 { "max6696", max6696 }, 231 { "nct1008", adt7461 }, 232 { "w83l771", w83l771 }, 233 { "sa56004", sa56004 }, 234 { "tmp451", tmp451 }, 235 { } 236 }; 237 MODULE_DEVICE_TABLE(i2c, lm90_id); 238 239 /* 240 * chip type specific parameters 241 */ 242 struct lm90_params { 243 u32 flags; /* Capabilities */ 244 u16 alert_alarms; /* Which alarm bits trigger ALERT# */ 245 /* Upper 8 bits for max6695/96 */ 246 u8 max_convrate; /* Maximum conversion rate register value */ 247 u8 reg_local_ext; /* Extended local temp register (optional) */ 248 }; 249 250 static const struct lm90_params lm90_params[] = { 251 [adm1032] = { 252 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT 253 | LM90_HAVE_BROKEN_ALERT, 254 .alert_alarms = 0x7c, 255 .max_convrate = 10, 256 }, 257 [adt7461] = { 258 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT 259 | LM90_HAVE_BROKEN_ALERT, 260 .alert_alarms = 0x7c, 261 .max_convrate = 10, 262 }, 263 [g781] = { 264 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT 265 | LM90_HAVE_BROKEN_ALERT, 266 .alert_alarms = 0x7c, 267 .max_convrate = 8, 268 }, 269 [lm86] = { 270 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT, 271 .alert_alarms = 0x7b, 272 .max_convrate = 9, 273 }, 274 [lm90] = { 275 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT, 276 .alert_alarms = 0x7b, 277 .max_convrate = 9, 278 }, 279 [lm99] = { 280 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT, 281 .alert_alarms = 0x7b, 282 .max_convrate = 9, 283 }, 284 [max6646] = { 285 .alert_alarms = 0x7c, 286 .max_convrate = 6, 287 .reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL, 288 }, 289 [max6657] = { 290 .alert_alarms = 0x7c, 291 .max_convrate = 8, 292 .reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL, 293 }, 294 [max6659] = { 295 .flags = LM90_HAVE_EMERGENCY, 296 .alert_alarms = 0x7c, 297 .max_convrate = 8, 298 .reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL, 299 }, 300 [max6680] = { 301 .flags = LM90_HAVE_OFFSET, 302 .alert_alarms = 0x7c, 303 .max_convrate = 7, 304 }, 305 [max6696] = { 306 .flags = LM90_HAVE_EMERGENCY 307 | LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3, 308 .alert_alarms = 0x1c7c, 309 .max_convrate = 6, 310 .reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL, 311 }, 312 [w83l771] = { 313 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT, 314 .alert_alarms = 0x7c, 315 .max_convrate = 8, 316 }, 317 [sa56004] = { 318 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT, 319 .alert_alarms = 0x7b, 320 .max_convrate = 9, 321 .reg_local_ext = SA56004_REG_R_LOCAL_TEMPL, 322 }, 323 [tmp451] = { 324 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT 325 | LM90_HAVE_BROKEN_ALERT, 326 .alert_alarms = 0x7c, 327 .max_convrate = 9, 328 .reg_local_ext = TMP451_REG_R_LOCAL_TEMPL, 329 } 330 }; 331 332 /* 333 * TEMP8 register index 334 */ 335 enum lm90_temp8_reg_index { 336 LOCAL_LOW = 0, 337 LOCAL_HIGH, 338 LOCAL_CRIT, 339 REMOTE_CRIT, 340 LOCAL_EMERG, /* max6659 and max6695/96 */ 341 REMOTE_EMERG, /* max6659 and max6695/96 */ 342 REMOTE2_CRIT, /* max6695/96 only */ 343 REMOTE2_EMERG, /* max6695/96 only */ 344 TEMP8_REG_NUM 345 }; 346 347 /* 348 * TEMP11 register index 349 */ 350 enum lm90_temp11_reg_index { 351 REMOTE_TEMP = 0, 352 REMOTE_LOW, 353 REMOTE_HIGH, 354 REMOTE_OFFSET, /* except max6646, max6657/58/59, and max6695/96 */ 355 LOCAL_TEMP, 356 REMOTE2_TEMP, /* max6695/96 only */ 357 REMOTE2_LOW, /* max6695/96 only */ 358 REMOTE2_HIGH, /* max6695/96 only */ 359 TEMP11_REG_NUM 360 }; 361 362 /* 363 * Client data (each client gets its own) 364 */ 365 366 struct lm90_data { 367 struct i2c_client *client; 368 const struct attribute_group *groups[6]; 369 struct mutex update_lock; 370 bool valid; /* true if register values are valid */ 371 unsigned long last_updated; /* in jiffies */ 372 int kind; 373 u32 flags; 374 375 unsigned int update_interval; /* in milliseconds */ 376 377 u8 config_orig; /* Original configuration register value */ 378 u8 convrate_orig; /* Original conversion rate register value */ 379 u16 alert_alarms; /* Which alarm bits trigger ALERT# */ 380 /* Upper 8 bits for max6695/96 */ 381 u8 max_convrate; /* Maximum conversion rate */ 382 u8 reg_local_ext; /* local extension register offset */ 383 384 /* registers values */ 385 s8 temp8[TEMP8_REG_NUM]; 386 s16 temp11[TEMP11_REG_NUM]; 387 u8 temp_hyst; 388 u16 alarms; /* bitvector (upper 8 bits for max6695/96) */ 389 }; 390 391 /* 392 * Support functions 393 */ 394 395 /* 396 * The ADM1032 supports PEC but not on write byte transactions, so we need 397 * to explicitly ask for a transaction without PEC. 398 */ 399 static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value) 400 { 401 return i2c_smbus_xfer(client->adapter, client->addr, 402 client->flags & ~I2C_CLIENT_PEC, 403 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL); 404 } 405 406 /* 407 * It is assumed that client->update_lock is held (unless we are in 408 * detection or initialization steps). This matters when PEC is enabled, 409 * because we don't want the address pointer to change between the write 410 * byte and the read byte transactions. 411 */ 412 static int lm90_read_reg(struct i2c_client *client, u8 reg) 413 { 414 int err; 415 416 if (client->flags & I2C_CLIENT_PEC) { 417 err = adm1032_write_byte(client, reg); 418 if (err >= 0) 419 err = i2c_smbus_read_byte(client); 420 } else 421 err = i2c_smbus_read_byte_data(client, reg); 422 423 return err; 424 } 425 426 static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl) 427 { 428 int oldh, newh, l; 429 430 /* 431 * There is a trick here. We have to read two registers to have the 432 * sensor temperature, but we have to beware a conversion could occur 433 * between the readings. The datasheet says we should either use 434 * the one-shot conversion register, which we don't want to do 435 * (disables hardware monitoring) or monitor the busy bit, which is 436 * impossible (we can't read the values and monitor that bit at the 437 * exact same time). So the solution used here is to read the high 438 * byte once, then the low byte, then the high byte again. If the new 439 * high byte matches the old one, then we have a valid reading. Else 440 * we have to read the low byte again, and now we believe we have a 441 * correct reading. 442 */ 443 oldh = lm90_read_reg(client, regh); 444 if (oldh < 0) 445 return oldh; 446 l = lm90_read_reg(client, regl); 447 if (l < 0) 448 return l; 449 newh = lm90_read_reg(client, regh); 450 if (newh < 0) 451 return newh; 452 if (oldh != newh) { 453 l = lm90_read_reg(client, regl); 454 if (l < 0) 455 return l; 456 } 457 return (newh << 8) | l; 458 } 459 460 /* 461 * client->update_lock must be held when calling this function (unless we are 462 * in detection or initialization steps), and while a remote channel other 463 * than channel 0 is selected. Also, calling code must make sure to re-select 464 * external channel 0 before releasing the lock. This is necessary because 465 * various registers have different meanings as a result of selecting a 466 * non-default remote channel. 467 */ 468 static inline int lm90_select_remote_channel(struct i2c_client *client, 469 struct lm90_data *data, 470 int channel) 471 { 472 int config; 473 474 if (data->kind == max6696) { 475 config = lm90_read_reg(client, LM90_REG_R_CONFIG1); 476 if (config < 0) 477 return config; 478 config &= ~0x08; 479 if (channel) 480 config |= 0x08; 481 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, 482 config); 483 } 484 return 0; 485 } 486 487 /* 488 * Set conversion rate. 489 * client->update_lock must be held when calling this function (unless we are 490 * in detection or initialization steps). 491 */ 492 static void lm90_set_convrate(struct i2c_client *client, struct lm90_data *data, 493 unsigned int interval) 494 { 495 int i; 496 unsigned int update_interval; 497 498 /* Shift calculations to avoid rounding errors */ 499 interval <<= 6; 500 501 /* find the nearest update rate */ 502 for (i = 0, update_interval = LM90_MAX_CONVRATE_MS << 6; 503 i < data->max_convrate; i++, update_interval >>= 1) 504 if (interval >= update_interval * 3 / 4) 505 break; 506 507 i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE, i); 508 data->update_interval = DIV_ROUND_CLOSEST(update_interval, 64); 509 } 510 511 static int lm90_update_limits(struct device *dev) 512 { 513 struct lm90_data *data = dev_get_drvdata(dev); 514 struct i2c_client *client = data->client; 515 int val; 516 517 val = lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT); 518 if (val < 0) 519 return val; 520 data->temp8[LOCAL_CRIT] = val; 521 522 val = lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT); 523 if (val < 0) 524 return val; 525 data->temp8[REMOTE_CRIT] = val; 526 527 val = lm90_read_reg(client, LM90_REG_R_TCRIT_HYST); 528 if (val < 0) 529 return val; 530 data->temp_hyst = val; 531 532 val = lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH); 533 if (val < 0) 534 return val; 535 data->temp11[REMOTE_LOW] = val << 8; 536 537 if (data->flags & LM90_HAVE_REM_LIMIT_EXT) { 538 val = lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL); 539 if (val < 0) 540 return val; 541 data->temp11[REMOTE_LOW] |= val; 542 } 543 544 val = lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH); 545 if (val < 0) 546 return val; 547 data->temp11[REMOTE_HIGH] = val << 8; 548 549 if (data->flags & LM90_HAVE_REM_LIMIT_EXT) { 550 val = lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL); 551 if (val < 0) 552 return val; 553 data->temp11[REMOTE_HIGH] |= val; 554 } 555 556 if (data->flags & LM90_HAVE_OFFSET) { 557 val = lm90_read16(client, LM90_REG_R_REMOTE_OFFSH, 558 LM90_REG_R_REMOTE_OFFSL); 559 if (val < 0) 560 return val; 561 data->temp11[REMOTE_OFFSET] = val; 562 } 563 564 if (data->flags & LM90_HAVE_EMERGENCY) { 565 val = lm90_read_reg(client, MAX6659_REG_R_LOCAL_EMERG); 566 if (val < 0) 567 return val; 568 data->temp8[LOCAL_EMERG] = val; 569 570 val = lm90_read_reg(client, MAX6659_REG_R_REMOTE_EMERG); 571 if (val < 0) 572 return val; 573 data->temp8[REMOTE_EMERG] = val; 574 } 575 576 if (data->kind == max6696) { 577 val = lm90_select_remote_channel(client, data, 1); 578 if (val < 0) 579 return val; 580 581 val = lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT); 582 if (val < 0) 583 return val; 584 data->temp8[REMOTE2_CRIT] = val; 585 586 val = lm90_read_reg(client, MAX6659_REG_R_REMOTE_EMERG); 587 if (val < 0) 588 return val; 589 data->temp8[REMOTE2_EMERG] = val; 590 591 val = lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH); 592 if (val < 0) 593 return val; 594 data->temp11[REMOTE2_LOW] = val << 8; 595 596 val = lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH); 597 if (val < 0) 598 return val; 599 data->temp11[REMOTE2_HIGH] = val << 8; 600 601 lm90_select_remote_channel(client, data, 0); 602 } 603 604 return 0; 605 } 606 607 static struct lm90_data *lm90_update_device(struct device *dev) 608 { 609 struct lm90_data *data = dev_get_drvdata(dev); 610 struct i2c_client *client = data->client; 611 unsigned long next_update; 612 int val = 0; 613 614 mutex_lock(&data->update_lock); 615 616 if (!data->valid) { 617 val = lm90_update_limits(dev); 618 if (val < 0) 619 goto error; 620 } 621 622 next_update = data->last_updated + 623 msecs_to_jiffies(data->update_interval); 624 if (time_after(jiffies, next_update) || !data->valid) { 625 dev_dbg(&client->dev, "Updating lm90 data.\n"); 626 627 data->valid = false; 628 629 val = lm90_read_reg(client, LM90_REG_R_LOCAL_LOW); 630 if (val < 0) 631 goto error; 632 data->temp8[LOCAL_LOW] = val; 633 634 val = lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH); 635 if (val < 0) 636 goto error; 637 data->temp8[LOCAL_HIGH] = val; 638 639 if (data->reg_local_ext) { 640 val = lm90_read16(client, LM90_REG_R_LOCAL_TEMP, 641 data->reg_local_ext); 642 if (val < 0) 643 goto error; 644 data->temp11[LOCAL_TEMP] = val; 645 } else { 646 val = lm90_read_reg(client, LM90_REG_R_LOCAL_TEMP); 647 if (val < 0) 648 goto error; 649 data->temp11[LOCAL_TEMP] = val << 8; 650 } 651 val = lm90_read16(client, LM90_REG_R_REMOTE_TEMPH, 652 LM90_REG_R_REMOTE_TEMPL); 653 if (val < 0) 654 goto error; 655 data->temp11[REMOTE_TEMP] = val; 656 657 val = lm90_read_reg(client, LM90_REG_R_STATUS); 658 if (val < 0) 659 goto error; 660 data->alarms = val; /* lower 8 bit of alarms */ 661 662 if (data->kind == max6696) { 663 val = lm90_select_remote_channel(client, data, 1); 664 if (val < 0) 665 goto error; 666 667 val = lm90_read16(client, LM90_REG_R_REMOTE_TEMPH, 668 LM90_REG_R_REMOTE_TEMPL); 669 if (val < 0) 670 goto error; 671 data->temp11[REMOTE2_TEMP] = val; 672 673 lm90_select_remote_channel(client, data, 0); 674 675 val = lm90_read_reg(client, MAX6696_REG_R_STATUS2); 676 if (val < 0) 677 goto error; 678 data->alarms |= val << 8; 679 } 680 681 /* 682 * Re-enable ALERT# output if it was originally enabled and 683 * relevant alarms are all clear 684 */ 685 if (!(data->config_orig & 0x80) && 686 !(data->alarms & data->alert_alarms)) { 687 val = lm90_read_reg(client, LM90_REG_R_CONFIG1); 688 if (val < 0) 689 goto error; 690 691 if (val & 0x80) { 692 dev_dbg(&client->dev, "Re-enabling ALERT#\n"); 693 i2c_smbus_write_byte_data(client, 694 LM90_REG_W_CONFIG1, 695 val & ~0x80); 696 } 697 } 698 699 data->last_updated = jiffies; 700 data->valid = true; 701 } 702 703 error: 704 mutex_unlock(&data->update_lock); 705 706 if (val < 0) 707 return ERR_PTR(val); 708 709 return data; 710 } 711 712 /* 713 * Conversions 714 * For local temperatures and limits, critical limits and the hysteresis 715 * value, the LM90 uses signed 8-bit values with LSB = 1 degree Celsius. 716 * For remote temperatures and limits, it uses signed 11-bit values with 717 * LSB = 0.125 degree Celsius, left-justified in 16-bit registers. Some 718 * Maxim chips use unsigned values. 719 */ 720 721 static inline int temp_from_s8(s8 val) 722 { 723 return val * 1000; 724 } 725 726 static inline int temp_from_u8(u8 val) 727 { 728 return val * 1000; 729 } 730 731 static inline int temp_from_s16(s16 val) 732 { 733 return val / 32 * 125; 734 } 735 736 static inline int temp_from_u16(u16 val) 737 { 738 return val / 32 * 125; 739 } 740 741 static s8 temp_to_s8(long val) 742 { 743 if (val <= -128000) 744 return -128; 745 if (val >= 127000) 746 return 127; 747 if (val < 0) 748 return (val - 500) / 1000; 749 return (val + 500) / 1000; 750 } 751 752 static u8 temp_to_u8(long val) 753 { 754 if (val <= 0) 755 return 0; 756 if (val >= 255000) 757 return 255; 758 return (val + 500) / 1000; 759 } 760 761 static s16 temp_to_s16(long val) 762 { 763 if (val <= -128000) 764 return 0x8000; 765 if (val >= 127875) 766 return 0x7FE0; 767 if (val < 0) 768 return (val - 62) / 125 * 32; 769 return (val + 62) / 125 * 32; 770 } 771 772 static u8 hyst_to_reg(long val) 773 { 774 if (val <= 0) 775 return 0; 776 if (val >= 30500) 777 return 31; 778 return (val + 500) / 1000; 779 } 780 781 /* 782 * ADT7461 in compatibility mode is almost identical to LM90 except that 783 * attempts to write values that are outside the range 0 < temp < 127 are 784 * treated as the boundary value. 785 * 786 * ADT7461 in "extended mode" operation uses unsigned integers offset by 787 * 64 (e.g., 0 -> -64 degC). The range is restricted to -64..191 degC. 788 */ 789 static inline int temp_from_u8_adt7461(struct lm90_data *data, u8 val) 790 { 791 if (data->flags & LM90_FLAG_ADT7461_EXT) 792 return (val - 64) * 1000; 793 return temp_from_s8(val); 794 } 795 796 static inline int temp_from_u16_adt7461(struct lm90_data *data, u16 val) 797 { 798 if (data->flags & LM90_FLAG_ADT7461_EXT) 799 return (val - 0x4000) / 64 * 250; 800 return temp_from_s16(val); 801 } 802 803 static u8 temp_to_u8_adt7461(struct lm90_data *data, long val) 804 { 805 if (data->flags & LM90_FLAG_ADT7461_EXT) { 806 if (val <= -64000) 807 return 0; 808 if (val >= 191000) 809 return 0xFF; 810 return (val + 500 + 64000) / 1000; 811 } 812 if (val <= 0) 813 return 0; 814 if (val >= 127000) 815 return 127; 816 return (val + 500) / 1000; 817 } 818 819 static u16 temp_to_u16_adt7461(struct lm90_data *data, long val) 820 { 821 if (data->flags & LM90_FLAG_ADT7461_EXT) { 822 if (val <= -64000) 823 return 0; 824 if (val >= 191750) 825 return 0xFFC0; 826 return (val + 64000 + 125) / 250 * 64; 827 } 828 if (val <= 0) 829 return 0; 830 if (val >= 127750) 831 return 0x7FC0; 832 return (val + 125) / 250 * 64; 833 } 834 835 /* 836 * Sysfs stuff 837 */ 838 839 static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr, 840 char *buf) 841 { 842 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 843 struct lm90_data *data = lm90_update_device(dev); 844 int temp; 845 846 if (IS_ERR(data)) 847 return PTR_ERR(data); 848 849 if (data->kind == adt7461 || data->kind == tmp451) 850 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]); 851 else if (data->kind == max6646) 852 temp = temp_from_u8(data->temp8[attr->index]); 853 else 854 temp = temp_from_s8(data->temp8[attr->index]); 855 856 /* +16 degrees offset for temp2 for the LM99 */ 857 if (data->kind == lm99 && attr->index == 3) 858 temp += 16000; 859 860 return sprintf(buf, "%d\n", temp); 861 } 862 863 static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr, 864 const char *buf, size_t count) 865 { 866 static const u8 reg[TEMP8_REG_NUM] = { 867 LM90_REG_W_LOCAL_LOW, 868 LM90_REG_W_LOCAL_HIGH, 869 LM90_REG_W_LOCAL_CRIT, 870 LM90_REG_W_REMOTE_CRIT, 871 MAX6659_REG_W_LOCAL_EMERG, 872 MAX6659_REG_W_REMOTE_EMERG, 873 LM90_REG_W_REMOTE_CRIT, 874 MAX6659_REG_W_REMOTE_EMERG, 875 }; 876 877 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 878 struct lm90_data *data = dev_get_drvdata(dev); 879 struct i2c_client *client = data->client; 880 int nr = attr->index; 881 long val; 882 int err; 883 884 err = kstrtol(buf, 10, &val); 885 if (err < 0) 886 return err; 887 888 /* +16 degrees offset for temp2 for the LM99 */ 889 if (data->kind == lm99 && attr->index == 3) 890 val -= 16000; 891 892 mutex_lock(&data->update_lock); 893 if (data->kind == adt7461 || data->kind == tmp451) 894 data->temp8[nr] = temp_to_u8_adt7461(data, val); 895 else if (data->kind == max6646) 896 data->temp8[nr] = temp_to_u8(val); 897 else 898 data->temp8[nr] = temp_to_s8(val); 899 900 lm90_select_remote_channel(client, data, nr >= 6); 901 i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]); 902 lm90_select_remote_channel(client, data, 0); 903 904 mutex_unlock(&data->update_lock); 905 return count; 906 } 907 908 static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr, 909 char *buf) 910 { 911 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr); 912 struct lm90_data *data = lm90_update_device(dev); 913 int temp; 914 915 if (IS_ERR(data)) 916 return PTR_ERR(data); 917 918 if (data->kind == adt7461 || data->kind == tmp451) 919 temp = temp_from_u16_adt7461(data, data->temp11[attr->index]); 920 else if (data->kind == max6646) 921 temp = temp_from_u16(data->temp11[attr->index]); 922 else 923 temp = temp_from_s16(data->temp11[attr->index]); 924 925 /* +16 degrees offset for temp2 for the LM99 */ 926 if (data->kind == lm99 && attr->index <= 2) 927 temp += 16000; 928 929 return sprintf(buf, "%d\n", temp); 930 } 931 932 static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr, 933 const char *buf, size_t count) 934 { 935 struct { 936 u8 high; 937 u8 low; 938 int channel; 939 } reg[5] = { 940 { LM90_REG_W_REMOTE_LOWH, LM90_REG_W_REMOTE_LOWL, 0 }, 941 { LM90_REG_W_REMOTE_HIGHH, LM90_REG_W_REMOTE_HIGHL, 0 }, 942 { LM90_REG_W_REMOTE_OFFSH, LM90_REG_W_REMOTE_OFFSL, 0 }, 943 { LM90_REG_W_REMOTE_LOWH, LM90_REG_W_REMOTE_LOWL, 1 }, 944 { LM90_REG_W_REMOTE_HIGHH, LM90_REG_W_REMOTE_HIGHL, 1 } 945 }; 946 947 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr); 948 struct lm90_data *data = dev_get_drvdata(dev); 949 struct i2c_client *client = data->client; 950 int nr = attr->nr; 951 int index = attr->index; 952 long val; 953 int err; 954 955 err = kstrtol(buf, 10, &val); 956 if (err < 0) 957 return err; 958 959 /* +16 degrees offset for temp2 for the LM99 */ 960 if (data->kind == lm99 && index <= 2) 961 val -= 16000; 962 963 mutex_lock(&data->update_lock); 964 if (data->kind == adt7461 || data->kind == tmp451) 965 data->temp11[index] = temp_to_u16_adt7461(data, val); 966 else if (data->kind == max6646) 967 data->temp11[index] = temp_to_u8(val) << 8; 968 else if (data->flags & LM90_HAVE_REM_LIMIT_EXT) 969 data->temp11[index] = temp_to_s16(val); 970 else 971 data->temp11[index] = temp_to_s8(val) << 8; 972 973 lm90_select_remote_channel(client, data, reg[nr].channel); 974 i2c_smbus_write_byte_data(client, reg[nr].high, 975 data->temp11[index] >> 8); 976 if (data->flags & LM90_HAVE_REM_LIMIT_EXT) 977 i2c_smbus_write_byte_data(client, reg[nr].low, 978 data->temp11[index] & 0xff); 979 lm90_select_remote_channel(client, data, 0); 980 981 mutex_unlock(&data->update_lock); 982 return count; 983 } 984 985 static ssize_t show_temphyst(struct device *dev, 986 struct device_attribute *devattr, 987 char *buf) 988 { 989 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 990 struct lm90_data *data = lm90_update_device(dev); 991 int temp; 992 993 if (IS_ERR(data)) 994 return PTR_ERR(data); 995 996 if (data->kind == adt7461 || data->kind == tmp451) 997 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]); 998 else if (data->kind == max6646) 999 temp = temp_from_u8(data->temp8[attr->index]); 1000 else 1001 temp = temp_from_s8(data->temp8[attr->index]); 1002 1003 /* +16 degrees offset for temp2 for the LM99 */ 1004 if (data->kind == lm99 && attr->index == 3) 1005 temp += 16000; 1006 1007 return sprintf(buf, "%d\n", temp - temp_from_s8(data->temp_hyst)); 1008 } 1009 1010 static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy, 1011 const char *buf, size_t count) 1012 { 1013 struct lm90_data *data = dev_get_drvdata(dev); 1014 struct i2c_client *client = data->client; 1015 long val; 1016 int err; 1017 int temp; 1018 1019 err = kstrtol(buf, 10, &val); 1020 if (err < 0) 1021 return err; 1022 1023 mutex_lock(&data->update_lock); 1024 if (data->kind == adt7461 || data->kind == tmp451) 1025 temp = temp_from_u8_adt7461(data, data->temp8[LOCAL_CRIT]); 1026 else if (data->kind == max6646) 1027 temp = temp_from_u8(data->temp8[LOCAL_CRIT]); 1028 else 1029 temp = temp_from_s8(data->temp8[LOCAL_CRIT]); 1030 1031 data->temp_hyst = hyst_to_reg(temp - val); 1032 i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST, 1033 data->temp_hyst); 1034 mutex_unlock(&data->update_lock); 1035 return count; 1036 } 1037 1038 static ssize_t show_alarms(struct device *dev, struct device_attribute *dummy, 1039 char *buf) 1040 { 1041 struct lm90_data *data = lm90_update_device(dev); 1042 1043 if (IS_ERR(data)) 1044 return PTR_ERR(data); 1045 1046 return sprintf(buf, "%d\n", data->alarms); 1047 } 1048 1049 static ssize_t show_alarm(struct device *dev, struct device_attribute 1050 *devattr, char *buf) 1051 { 1052 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1053 struct lm90_data *data = lm90_update_device(dev); 1054 int bitnr = attr->index; 1055 1056 if (IS_ERR(data)) 1057 return PTR_ERR(data); 1058 1059 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1); 1060 } 1061 1062 static ssize_t show_update_interval(struct device *dev, 1063 struct device_attribute *attr, char *buf) 1064 { 1065 struct lm90_data *data = dev_get_drvdata(dev); 1066 1067 return sprintf(buf, "%u\n", data->update_interval); 1068 } 1069 1070 static ssize_t set_update_interval(struct device *dev, 1071 struct device_attribute *attr, 1072 const char *buf, size_t count) 1073 { 1074 struct lm90_data *data = dev_get_drvdata(dev); 1075 struct i2c_client *client = data->client; 1076 unsigned long val; 1077 int err; 1078 1079 err = kstrtoul(buf, 10, &val); 1080 if (err) 1081 return err; 1082 1083 mutex_lock(&data->update_lock); 1084 lm90_set_convrate(client, data, clamp_val(val, 0, 100000)); 1085 mutex_unlock(&data->update_lock); 1086 1087 return count; 1088 } 1089 1090 static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp11, NULL, 1091 0, LOCAL_TEMP); 1092 static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp11, NULL, 1093 0, REMOTE_TEMP); 1094 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8, 1095 set_temp8, LOCAL_LOW); 1096 static SENSOR_DEVICE_ATTR_2(temp2_min, S_IWUSR | S_IRUGO, show_temp11, 1097 set_temp11, 0, REMOTE_LOW); 1098 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8, 1099 set_temp8, LOCAL_HIGH); 1100 static SENSOR_DEVICE_ATTR_2(temp2_max, S_IWUSR | S_IRUGO, show_temp11, 1101 set_temp11, 1, REMOTE_HIGH); 1102 static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8, 1103 set_temp8, LOCAL_CRIT); 1104 static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8, 1105 set_temp8, REMOTE_CRIT); 1106 static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst, 1107 set_temphyst, LOCAL_CRIT); 1108 static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 1109 REMOTE_CRIT); 1110 static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IWUSR | S_IRUGO, show_temp11, 1111 set_temp11, 2, REMOTE_OFFSET); 1112 1113 /* Individual alarm files */ 1114 static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0); 1115 static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1); 1116 static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2); 1117 static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3); 1118 static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4); 1119 static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 5); 1120 static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6); 1121 /* Raw alarm file for compatibility */ 1122 static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 1123 1124 static DEVICE_ATTR(update_interval, S_IRUGO | S_IWUSR, show_update_interval, 1125 set_update_interval); 1126 1127 static struct attribute *lm90_attributes[] = { 1128 &sensor_dev_attr_temp1_input.dev_attr.attr, 1129 &sensor_dev_attr_temp2_input.dev_attr.attr, 1130 &sensor_dev_attr_temp1_min.dev_attr.attr, 1131 &sensor_dev_attr_temp2_min.dev_attr.attr, 1132 &sensor_dev_attr_temp1_max.dev_attr.attr, 1133 &sensor_dev_attr_temp2_max.dev_attr.attr, 1134 &sensor_dev_attr_temp1_crit.dev_attr.attr, 1135 &sensor_dev_attr_temp2_crit.dev_attr.attr, 1136 &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr, 1137 &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr, 1138 1139 &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr, 1140 &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr, 1141 &sensor_dev_attr_temp2_fault.dev_attr.attr, 1142 &sensor_dev_attr_temp2_min_alarm.dev_attr.attr, 1143 &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, 1144 &sensor_dev_attr_temp1_min_alarm.dev_attr.attr, 1145 &sensor_dev_attr_temp1_max_alarm.dev_attr.attr, 1146 &dev_attr_alarms.attr, 1147 &dev_attr_update_interval.attr, 1148 NULL 1149 }; 1150 1151 static const struct attribute_group lm90_group = { 1152 .attrs = lm90_attributes, 1153 }; 1154 1155 static struct attribute *lm90_temp2_offset_attributes[] = { 1156 &sensor_dev_attr_temp2_offset.dev_attr.attr, 1157 NULL 1158 }; 1159 1160 static const struct attribute_group lm90_temp2_offset_group = { 1161 .attrs = lm90_temp2_offset_attributes, 1162 }; 1163 1164 /* 1165 * Additional attributes for devices with emergency sensors 1166 */ 1167 static SENSOR_DEVICE_ATTR(temp1_emergency, S_IWUSR | S_IRUGO, show_temp8, 1168 set_temp8, LOCAL_EMERG); 1169 static SENSOR_DEVICE_ATTR(temp2_emergency, S_IWUSR | S_IRUGO, show_temp8, 1170 set_temp8, REMOTE_EMERG); 1171 static SENSOR_DEVICE_ATTR(temp1_emergency_hyst, S_IRUGO, show_temphyst, 1172 NULL, LOCAL_EMERG); 1173 static SENSOR_DEVICE_ATTR(temp2_emergency_hyst, S_IRUGO, show_temphyst, 1174 NULL, REMOTE_EMERG); 1175 1176 static struct attribute *lm90_emergency_attributes[] = { 1177 &sensor_dev_attr_temp1_emergency.dev_attr.attr, 1178 &sensor_dev_attr_temp2_emergency.dev_attr.attr, 1179 &sensor_dev_attr_temp1_emergency_hyst.dev_attr.attr, 1180 &sensor_dev_attr_temp2_emergency_hyst.dev_attr.attr, 1181 NULL 1182 }; 1183 1184 static const struct attribute_group lm90_emergency_group = { 1185 .attrs = lm90_emergency_attributes, 1186 }; 1187 1188 static SENSOR_DEVICE_ATTR(temp1_emergency_alarm, S_IRUGO, show_alarm, NULL, 15); 1189 static SENSOR_DEVICE_ATTR(temp2_emergency_alarm, S_IRUGO, show_alarm, NULL, 13); 1190 1191 static struct attribute *lm90_emergency_alarm_attributes[] = { 1192 &sensor_dev_attr_temp1_emergency_alarm.dev_attr.attr, 1193 &sensor_dev_attr_temp2_emergency_alarm.dev_attr.attr, 1194 NULL 1195 }; 1196 1197 static const struct attribute_group lm90_emergency_alarm_group = { 1198 .attrs = lm90_emergency_alarm_attributes, 1199 }; 1200 1201 /* 1202 * Additional attributes for devices with 3 temperature sensors 1203 */ 1204 static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp11, NULL, 1205 0, REMOTE2_TEMP); 1206 static SENSOR_DEVICE_ATTR_2(temp3_min, S_IWUSR | S_IRUGO, show_temp11, 1207 set_temp11, 3, REMOTE2_LOW); 1208 static SENSOR_DEVICE_ATTR_2(temp3_max, S_IWUSR | S_IRUGO, show_temp11, 1209 set_temp11, 4, REMOTE2_HIGH); 1210 static SENSOR_DEVICE_ATTR(temp3_crit, S_IWUSR | S_IRUGO, show_temp8, 1211 set_temp8, REMOTE2_CRIT); 1212 static SENSOR_DEVICE_ATTR(temp3_crit_hyst, S_IRUGO, show_temphyst, NULL, 1213 REMOTE2_CRIT); 1214 static SENSOR_DEVICE_ATTR(temp3_emergency, S_IWUSR | S_IRUGO, show_temp8, 1215 set_temp8, REMOTE2_EMERG); 1216 static SENSOR_DEVICE_ATTR(temp3_emergency_hyst, S_IRUGO, show_temphyst, 1217 NULL, REMOTE2_EMERG); 1218 1219 static SENSOR_DEVICE_ATTR(temp3_crit_alarm, S_IRUGO, show_alarm, NULL, 9); 1220 static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 10); 1221 static SENSOR_DEVICE_ATTR(temp3_min_alarm, S_IRUGO, show_alarm, NULL, 11); 1222 static SENSOR_DEVICE_ATTR(temp3_max_alarm, S_IRUGO, show_alarm, NULL, 12); 1223 static SENSOR_DEVICE_ATTR(temp3_emergency_alarm, S_IRUGO, show_alarm, NULL, 14); 1224 1225 static struct attribute *lm90_temp3_attributes[] = { 1226 &sensor_dev_attr_temp3_input.dev_attr.attr, 1227 &sensor_dev_attr_temp3_min.dev_attr.attr, 1228 &sensor_dev_attr_temp3_max.dev_attr.attr, 1229 &sensor_dev_attr_temp3_crit.dev_attr.attr, 1230 &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr, 1231 &sensor_dev_attr_temp3_emergency.dev_attr.attr, 1232 &sensor_dev_attr_temp3_emergency_hyst.dev_attr.attr, 1233 1234 &sensor_dev_attr_temp3_fault.dev_attr.attr, 1235 &sensor_dev_attr_temp3_min_alarm.dev_attr.attr, 1236 &sensor_dev_attr_temp3_max_alarm.dev_attr.attr, 1237 &sensor_dev_attr_temp3_crit_alarm.dev_attr.attr, 1238 &sensor_dev_attr_temp3_emergency_alarm.dev_attr.attr, 1239 NULL 1240 }; 1241 1242 static const struct attribute_group lm90_temp3_group = { 1243 .attrs = lm90_temp3_attributes, 1244 }; 1245 1246 /* pec used for ADM1032 only */ 1247 static ssize_t show_pec(struct device *dev, struct device_attribute *dummy, 1248 char *buf) 1249 { 1250 struct i2c_client *client = to_i2c_client(dev); 1251 return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC)); 1252 } 1253 1254 static ssize_t set_pec(struct device *dev, struct device_attribute *dummy, 1255 const char *buf, size_t count) 1256 { 1257 struct i2c_client *client = to_i2c_client(dev); 1258 long val; 1259 int err; 1260 1261 err = kstrtol(buf, 10, &val); 1262 if (err < 0) 1263 return err; 1264 1265 switch (val) { 1266 case 0: 1267 client->flags &= ~I2C_CLIENT_PEC; 1268 break; 1269 case 1: 1270 client->flags |= I2C_CLIENT_PEC; 1271 break; 1272 default: 1273 return -EINVAL; 1274 } 1275 1276 return count; 1277 } 1278 1279 static DEVICE_ATTR(pec, S_IWUSR | S_IRUGO, show_pec, set_pec); 1280 1281 /* 1282 * Real code 1283 */ 1284 1285 /* Return 0 if detection is successful, -ENODEV otherwise */ 1286 static int lm90_detect(struct i2c_client *client, 1287 struct i2c_board_info *info) 1288 { 1289 struct i2c_adapter *adapter = client->adapter; 1290 int address = client->addr; 1291 const char *name = NULL; 1292 int man_id, chip_id, config1, config2, convrate; 1293 1294 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 1295 return -ENODEV; 1296 1297 /* detection and identification */ 1298 man_id = i2c_smbus_read_byte_data(client, LM90_REG_R_MAN_ID); 1299 chip_id = i2c_smbus_read_byte_data(client, LM90_REG_R_CHIP_ID); 1300 config1 = i2c_smbus_read_byte_data(client, LM90_REG_R_CONFIG1); 1301 convrate = i2c_smbus_read_byte_data(client, LM90_REG_R_CONVRATE); 1302 if (man_id < 0 || chip_id < 0 || config1 < 0 || convrate < 0) 1303 return -ENODEV; 1304 1305 if (man_id == 0x01 || man_id == 0x5C || man_id == 0x41) { 1306 config2 = i2c_smbus_read_byte_data(client, LM90_REG_R_CONFIG2); 1307 if (config2 < 0) 1308 return -ENODEV; 1309 } else 1310 config2 = 0; /* Make compiler happy */ 1311 1312 if ((address == 0x4C || address == 0x4D) 1313 && man_id == 0x01) { /* National Semiconductor */ 1314 if ((config1 & 0x2A) == 0x00 1315 && (config2 & 0xF8) == 0x00 1316 && convrate <= 0x09) { 1317 if (address == 0x4C 1318 && (chip_id & 0xF0) == 0x20) { /* LM90 */ 1319 name = "lm90"; 1320 } else 1321 if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */ 1322 name = "lm99"; 1323 dev_info(&adapter->dev, 1324 "Assuming LM99 chip at 0x%02x\n", 1325 address); 1326 dev_info(&adapter->dev, 1327 "If it is an LM89, instantiate it " 1328 "with the new_device sysfs " 1329 "interface\n"); 1330 } else 1331 if (address == 0x4C 1332 && (chip_id & 0xF0) == 0x10) { /* LM86 */ 1333 name = "lm86"; 1334 } 1335 } 1336 } else 1337 if ((address == 0x4C || address == 0x4D) 1338 && man_id == 0x41) { /* Analog Devices */ 1339 if ((chip_id & 0xF0) == 0x40 /* ADM1032 */ 1340 && (config1 & 0x3F) == 0x00 1341 && convrate <= 0x0A) { 1342 name = "adm1032"; 1343 /* 1344 * The ADM1032 supports PEC, but only if combined 1345 * transactions are not used. 1346 */ 1347 if (i2c_check_functionality(adapter, 1348 I2C_FUNC_SMBUS_BYTE)) 1349 info->flags |= I2C_CLIENT_PEC; 1350 } else 1351 if (chip_id == 0x51 /* ADT7461 */ 1352 && (config1 & 0x1B) == 0x00 1353 && convrate <= 0x0A) { 1354 name = "adt7461"; 1355 } else 1356 if (chip_id == 0x57 /* ADT7461A, NCT1008 */ 1357 && (config1 & 0x1B) == 0x00 1358 && convrate <= 0x0A) { 1359 name = "adt7461a"; 1360 } 1361 } else 1362 if (man_id == 0x4D) { /* Maxim */ 1363 int emerg, emerg2, status2; 1364 1365 /* 1366 * We read MAX6659_REG_R_REMOTE_EMERG twice, and re-read 1367 * LM90_REG_R_MAN_ID in between. If MAX6659_REG_R_REMOTE_EMERG 1368 * exists, both readings will reflect the same value. Otherwise, 1369 * the readings will be different. 1370 */ 1371 emerg = i2c_smbus_read_byte_data(client, 1372 MAX6659_REG_R_REMOTE_EMERG); 1373 man_id = i2c_smbus_read_byte_data(client, 1374 LM90_REG_R_MAN_ID); 1375 emerg2 = i2c_smbus_read_byte_data(client, 1376 MAX6659_REG_R_REMOTE_EMERG); 1377 status2 = i2c_smbus_read_byte_data(client, 1378 MAX6696_REG_R_STATUS2); 1379 if (emerg < 0 || man_id < 0 || emerg2 < 0 || status2 < 0) 1380 return -ENODEV; 1381 1382 /* 1383 * The MAX6657, MAX6658 and MAX6659 do NOT have a chip_id 1384 * register. Reading from that address will return the last 1385 * read value, which in our case is those of the man_id 1386 * register. Likewise, the config1 register seems to lack a 1387 * low nibble, so the value will be those of the previous 1388 * read, so in our case those of the man_id register. 1389 * MAX6659 has a third set of upper temperature limit registers. 1390 * Those registers also return values on MAX6657 and MAX6658, 1391 * thus the only way to detect MAX6659 is by its address. 1392 * For this reason it will be mis-detected as MAX6657 if its 1393 * address is 0x4C. 1394 */ 1395 if (chip_id == man_id 1396 && (address == 0x4C || address == 0x4D || address == 0x4E) 1397 && (config1 & 0x1F) == (man_id & 0x0F) 1398 && convrate <= 0x09) { 1399 if (address == 0x4C) 1400 name = "max6657"; 1401 else 1402 name = "max6659"; 1403 } else 1404 /* 1405 * Even though MAX6695 and MAX6696 do not have a chip ID 1406 * register, reading it returns 0x01. Bit 4 of the config1 1407 * register is unused and should return zero when read. Bit 0 of 1408 * the status2 register is unused and should return zero when 1409 * read. 1410 * 1411 * MAX6695 and MAX6696 have an additional set of temperature 1412 * limit registers. We can detect those chips by checking if 1413 * one of those registers exists. 1414 */ 1415 if (chip_id == 0x01 1416 && (config1 & 0x10) == 0x00 1417 && (status2 & 0x01) == 0x00 1418 && emerg == emerg2 1419 && convrate <= 0x07) { 1420 name = "max6696"; 1421 } else 1422 /* 1423 * The chip_id register of the MAX6680 and MAX6681 holds the 1424 * revision of the chip. The lowest bit of the config1 register 1425 * is unused and should return zero when read, so should the 1426 * second to last bit of config1 (software reset). 1427 */ 1428 if (chip_id == 0x01 1429 && (config1 & 0x03) == 0x00 1430 && convrate <= 0x07) { 1431 name = "max6680"; 1432 } else 1433 /* 1434 * The chip_id register of the MAX6646/6647/6649 holds the 1435 * revision of the chip. The lowest 6 bits of the config1 1436 * register are unused and should return zero when read. 1437 */ 1438 if (chip_id == 0x59 1439 && (config1 & 0x3f) == 0x00 1440 && convrate <= 0x07) { 1441 name = "max6646"; 1442 } 1443 } else 1444 if (address == 0x4C 1445 && man_id == 0x5C) { /* Winbond/Nuvoton */ 1446 if ((config1 & 0x2A) == 0x00 1447 && (config2 & 0xF8) == 0x00) { 1448 if (chip_id == 0x01 /* W83L771W/G */ 1449 && convrate <= 0x09) { 1450 name = "w83l771"; 1451 } else 1452 if ((chip_id & 0xFE) == 0x10 /* W83L771AWG/ASG */ 1453 && convrate <= 0x08) { 1454 name = "w83l771"; 1455 } 1456 } 1457 } else 1458 if (address >= 0x48 && address <= 0x4F 1459 && man_id == 0xA1) { /* NXP Semiconductor/Philips */ 1460 if (chip_id == 0x00 1461 && (config1 & 0x2A) == 0x00 1462 && (config2 & 0xFE) == 0x00 1463 && convrate <= 0x09) { 1464 name = "sa56004"; 1465 } 1466 } else 1467 if ((address == 0x4C || address == 0x4D) 1468 && man_id == 0x47) { /* GMT */ 1469 if (chip_id == 0x01 /* G781 */ 1470 && (config1 & 0x3F) == 0x00 1471 && convrate <= 0x08) 1472 name = "g781"; 1473 } else 1474 if (address == 0x4C 1475 && man_id == 0x55) { /* Texas Instruments */ 1476 int local_ext; 1477 1478 local_ext = i2c_smbus_read_byte_data(client, 1479 TMP451_REG_R_LOCAL_TEMPL); 1480 1481 if (chip_id == 0x00 /* TMP451 */ 1482 && (config1 & 0x1B) == 0x00 1483 && convrate <= 0x09 1484 && (local_ext & 0x0F) == 0x00) 1485 name = "tmp451"; 1486 } 1487 1488 if (!name) { /* identification failed */ 1489 dev_dbg(&adapter->dev, 1490 "Unsupported chip at 0x%02x (man_id=0x%02X, " 1491 "chip_id=0x%02X)\n", address, man_id, chip_id); 1492 return -ENODEV; 1493 } 1494 1495 strlcpy(info->type, name, I2C_NAME_SIZE); 1496 1497 return 0; 1498 } 1499 1500 static void lm90_restore_conf(void *_data) 1501 { 1502 struct lm90_data *data = _data; 1503 struct i2c_client *client = data->client; 1504 1505 /* Restore initial configuration */ 1506 i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE, 1507 data->convrate_orig); 1508 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, 1509 data->config_orig); 1510 } 1511 1512 static int lm90_init_client(struct i2c_client *client, struct lm90_data *data) 1513 { 1514 int config, convrate; 1515 1516 convrate = lm90_read_reg(client, LM90_REG_R_CONVRATE); 1517 if (convrate < 0) 1518 return convrate; 1519 data->convrate_orig = convrate; 1520 1521 /* 1522 * Start the conversions. 1523 */ 1524 lm90_set_convrate(client, data, 500); /* 500ms; 2Hz conversion rate */ 1525 config = lm90_read_reg(client, LM90_REG_R_CONFIG1); 1526 if (config < 0) 1527 return config; 1528 data->config_orig = config; 1529 1530 /* Check Temperature Range Select */ 1531 if (data->kind == adt7461 || data->kind == tmp451) { 1532 if (config & 0x04) 1533 data->flags |= LM90_FLAG_ADT7461_EXT; 1534 } 1535 1536 /* 1537 * Put MAX6680/MAX8881 into extended resolution (bit 0x10, 1538 * 0.125 degree resolution) and range (0x08, extend range 1539 * to -64 degree) mode for the remote temperature sensor. 1540 */ 1541 if (data->kind == max6680) 1542 config |= 0x18; 1543 1544 /* 1545 * Select external channel 0 for max6695/96 1546 */ 1547 if (data->kind == max6696) 1548 config &= ~0x08; 1549 1550 config &= 0xBF; /* run */ 1551 if (config != data->config_orig) /* Only write if changed */ 1552 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config); 1553 1554 return devm_add_action_or_reset(&client->dev, lm90_restore_conf, data); 1555 } 1556 1557 static bool lm90_is_tripped(struct i2c_client *client, u16 *status) 1558 { 1559 struct lm90_data *data = i2c_get_clientdata(client); 1560 int st, st2 = 0; 1561 1562 st = lm90_read_reg(client, LM90_REG_R_STATUS); 1563 if (st < 0) 1564 return false; 1565 1566 if (data->kind == max6696) { 1567 st2 = lm90_read_reg(client, MAX6696_REG_R_STATUS2); 1568 if (st2 < 0) 1569 return false; 1570 } 1571 1572 *status = st | (st2 << 8); 1573 1574 if ((st & 0x7f) == 0 && (st2 & 0xfe) == 0) 1575 return false; 1576 1577 if ((st & (LM90_STATUS_LLOW | LM90_STATUS_LHIGH | LM90_STATUS_LTHRM)) || 1578 (st2 & MAX6696_STATUS2_LOT2)) 1579 dev_warn(&client->dev, 1580 "temp%d out of range, please check!\n", 1); 1581 if ((st & (LM90_STATUS_RLOW | LM90_STATUS_RHIGH | LM90_STATUS_RTHRM)) || 1582 (st2 & MAX6696_STATUS2_ROT2)) 1583 dev_warn(&client->dev, 1584 "temp%d out of range, please check!\n", 2); 1585 if (st & LM90_STATUS_ROPEN) 1586 dev_warn(&client->dev, 1587 "temp%d diode open, please check!\n", 2); 1588 if (st2 & (MAX6696_STATUS2_R2LOW | MAX6696_STATUS2_R2HIGH | 1589 MAX6696_STATUS2_R2THRM | MAX6696_STATUS2_R2OT2)) 1590 dev_warn(&client->dev, 1591 "temp%d out of range, please check!\n", 3); 1592 if (st2 & MAX6696_STATUS2_R2OPEN) 1593 dev_warn(&client->dev, 1594 "temp%d diode open, please check!\n", 3); 1595 1596 return true; 1597 } 1598 1599 static irqreturn_t lm90_irq_thread(int irq, void *dev_id) 1600 { 1601 struct i2c_client *client = dev_id; 1602 u16 status; 1603 1604 if (lm90_is_tripped(client, &status)) 1605 return IRQ_HANDLED; 1606 else 1607 return IRQ_NONE; 1608 } 1609 1610 static void lm90_remove_pec(void *dev) 1611 { 1612 device_remove_file(dev, &dev_attr_pec); 1613 } 1614 1615 static void lm90_regulator_disable(void *regulator) 1616 { 1617 regulator_disable(regulator); 1618 } 1619 1620 static int lm90_probe(struct i2c_client *client, 1621 const struct i2c_device_id *id) 1622 { 1623 struct device *dev = &client->dev; 1624 struct i2c_adapter *adapter = to_i2c_adapter(dev->parent); 1625 struct lm90_data *data; 1626 struct regulator *regulator; 1627 struct device *hwmon_dev; 1628 int groups = 0; 1629 int err; 1630 1631 regulator = devm_regulator_get(dev, "vcc"); 1632 if (IS_ERR(regulator)) 1633 return PTR_ERR(regulator); 1634 1635 err = regulator_enable(regulator); 1636 if (err < 0) { 1637 dev_err(dev, "Failed to enable regulator: %d\n", err); 1638 return err; 1639 } 1640 1641 err = devm_add_action_or_reset(dev, lm90_regulator_disable, regulator); 1642 if (err) 1643 return err; 1644 1645 data = devm_kzalloc(dev, sizeof(struct lm90_data), GFP_KERNEL); 1646 if (!data) 1647 return -ENOMEM; 1648 1649 data->client = client; 1650 i2c_set_clientdata(client, data); 1651 mutex_init(&data->update_lock); 1652 1653 /* Set the device type */ 1654 data->kind = id->driver_data; 1655 if (data->kind == adm1032) { 1656 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE)) 1657 client->flags &= ~I2C_CLIENT_PEC; 1658 } 1659 1660 /* 1661 * Different devices have different alarm bits triggering the 1662 * ALERT# output 1663 */ 1664 data->alert_alarms = lm90_params[data->kind].alert_alarms; 1665 1666 /* Set chip capabilities */ 1667 data->flags = lm90_params[data->kind].flags; 1668 data->reg_local_ext = lm90_params[data->kind].reg_local_ext; 1669 1670 /* Set maximum conversion rate */ 1671 data->max_convrate = lm90_params[data->kind].max_convrate; 1672 1673 /* Initialize the LM90 chip */ 1674 err = lm90_init_client(client, data); 1675 if (err < 0) { 1676 dev_err(dev, "Failed to initialize device\n"); 1677 return err; 1678 } 1679 1680 /* Register sysfs hooks */ 1681 data->groups[groups++] = &lm90_group; 1682 1683 if (data->flags & LM90_HAVE_OFFSET) 1684 data->groups[groups++] = &lm90_temp2_offset_group; 1685 1686 if (data->flags & LM90_HAVE_EMERGENCY) 1687 data->groups[groups++] = &lm90_emergency_group; 1688 1689 if (data->flags & LM90_HAVE_EMERGENCY_ALARM) 1690 data->groups[groups++] = &lm90_emergency_alarm_group; 1691 1692 if (data->flags & LM90_HAVE_TEMP3) 1693 data->groups[groups++] = &lm90_temp3_group; 1694 1695 if (client->flags & I2C_CLIENT_PEC) { 1696 err = device_create_file(dev, &dev_attr_pec); 1697 if (err) 1698 return err; 1699 err = devm_add_action_or_reset(dev, lm90_remove_pec, dev); 1700 if (err) 1701 return err; 1702 } 1703 1704 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 1705 data, data->groups); 1706 if (IS_ERR(hwmon_dev)) 1707 return PTR_ERR(hwmon_dev); 1708 1709 if (client->irq) { 1710 dev_dbg(dev, "IRQ: %d\n", client->irq); 1711 err = devm_request_threaded_irq(dev, client->irq, 1712 NULL, lm90_irq_thread, 1713 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 1714 "lm90", client); 1715 if (err < 0) { 1716 dev_err(dev, "cannot request IRQ %d\n", client->irq); 1717 return err; 1718 } 1719 } 1720 1721 return 0; 1722 } 1723 1724 static void lm90_alert(struct i2c_client *client, enum i2c_alert_protocol type, 1725 unsigned int flag) 1726 { 1727 u16 alarms; 1728 1729 if (type != I2C_PROTOCOL_SMBUS_ALERT) 1730 return; 1731 1732 if (lm90_is_tripped(client, &alarms)) { 1733 /* 1734 * Disable ALERT# output, because these chips don't implement 1735 * SMBus alert correctly; they should only hold the alert line 1736 * low briefly. 1737 */ 1738 struct lm90_data *data = i2c_get_clientdata(client); 1739 1740 if ((data->flags & LM90_HAVE_BROKEN_ALERT) && 1741 (alarms & data->alert_alarms)) { 1742 int config; 1743 1744 dev_dbg(&client->dev, "Disabling ALERT#\n"); 1745 config = lm90_read_reg(client, LM90_REG_R_CONFIG1); 1746 if (config >= 0) 1747 i2c_smbus_write_byte_data(client, 1748 LM90_REG_W_CONFIG1, 1749 config | 0x80); 1750 } 1751 } else { 1752 dev_info(&client->dev, "Everything OK\n"); 1753 } 1754 } 1755 1756 static struct i2c_driver lm90_driver = { 1757 .class = I2C_CLASS_HWMON, 1758 .driver = { 1759 .name = "lm90", 1760 }, 1761 .probe = lm90_probe, 1762 .alert = lm90_alert, 1763 .id_table = lm90_id, 1764 .detect = lm90_detect, 1765 .address_list = normal_i2c, 1766 }; 1767 1768 module_i2c_driver(lm90_driver); 1769 1770 MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>"); 1771 MODULE_DESCRIPTION("LM90/ADM1032 driver"); 1772 MODULE_LICENSE("GPL"); 1773