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