1 /* 2 * lm75.c - Part of lm_sensors, Linux kernel modules for hardware 3 * monitoring 4 * Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 21 #include <linux/module.h> 22 #include <linux/init.h> 23 #include <linux/slab.h> 24 #include <linux/jiffies.h> 25 #include <linux/i2c.h> 26 #include <linux/hwmon.h> 27 #include <linux/hwmon-sysfs.h> 28 #include <linux/err.h> 29 #include <linux/mutex.h> 30 #include <linux/of.h> 31 #include <linux/thermal.h> 32 #include "lm75.h" 33 34 35 /* 36 * This driver handles the LM75 and compatible digital temperature sensors. 37 */ 38 39 enum lm75_type { /* keep sorted in alphabetical order */ 40 adt75, 41 ds1775, 42 ds75, 43 ds7505, 44 g751, 45 lm75, 46 lm75a, 47 lm75b, 48 max6625, 49 max6626, 50 mcp980x, 51 stds75, 52 tcn75, 53 tmp100, 54 tmp101, 55 tmp105, 56 tmp112, 57 tmp175, 58 tmp275, 59 tmp75, 60 tmp75c, 61 }; 62 63 /* Addresses scanned */ 64 static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c, 65 0x4d, 0x4e, 0x4f, I2C_CLIENT_END }; 66 67 68 /* The LM75 registers */ 69 #define LM75_REG_CONF 0x01 70 static const u8 LM75_REG_TEMP[3] = { 71 0x00, /* input */ 72 0x03, /* max */ 73 0x02, /* hyst */ 74 }; 75 76 /* Each client has this additional data */ 77 struct lm75_data { 78 struct i2c_client *client; 79 struct device *hwmon_dev; 80 struct thermal_zone_device *tz; 81 struct mutex update_lock; 82 u8 orig_conf; 83 u8 resolution; /* In bits, between 9 and 12 */ 84 u8 resolution_limits; 85 char valid; /* !=0 if registers are valid */ 86 unsigned long last_updated; /* In jiffies */ 87 unsigned long sample_time; /* In jiffies */ 88 s16 temp[3]; /* Register values, 89 0 = input 90 1 = max 91 2 = hyst */ 92 }; 93 94 static int lm75_read_value(struct i2c_client *client, u8 reg); 95 static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value); 96 static struct lm75_data *lm75_update_device(struct device *dev); 97 98 99 /*-----------------------------------------------------------------------*/ 100 101 static inline long lm75_reg_to_mc(s16 temp, u8 resolution) 102 { 103 return ((temp >> (16 - resolution)) * 1000) >> (resolution - 8); 104 } 105 106 /* sysfs attributes for hwmon */ 107 108 static int lm75_read_temp(void *dev, int *temp) 109 { 110 struct lm75_data *data = lm75_update_device(dev); 111 112 if (IS_ERR(data)) 113 return PTR_ERR(data); 114 115 *temp = lm75_reg_to_mc(data->temp[0], data->resolution); 116 117 return 0; 118 } 119 120 static ssize_t show_temp(struct device *dev, struct device_attribute *da, 121 char *buf) 122 { 123 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 124 struct lm75_data *data = lm75_update_device(dev); 125 126 if (IS_ERR(data)) 127 return PTR_ERR(data); 128 129 return sprintf(buf, "%ld\n", lm75_reg_to_mc(data->temp[attr->index], 130 data->resolution)); 131 } 132 133 static ssize_t set_temp(struct device *dev, struct device_attribute *da, 134 const char *buf, size_t count) 135 { 136 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 137 struct lm75_data *data = dev_get_drvdata(dev); 138 struct i2c_client *client = data->client; 139 int nr = attr->index; 140 long temp; 141 int error; 142 u8 resolution; 143 144 error = kstrtol(buf, 10, &temp); 145 if (error) 146 return error; 147 148 /* 149 * Resolution of limit registers is assumed to be the same as the 150 * temperature input register resolution unless given explicitly. 151 */ 152 if (attr->index && data->resolution_limits) 153 resolution = data->resolution_limits; 154 else 155 resolution = data->resolution; 156 157 mutex_lock(&data->update_lock); 158 temp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX); 159 data->temp[nr] = DIV_ROUND_CLOSEST(temp << (resolution - 8), 160 1000) << (16 - resolution); 161 lm75_write_value(client, LM75_REG_TEMP[nr], data->temp[nr]); 162 mutex_unlock(&data->update_lock); 163 return count; 164 } 165 166 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, 167 show_temp, set_temp, 1); 168 static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO, 169 show_temp, set_temp, 2); 170 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0); 171 172 static struct attribute *lm75_attrs[] = { 173 &sensor_dev_attr_temp1_input.dev_attr.attr, 174 &sensor_dev_attr_temp1_max.dev_attr.attr, 175 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 176 177 NULL 178 }; 179 ATTRIBUTE_GROUPS(lm75); 180 181 static const struct thermal_zone_of_device_ops lm75_of_thermal_ops = { 182 .get_temp = lm75_read_temp, 183 }; 184 185 /*-----------------------------------------------------------------------*/ 186 187 /* device probe and removal */ 188 189 static int 190 lm75_probe(struct i2c_client *client, const struct i2c_device_id *id) 191 { 192 struct device *dev = &client->dev; 193 struct lm75_data *data; 194 int status; 195 u8 set_mask, clr_mask; 196 int new; 197 enum lm75_type kind = id->driver_data; 198 199 if (!i2c_check_functionality(client->adapter, 200 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA)) 201 return -EIO; 202 203 data = devm_kzalloc(dev, sizeof(struct lm75_data), GFP_KERNEL); 204 if (!data) 205 return -ENOMEM; 206 207 data->client = client; 208 i2c_set_clientdata(client, data); 209 mutex_init(&data->update_lock); 210 211 /* Set to LM75 resolution (9 bits, 1/2 degree C) and range. 212 * Then tweak to be more precise when appropriate. 213 */ 214 set_mask = 0; 215 clr_mask = LM75_SHUTDOWN; /* continuous conversions */ 216 217 switch (kind) { 218 case adt75: 219 clr_mask |= 1 << 5; /* not one-shot mode */ 220 data->resolution = 12; 221 data->sample_time = HZ / 8; 222 break; 223 case ds1775: 224 case ds75: 225 case stds75: 226 clr_mask |= 3 << 5; 227 set_mask |= 2 << 5; /* 11-bit mode */ 228 data->resolution = 11; 229 data->sample_time = HZ; 230 break; 231 case ds7505: 232 set_mask |= 3 << 5; /* 12-bit mode */ 233 data->resolution = 12; 234 data->sample_time = HZ / 4; 235 break; 236 case g751: 237 case lm75: 238 case lm75a: 239 data->resolution = 9; 240 data->sample_time = HZ / 2; 241 break; 242 case lm75b: 243 data->resolution = 11; 244 data->sample_time = HZ / 4; 245 break; 246 case max6625: 247 data->resolution = 9; 248 data->sample_time = HZ / 4; 249 break; 250 case max6626: 251 data->resolution = 12; 252 data->resolution_limits = 9; 253 data->sample_time = HZ / 4; 254 break; 255 case tcn75: 256 data->resolution = 9; 257 data->sample_time = HZ / 8; 258 break; 259 case mcp980x: 260 data->resolution_limits = 9; 261 /* fall through */ 262 case tmp100: 263 case tmp101: 264 set_mask |= 3 << 5; /* 12-bit mode */ 265 data->resolution = 12; 266 data->sample_time = HZ; 267 clr_mask |= 1 << 7; /* not one-shot mode */ 268 break; 269 case tmp112: 270 set_mask |= 3 << 5; /* 12-bit mode */ 271 clr_mask |= 1 << 7; /* not one-shot mode */ 272 data->resolution = 12; 273 data->sample_time = HZ / 4; 274 break; 275 case tmp105: 276 case tmp175: 277 case tmp275: 278 case tmp75: 279 set_mask |= 3 << 5; /* 12-bit mode */ 280 clr_mask |= 1 << 7; /* not one-shot mode */ 281 data->resolution = 12; 282 data->sample_time = HZ / 2; 283 break; 284 case tmp75c: 285 clr_mask |= 1 << 5; /* not one-shot mode */ 286 data->resolution = 12; 287 data->sample_time = HZ / 4; 288 break; 289 } 290 291 /* configure as specified */ 292 status = lm75_read_value(client, LM75_REG_CONF); 293 if (status < 0) { 294 dev_dbg(dev, "Can't read config? %d\n", status); 295 return status; 296 } 297 data->orig_conf = status; 298 new = status & ~clr_mask; 299 new |= set_mask; 300 if (status != new) 301 lm75_write_value(client, LM75_REG_CONF, new); 302 dev_dbg(dev, "Config %02x\n", new); 303 304 data->hwmon_dev = hwmon_device_register_with_groups(dev, client->name, 305 data, lm75_groups); 306 if (IS_ERR(data->hwmon_dev)) 307 return PTR_ERR(data->hwmon_dev); 308 309 data->tz = thermal_zone_of_sensor_register(data->hwmon_dev, 0, 310 data->hwmon_dev, 311 &lm75_of_thermal_ops); 312 if (IS_ERR(data->tz)) 313 data->tz = NULL; 314 315 dev_info(dev, "%s: sensor '%s'\n", 316 dev_name(data->hwmon_dev), client->name); 317 318 return 0; 319 } 320 321 static int lm75_remove(struct i2c_client *client) 322 { 323 struct lm75_data *data = i2c_get_clientdata(client); 324 325 thermal_zone_of_sensor_unregister(data->hwmon_dev, data->tz); 326 hwmon_device_unregister(data->hwmon_dev); 327 lm75_write_value(client, LM75_REG_CONF, data->orig_conf); 328 return 0; 329 } 330 331 static const struct i2c_device_id lm75_ids[] = { 332 { "adt75", adt75, }, 333 { "ds1775", ds1775, }, 334 { "ds75", ds75, }, 335 { "ds7505", ds7505, }, 336 { "g751", g751, }, 337 { "lm75", lm75, }, 338 { "lm75a", lm75a, }, 339 { "lm75b", lm75b, }, 340 { "max6625", max6625, }, 341 { "max6626", max6626, }, 342 { "mcp980x", mcp980x, }, 343 { "stds75", stds75, }, 344 { "tcn75", tcn75, }, 345 { "tmp100", tmp100, }, 346 { "tmp101", tmp101, }, 347 { "tmp105", tmp105, }, 348 { "tmp112", tmp112, }, 349 { "tmp175", tmp175, }, 350 { "tmp275", tmp275, }, 351 { "tmp75", tmp75, }, 352 { "tmp75c", tmp75c, }, 353 { /* LIST END */ } 354 }; 355 MODULE_DEVICE_TABLE(i2c, lm75_ids); 356 357 #define LM75A_ID 0xA1 358 359 /* Return 0 if detection is successful, -ENODEV otherwise */ 360 static int lm75_detect(struct i2c_client *new_client, 361 struct i2c_board_info *info) 362 { 363 struct i2c_adapter *adapter = new_client->adapter; 364 int i; 365 int conf, hyst, os; 366 bool is_lm75a = 0; 367 368 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | 369 I2C_FUNC_SMBUS_WORD_DATA)) 370 return -ENODEV; 371 372 /* 373 * Now, we do the remaining detection. There is no identification- 374 * dedicated register so we have to rely on several tricks: 375 * unused bits, registers cycling over 8-address boundaries, 376 * addresses 0x04-0x07 returning the last read value. 377 * The cycling+unused addresses combination is not tested, 378 * since it would significantly slow the detection down and would 379 * hardly add any value. 380 * 381 * The National Semiconductor LM75A is different than earlier 382 * LM75s. It has an ID byte of 0xaX (where X is the chip 383 * revision, with 1 being the only revision in existence) in 384 * register 7, and unused registers return 0xff rather than the 385 * last read value. 386 * 387 * Note that this function only detects the original National 388 * Semiconductor LM75 and the LM75A. Clones from other vendors 389 * aren't detected, on purpose, because they are typically never 390 * found on PC hardware. They are found on embedded designs where 391 * they can be instantiated explicitly so detection is not needed. 392 * The absence of identification registers on all these clones 393 * would make their exhaustive detection very difficult and weak, 394 * and odds are that the driver would bind to unsupported devices. 395 */ 396 397 /* Unused bits */ 398 conf = i2c_smbus_read_byte_data(new_client, 1); 399 if (conf & 0xe0) 400 return -ENODEV; 401 402 /* First check for LM75A */ 403 if (i2c_smbus_read_byte_data(new_client, 7) == LM75A_ID) { 404 /* LM75A returns 0xff on unused registers so 405 just to be sure we check for that too. */ 406 if (i2c_smbus_read_byte_data(new_client, 4) != 0xff 407 || i2c_smbus_read_byte_data(new_client, 5) != 0xff 408 || i2c_smbus_read_byte_data(new_client, 6) != 0xff) 409 return -ENODEV; 410 is_lm75a = 1; 411 hyst = i2c_smbus_read_byte_data(new_client, 2); 412 os = i2c_smbus_read_byte_data(new_client, 3); 413 } else { /* Traditional style LM75 detection */ 414 /* Unused addresses */ 415 hyst = i2c_smbus_read_byte_data(new_client, 2); 416 if (i2c_smbus_read_byte_data(new_client, 4) != hyst 417 || i2c_smbus_read_byte_data(new_client, 5) != hyst 418 || i2c_smbus_read_byte_data(new_client, 6) != hyst 419 || i2c_smbus_read_byte_data(new_client, 7) != hyst) 420 return -ENODEV; 421 os = i2c_smbus_read_byte_data(new_client, 3); 422 if (i2c_smbus_read_byte_data(new_client, 4) != os 423 || i2c_smbus_read_byte_data(new_client, 5) != os 424 || i2c_smbus_read_byte_data(new_client, 6) != os 425 || i2c_smbus_read_byte_data(new_client, 7) != os) 426 return -ENODEV; 427 } 428 /* 429 * It is very unlikely that this is a LM75 if both 430 * hysteresis and temperature limit registers are 0. 431 */ 432 if (hyst == 0 && os == 0) 433 return -ENODEV; 434 435 /* Addresses cycling */ 436 for (i = 8; i <= 248; i += 40) { 437 if (i2c_smbus_read_byte_data(new_client, i + 1) != conf 438 || i2c_smbus_read_byte_data(new_client, i + 2) != hyst 439 || i2c_smbus_read_byte_data(new_client, i + 3) != os) 440 return -ENODEV; 441 if (is_lm75a && i2c_smbus_read_byte_data(new_client, i + 7) 442 != LM75A_ID) 443 return -ENODEV; 444 } 445 446 strlcpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE); 447 448 return 0; 449 } 450 451 #ifdef CONFIG_PM 452 static int lm75_suspend(struct device *dev) 453 { 454 int status; 455 struct i2c_client *client = to_i2c_client(dev); 456 status = lm75_read_value(client, LM75_REG_CONF); 457 if (status < 0) { 458 dev_dbg(&client->dev, "Can't read config? %d\n", status); 459 return status; 460 } 461 status = status | LM75_SHUTDOWN; 462 lm75_write_value(client, LM75_REG_CONF, status); 463 return 0; 464 } 465 466 static int lm75_resume(struct device *dev) 467 { 468 int status; 469 struct i2c_client *client = to_i2c_client(dev); 470 status = lm75_read_value(client, LM75_REG_CONF); 471 if (status < 0) { 472 dev_dbg(&client->dev, "Can't read config? %d\n", status); 473 return status; 474 } 475 status = status & ~LM75_SHUTDOWN; 476 lm75_write_value(client, LM75_REG_CONF, status); 477 return 0; 478 } 479 480 static const struct dev_pm_ops lm75_dev_pm_ops = { 481 .suspend = lm75_suspend, 482 .resume = lm75_resume, 483 }; 484 #define LM75_DEV_PM_OPS (&lm75_dev_pm_ops) 485 #else 486 #define LM75_DEV_PM_OPS NULL 487 #endif /* CONFIG_PM */ 488 489 static struct i2c_driver lm75_driver = { 490 .class = I2C_CLASS_HWMON, 491 .driver = { 492 .name = "lm75", 493 .pm = LM75_DEV_PM_OPS, 494 }, 495 .probe = lm75_probe, 496 .remove = lm75_remove, 497 .id_table = lm75_ids, 498 .detect = lm75_detect, 499 .address_list = normal_i2c, 500 }; 501 502 /*-----------------------------------------------------------------------*/ 503 504 /* register access */ 505 506 /* 507 * All registers are word-sized, except for the configuration register. 508 * LM75 uses a high-byte first convention, which is exactly opposite to 509 * the SMBus standard. 510 */ 511 static int lm75_read_value(struct i2c_client *client, u8 reg) 512 { 513 if (reg == LM75_REG_CONF) 514 return i2c_smbus_read_byte_data(client, reg); 515 else 516 return i2c_smbus_read_word_swapped(client, reg); 517 } 518 519 static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value) 520 { 521 if (reg == LM75_REG_CONF) 522 return i2c_smbus_write_byte_data(client, reg, value); 523 else 524 return i2c_smbus_write_word_swapped(client, reg, value); 525 } 526 527 static struct lm75_data *lm75_update_device(struct device *dev) 528 { 529 struct lm75_data *data = dev_get_drvdata(dev); 530 struct i2c_client *client = data->client; 531 struct lm75_data *ret = data; 532 533 mutex_lock(&data->update_lock); 534 535 if (time_after(jiffies, data->last_updated + data->sample_time) 536 || !data->valid) { 537 int i; 538 dev_dbg(&client->dev, "Starting lm75 update\n"); 539 540 for (i = 0; i < ARRAY_SIZE(data->temp); i++) { 541 int status; 542 543 status = lm75_read_value(client, LM75_REG_TEMP[i]); 544 if (unlikely(status < 0)) { 545 dev_dbg(dev, 546 "LM75: Failed to read value: reg %d, error %d\n", 547 LM75_REG_TEMP[i], status); 548 ret = ERR_PTR(status); 549 data->valid = 0; 550 goto abort; 551 } 552 data->temp[i] = status; 553 } 554 data->last_updated = jiffies; 555 data->valid = 1; 556 } 557 558 abort: 559 mutex_unlock(&data->update_lock); 560 return ret; 561 } 562 563 module_i2c_driver(lm75_driver); 564 565 MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>"); 566 MODULE_DESCRIPTION("LM75 driver"); 567 MODULE_LICENSE("GPL"); 568