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