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