]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - drivers/hwmon/lm75.c
Merge tag 'staging-3.10-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[mirror_ubuntu-artful-kernel.git] / drivers / hwmon / lm75.c
CommitLineData
1da177e4 1/*
caaa0f36
S
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 */
1da177e4 20
1da177e4
LT
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>
943b0830 26#include <linux/hwmon.h>
9ca8e40c 27#include <linux/hwmon-sysfs.h>
943b0830 28#include <linux/err.h>
9a61bf63 29#include <linux/mutex.h>
1da177e4
LT
30#include "lm75.h"
31
32
01a52397
DB
33/*
34 * This driver handles the LM75 and compatible digital temperature sensors.
01a52397
DB
35 */
36
9ebd3d82 37enum lm75_type { /* keep sorted in alphabetical order */
e96f9d89 38 adt75,
1f86df49 39 ds1775,
9ebd3d82 40 ds75,
3fbc81e3 41 ds7505,
1f86df49 42 lm75,
9ebd3d82
DB
43 lm75a,
44 max6625,
45 max6626,
46 mcp980x,
47 stds75,
48 tcn75,
49 tmp100,
50 tmp101,
6d034059 51 tmp105,
9ebd3d82
DB
52 tmp175,
53 tmp275,
54 tmp75,
55};
56
8ff69eeb 57/* Addresses scanned */
25e9c86d 58static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
1da177e4 59 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
1da177e4 60
1da177e4
LT
61
62/* The LM75 registers */
1da177e4 63#define LM75_REG_CONF 0x01
9ca8e40c
JD
64static const u8 LM75_REG_TEMP[3] = {
65 0x00, /* input */
66 0x03, /* max */
67 0x02, /* hyst */
68};
1da177e4
LT
69
70/* Each client has this additional data */
71struct lm75_data {
01a52397 72 struct device *hwmon_dev;
9a61bf63 73 struct mutex update_lock;
9ebd3d82 74 u8 orig_conf;
87d0621a
JD
75 u8 resolution; /* In bits, between 9 and 12 */
76 u8 resolution_limits;
01a52397 77 char valid; /* !=0 if registers are valid */
1da177e4 78 unsigned long last_updated; /* In jiffies */
87d0621a
JD
79 unsigned long sample_time; /* In jiffies */
80 s16 temp[3]; /* Register values,
9ca8e40c
JD
81 0 = input
82 1 = max
83 2 = hyst */
1da177e4
LT
84};
85
1da177e4
LT
86static int lm75_read_value(struct i2c_client *client, u8 reg);
87static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value);
88static struct lm75_data *lm75_update_device(struct device *dev);
89
90
01a52397
DB
91/*-----------------------------------------------------------------------*/
92
93/* sysfs attributes for hwmon */
1da177e4 94
9ca8e40c
JD
95static 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);
87d0621a 100 long temp;
1f962f36
FM
101
102 if (IS_ERR(data))
103 return PTR_ERR(data);
104
87d0621a
JD
105 temp = ((data->temp[attr->index] >> (16 - data->resolution)) * 1000)
106 >> (data->resolution - 8);
107
108 return sprintf(buf, "%ld\n", temp);
1da177e4 109}
9ca8e40c
JD
110
111static 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;
e3cd9528
S
118 long temp;
119 int error;
87d0621a 120 u8 resolution;
e3cd9528 121
24edc0a7 122 error = kstrtol(buf, 10, &temp);
e3cd9528
S
123 if (error)
124 return error;
9ca8e40c 125
87d0621a
JD
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
9ca8e40c 135 mutex_lock(&data->update_lock);
87d0621a
JD
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);
9ca8e40c
JD
139 lm75_write_value(client, LM75_REG_TEMP[nr], data->temp[nr]);
140 mutex_unlock(&data->update_lock);
141 return count;
1da177e4 142}
1da177e4 143
9ca8e40c
JD
144static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO,
145 show_temp, set_temp, 1);
146static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO,
147 show_temp, set_temp, 2);
148static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
1da177e4 149
c1685f61 150static struct attribute *lm75_attributes[] = {
9ca8e40c
JD
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,
c1685f61
MH
154
155 NULL
156};
157
158static const struct attribute_group lm75_group = {
159 .attrs = lm75_attributes,
160};
161
01a52397
DB
162/*-----------------------------------------------------------------------*/
163
8ff69eeb 164/* device probe and removal */
9ebd3d82
DB
165
166static int
167lm75_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;
0cd2c72d 173 enum lm75_type kind = id->driver_data;
9ebd3d82
DB
174
175 if (!i2c_check_functionality(client->adapter,
176 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
177 return -EIO;
178
13ac7a01 179 data = devm_kzalloc(&client->dev, sizeof(struct lm75_data), GFP_KERNEL);
9ebd3d82
DB
180 if (!data)
181 return -ENOMEM;
182
183 i2c_set_clientdata(client, data);
9ebd3d82
DB
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;
8a5c5cc6
JD
190 clr_mask = LM75_SHUTDOWN; /* continuous conversions */
191
0cd2c72d 192 switch (kind) {
8a5c5cc6
JD
193 case adt75:
194 clr_mask |= 1 << 5; /* not one-shot mode */
0cd2c72d
JD
195 data->resolution = 12;
196 data->sample_time = HZ / 8;
8a5c5cc6
JD
197 break;
198 case ds1775:
199 case ds75:
200 case stds75:
0cd2c72d
JD
201 clr_mask |= 3 << 5;
202 set_mask |= 2 << 5; /* 11-bit mode */
203 data->resolution = 11;
204 data->sample_time = HZ;
205 break;
3fbc81e3
JD
206 case ds7505:
207 set_mask |= 3 << 5; /* 12-bit mode */
208 data->resolution = 12;
209 data->sample_time = HZ / 4;
210 break;
0cd2c72d
JD
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;
8a5c5cc6
JD
228 break;
229 case mcp980x:
0cd2c72d
JD
230 data->resolution_limits = 9;
231 /* fall through */
8a5c5cc6
JD
232 case tmp100:
233 case tmp101:
0cd2c72d
JD
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;
8a5c5cc6
JD
239 case tmp105:
240 case tmp175:
241 case tmp275:
242 case tmp75:
0cd2c72d 243 set_mask |= 3 << 5; /* 12-bit mode */
8a5c5cc6 244 clr_mask |= 1 << 7; /* not one-shot mode */
0cd2c72d
JD
245 data->resolution = 12;
246 data->sample_time = HZ / 2;
8a5c5cc6
JD
247 break;
248 }
9ebd3d82
DB
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);
13ac7a01 254 return status;
9ebd3d82
DB
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)
13ac7a01 266 return status;
9ebd3d82
DB
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",
739cf3a2 275 dev_name(data->hwmon_dev), client->name);
9ebd3d82
DB
276
277 return 0;
278
279exit_remove:
280 sysfs_remove_group(&client->dev.kobj, &lm75_group);
9ebd3d82
DB
281 return status;
282}
283
284static 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);
9ebd3d82
DB
291 return 0;
292}
293
294static const struct i2c_device_id lm75_ids[] = {
e96f9d89 295 { "adt75", adt75, },
9ebd3d82
DB
296 { "ds1775", ds1775, },
297 { "ds75", ds75, },
3fbc81e3 298 { "ds7505", ds7505, },
9ebd3d82
DB
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, },
6d034059 308 { "tmp105", tmp105, },
9ebd3d82
DB
309 { "tmp175", tmp175, },
310 { "tmp275", tmp275, },
311 { "tmp75", tmp75, },
312 { /* LIST END */ }
313};
314MODULE_DEVICE_TABLE(i2c, lm75_ids);
315
05e82fe4
LS
316#define LM75A_ID 0xA1
317
8ff69eeb 318/* Return 0 if detection is successful, -ENODEV otherwise */
310ec792 319static int lm75_detect(struct i2c_client *new_client,
8ff69eeb 320 struct i2c_board_info *info)
1da177e4 321{
8ff69eeb 322 struct i2c_adapter *adapter = new_client->adapter;
1da177e4 323 int i;
e76f67b5 324 int conf, hyst, os;
05e82fe4 325 bool is_lm75a = 0;
1da177e4 326
1da177e4
LT
327 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
328 I2C_FUNC_SMBUS_WORD_DATA))
8ff69eeb 329 return -ENODEV;
1da177e4 330
426343ef
JD
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 */
1da177e4 355
e76f67b5 356 /* Unused bits */
52df6440 357 conf = i2c_smbus_read_byte_data(new_client, 1);
e76f67b5
JD
358 if (conf & 0xe0)
359 return -ENODEV;
05e82fe4
LS
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;
e76f67b5
JD
370 hyst = i2c_smbus_read_byte_data(new_client, 2);
371 os = i2c_smbus_read_byte_data(new_client, 3);
05e82fe4
LS
372 } else { /* Traditional style LM75 detection */
373 /* Unused addresses */
e76f67b5
JD
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)
05e82fe4 379 return -ENODEV;
e76f67b5
JD
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)
05e82fe4
LS
385 return -ENODEV;
386 }
1da177e4 387
52df6440 388 /* Addresses cycling */
e76f67b5 389 for (i = 8; i <= 248; i += 40) {
52df6440 390 if (i2c_smbus_read_byte_data(new_client, i + 1) != conf
e76f67b5
JD
391 || i2c_smbus_read_byte_data(new_client, i + 2) != hyst
392 || i2c_smbus_read_byte_data(new_client, i + 3) != os)
52df6440 393 return -ENODEV;
05e82fe4
LS
394 if (is_lm75a && i2c_smbus_read_byte_data(new_client, i + 7)
395 != LM75A_ID)
396 return -ENODEV;
1da177e4
LT
397 }
398
05e82fe4 399 strlcpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE);
c1685f61 400
1da177e4 401 return 0;
01a52397
DB
402}
403
9914518e
SD
404#ifdef CONFIG_PM
405static 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
419static 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
433static 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
8ff69eeb
JD
442static struct i2c_driver lm75_driver = {
443 .class = I2C_CLASS_HWMON,
01a52397 444 .driver = {
8ff69eeb 445 .name = "lm75",
9914518e 446 .pm = LM75_DEV_PM_OPS,
01a52397 447 },
8ff69eeb
JD
448 .probe = lm75_probe,
449 .remove = lm75_remove,
450 .id_table = lm75_ids,
451 .detect = lm75_detect,
c3813d6a 452 .address_list = normal_i2c,
01a52397
DB
453};
454
455/*-----------------------------------------------------------------------*/
456
457/* register access */
458
caaa0f36
S
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 */
1da177e4
LT
464static 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);
90f4102c
JD
468 else
469 return i2c_smbus_read_word_swapped(client, reg);
1da177e4
LT
470}
471
1da177e4
LT
472static 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
90f4102c 477 return i2c_smbus_write_word_swapped(client, reg, value);
1da177e4
LT
478}
479
1da177e4
LT
480static 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);
1f962f36 484 struct lm75_data *ret = data;
1da177e4 485
9a61bf63 486 mutex_lock(&data->update_lock);
1da177e4 487
87d0621a 488 if (time_after(jiffies, data->last_updated + data->sample_time)
1da177e4 489 || !data->valid) {
9ca8e40c 490 int i;
1da177e4
LT
491 dev_dbg(&client->dev, "Starting lm75 update\n");
492
bcccc3a2
DB
493 for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
494 int status;
495
496 status = lm75_read_value(client, LM75_REG_TEMP[i]);
1f962f36
FM
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;
bcccc3a2 506 }
1da177e4
LT
507 data->last_updated = jiffies;
508 data->valid = 1;
509 }
510
1f962f36 511abort:
9a61bf63 512 mutex_unlock(&data->update_lock);
1f962f36 513 return ret;
1da177e4
LT
514}
515
f0967eea 516module_i2c_driver(lm75_driver);
1da177e4
LT
517
518MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
519MODULE_DESCRIPTION("LM75 driver");
520MODULE_LICENSE("GPL");