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