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