]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/hwmon/lm75.c
x86/msr-index: Cleanup bit defines
[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>
e97a45f1 29#include <linux/of_device.h>
22e73183 30#include <linux/of.h>
e65365fe 31#include <linux/regmap.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 */
e65365fe 69#define LM75_REG_TEMP 0x00
1da177e4 70#define LM75_REG_CONF 0x01
e65365fe
GR
71#define LM75_REG_HYST 0x02
72#define LM75_REG_MAX 0x03
1da177e4
LT
73
74/* Each client has this additional data */
75struct lm75_data {
d663ec49 76 struct i2c_client *client;
e65365fe 77 struct regmap *regmap;
9ebd3d82 78 u8 orig_conf;
87d0621a
JD
79 u8 resolution; /* In bits, between 9 and 12 */
80 u8 resolution_limits;
e65365fe 81 unsigned int sample_time; /* In ms */
1da177e4
LT
82};
83
01a52397
DB
84/*-----------------------------------------------------------------------*/
85
22e73183
EV
86static inline long lm75_reg_to_mc(s16 temp, u8 resolution)
87{
88 return ((temp >> (16 - resolution)) * 1000) >> (resolution - 8);
89}
90
08b02433
GR
91static int lm75_read(struct device *dev, enum hwmon_sensor_types type,
92 u32 attr, int channel, long *val)
22e73183 93{
e65365fe 94 struct lm75_data *data = dev_get_drvdata(dev);
08b02433
GR
95 unsigned int regval;
96 int err, reg;
97
98 switch (type) {
99 case hwmon_chip:
100 switch (attr) {
101 case hwmon_chip_update_interval:
102 *val = data->sample_time;
103 break;;
104 default:
105 return -EINVAL;
106 }
107 break;
108 case hwmon_temp:
109 switch (attr) {
110 case hwmon_temp_input:
111 reg = LM75_REG_TEMP;
112 break;
113 case hwmon_temp_max:
114 reg = LM75_REG_MAX;
115 break;
116 case hwmon_temp_max_hyst:
117 reg = LM75_REG_HYST;
118 break;
119 default:
120 return -EINVAL;
121 }
122 err = regmap_read(data->regmap, reg, &regval);
123 if (err < 0)
124 return err;
125
126 *val = lm75_reg_to_mc(regval, data->resolution);
127 break;
128 default:
129 return -EINVAL;
130 }
22e73183
EV
131 return 0;
132}
133
08b02433
GR
134static int lm75_write(struct device *dev, enum hwmon_sensor_types type,
135 u32 attr, int channel, long temp)
9ca8e40c 136{
e65365fe 137 struct lm75_data *data = dev_get_drvdata(dev);
87d0621a 138 u8 resolution;
08b02433
GR
139 int reg;
140
141 if (type != hwmon_temp)
142 return -EINVAL;
e3cd9528 143
08b02433
GR
144 switch (attr) {
145 case hwmon_temp_max:
146 reg = LM75_REG_MAX;
147 break;
148 case hwmon_temp_max_hyst:
149 reg = LM75_REG_HYST;
150 break;
151 default:
152 return -EINVAL;
153 }
9ca8e40c 154
87d0621a
JD
155 /*
156 * Resolution of limit registers is assumed to be the same as the
157 * temperature input register resolution unless given explicitly.
158 */
08b02433 159 if (data->resolution_limits)
87d0621a
JD
160 resolution = data->resolution_limits;
161 else
162 resolution = data->resolution;
163
87d0621a 164 temp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX);
e65365fe
GR
165 temp = DIV_ROUND_CLOSEST(temp << (resolution - 8),
166 1000) << (16 - resolution);
e65365fe 167
08b02433 168 return regmap_write(data->regmap, reg, temp);
1da177e4 169}
1da177e4 170
08b02433
GR
171static umode_t lm75_is_visible(const void *data, enum hwmon_sensor_types type,
172 u32 attr, int channel)
5f7e5e29 173{
08b02433
GR
174 switch (type) {
175 case hwmon_chip:
176 switch (attr) {
177 case hwmon_chip_update_interval:
178 return S_IRUGO;
179 }
180 break;
181 case hwmon_temp:
182 switch (attr) {
183 case hwmon_temp_input:
184 return S_IRUGO;
185 case hwmon_temp_max:
186 case hwmon_temp_max_hyst:
187 return S_IRUGO | S_IWUSR;
188 }
189 break;
190 default:
191 break;
192 }
193 return 0;
5f7e5e29
GR
194}
195
08b02433 196/*-----------------------------------------------------------------------*/
1da177e4 197
08b02433 198/* device probe and removal */
c1685f61 199
08b02433
GR
200/* chip configuration */
201
202static const u32 lm75_chip_config[] = {
203 HWMON_C_REGISTER_TZ | HWMON_C_UPDATE_INTERVAL,
204 0
c1685f61 205};
c1685f61 206
08b02433
GR
207static const struct hwmon_channel_info lm75_chip = {
208 .type = hwmon_chip,
209 .config = lm75_chip_config,
2251aef6
EV
210};
211
08b02433
GR
212static const u32 lm75_temp_config[] = {
213 HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST,
214 0
215};
01a52397 216
08b02433
GR
217static const struct hwmon_channel_info lm75_temp = {
218 .type = hwmon_temp,
219 .config = lm75_temp_config,
220};
221
222static const struct hwmon_channel_info *lm75_info[] = {
223 &lm75_chip,
224 &lm75_temp,
225 NULL
226};
227
228static const struct hwmon_ops lm75_hwmon_ops = {
229 .is_visible = lm75_is_visible,
230 .read = lm75_read,
231 .write = lm75_write,
232};
233
234static const struct hwmon_chip_info lm75_chip_info = {
235 .ops = &lm75_hwmon_ops,
236 .info = lm75_info,
237};
9ebd3d82 238
e65365fe
GR
239static bool lm75_is_writeable_reg(struct device *dev, unsigned int reg)
240{
241 return reg != LM75_REG_TEMP;
242}
243
244static bool lm75_is_volatile_reg(struct device *dev, unsigned int reg)
245{
246 return reg == LM75_REG_TEMP;
247}
248
249static const struct regmap_config lm75_regmap_config = {
250 .reg_bits = 8,
251 .val_bits = 16,
252 .max_register = LM75_REG_MAX,
253 .writeable_reg = lm75_is_writeable_reg,
254 .volatile_reg = lm75_is_volatile_reg,
255 .val_format_endian = REGMAP_ENDIAN_BIG,
256 .cache_type = REGCACHE_RBTREE,
257 .use_single_rw = true,
258};
259
9e37d3e2
GR
260static void lm75_remove(void *data)
261{
262 struct lm75_data *lm75 = data;
263 struct i2c_client *client = lm75->client;
264
265 i2c_smbus_write_byte_data(client, LM75_REG_CONF, lm75->orig_conf);
266}
267
9ebd3d82
DB
268static int
269lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
270{
d663ec49 271 struct device *dev = &client->dev;
9e37d3e2 272 struct device *hwmon_dev;
9ebd3d82 273 struct lm75_data *data;
90e2b545 274 int status, err;
9ebd3d82
DB
275 u8 set_mask, clr_mask;
276 int new;
e97a45f1
JMC
277 enum lm75_type kind;
278
279 if (client->dev.of_node)
280 kind = (enum lm75_type)of_device_get_match_data(&client->dev);
281 else
282 kind = id->driver_data;
9ebd3d82
DB
283
284 if (!i2c_check_functionality(client->adapter,
285 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
286 return -EIO;
287
d663ec49 288 data = devm_kzalloc(dev, sizeof(struct lm75_data), GFP_KERNEL);
9ebd3d82
DB
289 if (!data)
290 return -ENOMEM;
291
d663ec49 292 data->client = client;
e65365fe
GR
293
294 data->regmap = devm_regmap_init_i2c(client, &lm75_regmap_config);
295 if (IS_ERR(data->regmap))
296 return PTR_ERR(data->regmap);
9ebd3d82
DB
297
298 /* Set to LM75 resolution (9 bits, 1/2 degree C) and range.
299 * Then tweak to be more precise when appropriate.
300 */
301 set_mask = 0;
8a5c5cc6
JD
302 clr_mask = LM75_SHUTDOWN; /* continuous conversions */
303
0cd2c72d 304 switch (kind) {
8a5c5cc6
JD
305 case adt75:
306 clr_mask |= 1 << 5; /* not one-shot mode */
0cd2c72d 307 data->resolution = 12;
e65365fe 308 data->sample_time = MSEC_PER_SEC / 8;
8a5c5cc6
JD
309 break;
310 case ds1775:
311 case ds75:
312 case stds75:
0cd2c72d
JD
313 clr_mask |= 3 << 5;
314 set_mask |= 2 << 5; /* 11-bit mode */
315 data->resolution = 11;
e65365fe 316 data->sample_time = MSEC_PER_SEC;
0cd2c72d 317 break;
3fbc81e3
JD
318 case ds7505:
319 set_mask |= 3 << 5; /* 12-bit mode */
320 data->resolution = 12;
e65365fe 321 data->sample_time = MSEC_PER_SEC / 4;
3fbc81e3 322 break;
c98d6c65 323 case g751:
0cd2c72d
JD
324 case lm75:
325 case lm75a:
326 data->resolution = 9;
e65365fe 327 data->sample_time = MSEC_PER_SEC / 2;
0cd2c72d 328 break;
799fc602
MT
329 case lm75b:
330 data->resolution = 11;
e65365fe 331 data->sample_time = MSEC_PER_SEC / 4;
799fc602 332 break;
0cd2c72d
JD
333 case max6625:
334 data->resolution = 9;
e65365fe 335 data->sample_time = MSEC_PER_SEC / 4;
0cd2c72d
JD
336 break;
337 case max6626:
338 data->resolution = 12;
339 data->resolution_limits = 9;
e65365fe 340 data->sample_time = MSEC_PER_SEC / 4;
0cd2c72d
JD
341 break;
342 case tcn75:
343 data->resolution = 9;
e65365fe 344 data->sample_time = MSEC_PER_SEC / 8;
8a5c5cc6
JD
345 break;
346 case mcp980x:
0cd2c72d
JD
347 data->resolution_limits = 9;
348 /* fall through */
8a5c5cc6
JD
349 case tmp100:
350 case tmp101:
0cd2c72d
JD
351 set_mask |= 3 << 5; /* 12-bit mode */
352 data->resolution = 12;
e65365fe 353 data->sample_time = MSEC_PER_SEC;
0cd2c72d
JD
354 clr_mask |= 1 << 7; /* not one-shot mode */
355 break;
c83959f8
FK
356 case tmp112:
357 set_mask |= 3 << 5; /* 12-bit mode */
358 clr_mask |= 1 << 7; /* not one-shot mode */
359 data->resolution = 12;
e65365fe 360 data->sample_time = MSEC_PER_SEC / 4;
c83959f8 361 break;
8a5c5cc6
JD
362 case tmp105:
363 case tmp175:
364 case tmp275:
365 case tmp75:
0cd2c72d 366 set_mask |= 3 << 5; /* 12-bit mode */
8a5c5cc6 367 clr_mask |= 1 << 7; /* not one-shot mode */
0cd2c72d 368 data->resolution = 12;
e65365fe 369 data->sample_time = MSEC_PER_SEC / 2;
8a5c5cc6 370 break;
9c32e815
BG
371 case tmp75c:
372 clr_mask |= 1 << 5; /* not one-shot mode */
373 data->resolution = 12;
e65365fe 374 data->sample_time = MSEC_PER_SEC / 4;
9c32e815 375 break;
8a5c5cc6 376 }
9ebd3d82
DB
377
378 /* configure as specified */
38aefb41 379 status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);
9ebd3d82 380 if (status < 0) {
d663ec49 381 dev_dbg(dev, "Can't read config? %d\n", status);
13ac7a01 382 return status;
9ebd3d82
DB
383 }
384 data->orig_conf = status;
385 new = status & ~clr_mask;
386 new |= set_mask;
387 if (status != new)
38aefb41 388 i2c_smbus_write_byte_data(client, LM75_REG_CONF, new);
9ebd3d82 389
90e2b545
GR
390 err = devm_add_action_or_reset(dev, lm75_remove, data);
391 if (err)
392 return err;
9ebd3d82 393
9e37d3e2 394 dev_dbg(dev, "Config %02x\n", new);
22e73183 395
08b02433
GR
396 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
397 data, &lm75_chip_info,
398 NULL);
9e37d3e2
GR
399 if (IS_ERR(hwmon_dev))
400 return PTR_ERR(hwmon_dev);
9ebd3d82 401
9e37d3e2 402 dev_info(dev, "%s: sensor '%s'\n", dev_name(hwmon_dev), client->name);
9ebd3d82 403
9ebd3d82
DB
404 return 0;
405}
406
407static const struct i2c_device_id lm75_ids[] = {
e96f9d89 408 { "adt75", adt75, },
9ebd3d82
DB
409 { "ds1775", ds1775, },
410 { "ds75", ds75, },
3fbc81e3 411 { "ds7505", ds7505, },
c98d6c65 412 { "g751", g751, },
9ebd3d82
DB
413 { "lm75", lm75, },
414 { "lm75a", lm75a, },
799fc602 415 { "lm75b", lm75b, },
9ebd3d82
DB
416 { "max6625", max6625, },
417 { "max6626", max6626, },
418 { "mcp980x", mcp980x, },
419 { "stds75", stds75, },
420 { "tcn75", tcn75, },
421 { "tmp100", tmp100, },
422 { "tmp101", tmp101, },
6d034059 423 { "tmp105", tmp105, },
c83959f8 424 { "tmp112", tmp112, },
9ebd3d82
DB
425 { "tmp175", tmp175, },
426 { "tmp275", tmp275, },
427 { "tmp75", tmp75, },
9c32e815 428 { "tmp75c", tmp75c, },
9ebd3d82
DB
429 { /* LIST END */ }
430};
431MODULE_DEVICE_TABLE(i2c, lm75_ids);
432
e97a45f1
JMC
433static const struct of_device_id lm75_of_match[] = {
434 {
435 .compatible = "adi,adt75",
436 .data = (void *)adt75
437 },
438 {
439 .compatible = "dallas,ds1775",
440 .data = (void *)ds1775
441 },
442 {
443 .compatible = "dallas,ds75",
444 .data = (void *)ds75
445 },
446 {
447 .compatible = "dallas,ds7505",
448 .data = (void *)ds7505
449 },
450 {
451 .compatible = "gmt,g751",
452 .data = (void *)g751
453 },
454 {
455 .compatible = "national,lm75",
456 .data = (void *)lm75
457 },
458 {
459 .compatible = "national,lm75a",
460 .data = (void *)lm75a
461 },
462 {
463 .compatible = "national,lm75b",
464 .data = (void *)lm75b
465 },
466 {
467 .compatible = "maxim,max6625",
468 .data = (void *)max6625
469 },
470 {
471 .compatible = "maxim,max6626",
472 .data = (void *)max6626
473 },
474 {
475 .compatible = "maxim,mcp980x",
476 .data = (void *)mcp980x
477 },
478 {
479 .compatible = "st,stds75",
480 .data = (void *)stds75
481 },
482 {
483 .compatible = "microchip,tcn75",
484 .data = (void *)tcn75
485 },
486 {
487 .compatible = "ti,tmp100",
488 .data = (void *)tmp100
489 },
490 {
491 .compatible = "ti,tmp101",
492 .data = (void *)tmp101
493 },
494 {
495 .compatible = "ti,tmp105",
496 .data = (void *)tmp105
497 },
498 {
499 .compatible = "ti,tmp112",
500 .data = (void *)tmp112
501 },
502 {
503 .compatible = "ti,tmp175",
504 .data = (void *)tmp175
505 },
506 {
507 .compatible = "ti,tmp275",
508 .data = (void *)tmp275
509 },
510 {
511 .compatible = "ti,tmp75",
512 .data = (void *)tmp75
513 },
514 {
515 .compatible = "ti,tmp75c",
516 .data = (void *)tmp75c
517 },
518 { },
519};
520MODULE_DEVICE_TABLE(of, lm75_of_match);
521
05e82fe4
LS
522#define LM75A_ID 0xA1
523
8ff69eeb 524/* Return 0 if detection is successful, -ENODEV otherwise */
310ec792 525static int lm75_detect(struct i2c_client *new_client,
8ff69eeb 526 struct i2c_board_info *info)
1da177e4 527{
8ff69eeb 528 struct i2c_adapter *adapter = new_client->adapter;
1da177e4 529 int i;
e76f67b5 530 int conf, hyst, os;
05e82fe4 531 bool is_lm75a = 0;
1da177e4 532
1da177e4
LT
533 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
534 I2C_FUNC_SMBUS_WORD_DATA))
8ff69eeb 535 return -ENODEV;
1da177e4 536
426343ef
JD
537 /*
538 * Now, we do the remaining detection. There is no identification-
539 * dedicated register so we have to rely on several tricks:
540 * unused bits, registers cycling over 8-address boundaries,
541 * addresses 0x04-0x07 returning the last read value.
542 * The cycling+unused addresses combination is not tested,
543 * since it would significantly slow the detection down and would
544 * hardly add any value.
545 *
546 * The National Semiconductor LM75A is different than earlier
547 * LM75s. It has an ID byte of 0xaX (where X is the chip
548 * revision, with 1 being the only revision in existence) in
549 * register 7, and unused registers return 0xff rather than the
550 * last read value.
551 *
552 * Note that this function only detects the original National
553 * Semiconductor LM75 and the LM75A. Clones from other vendors
554 * aren't detected, on purpose, because they are typically never
555 * found on PC hardware. They are found on embedded designs where
556 * they can be instantiated explicitly so detection is not needed.
557 * The absence of identification registers on all these clones
558 * would make their exhaustive detection very difficult and weak,
559 * and odds are that the driver would bind to unsupported devices.
560 */
1da177e4 561
e76f67b5 562 /* Unused bits */
52df6440 563 conf = i2c_smbus_read_byte_data(new_client, 1);
e76f67b5
JD
564 if (conf & 0xe0)
565 return -ENODEV;
05e82fe4
LS
566
567 /* First check for LM75A */
568 if (i2c_smbus_read_byte_data(new_client, 7) == LM75A_ID) {
569 /* LM75A returns 0xff on unused registers so
570 just to be sure we check for that too. */
571 if (i2c_smbus_read_byte_data(new_client, 4) != 0xff
572 || i2c_smbus_read_byte_data(new_client, 5) != 0xff
573 || i2c_smbus_read_byte_data(new_client, 6) != 0xff)
574 return -ENODEV;
575 is_lm75a = 1;
e76f67b5
JD
576 hyst = i2c_smbus_read_byte_data(new_client, 2);
577 os = i2c_smbus_read_byte_data(new_client, 3);
05e82fe4
LS
578 } else { /* Traditional style LM75 detection */
579 /* Unused addresses */
e76f67b5
JD
580 hyst = i2c_smbus_read_byte_data(new_client, 2);
581 if (i2c_smbus_read_byte_data(new_client, 4) != hyst
582 || i2c_smbus_read_byte_data(new_client, 5) != hyst
583 || i2c_smbus_read_byte_data(new_client, 6) != hyst
584 || i2c_smbus_read_byte_data(new_client, 7) != hyst)
05e82fe4 585 return -ENODEV;
e76f67b5
JD
586 os = i2c_smbus_read_byte_data(new_client, 3);
587 if (i2c_smbus_read_byte_data(new_client, 4) != os
588 || i2c_smbus_read_byte_data(new_client, 5) != os
589 || i2c_smbus_read_byte_data(new_client, 6) != os
590 || i2c_smbus_read_byte_data(new_client, 7) != os)
05e82fe4
LS
591 return -ENODEV;
592 }
4ad40cc5
GR
593 /*
594 * It is very unlikely that this is a LM75 if both
595 * hysteresis and temperature limit registers are 0.
596 */
597 if (hyst == 0 && os == 0)
598 return -ENODEV;
1da177e4 599
52df6440 600 /* Addresses cycling */
e76f67b5 601 for (i = 8; i <= 248; i += 40) {
52df6440 602 if (i2c_smbus_read_byte_data(new_client, i + 1) != conf
e76f67b5
JD
603 || i2c_smbus_read_byte_data(new_client, i + 2) != hyst
604 || i2c_smbus_read_byte_data(new_client, i + 3) != os)
52df6440 605 return -ENODEV;
05e82fe4
LS
606 if (is_lm75a && i2c_smbus_read_byte_data(new_client, i + 7)
607 != LM75A_ID)
608 return -ENODEV;
1da177e4
LT
609 }
610
05e82fe4 611 strlcpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE);
c1685f61 612
1da177e4 613 return 0;
01a52397
DB
614}
615
9914518e
SD
616#ifdef CONFIG_PM
617static int lm75_suspend(struct device *dev)
618{
619 int status;
620 struct i2c_client *client = to_i2c_client(dev);
38aefb41 621 status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);
9914518e
SD
622 if (status < 0) {
623 dev_dbg(&client->dev, "Can't read config? %d\n", status);
624 return status;
625 }
626 status = status | LM75_SHUTDOWN;
38aefb41 627 i2c_smbus_write_byte_data(client, LM75_REG_CONF, status);
9914518e
SD
628 return 0;
629}
630
631static int lm75_resume(struct device *dev)
632{
633 int status;
634 struct i2c_client *client = to_i2c_client(dev);
38aefb41 635 status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);
9914518e
SD
636 if (status < 0) {
637 dev_dbg(&client->dev, "Can't read config? %d\n", status);
638 return status;
639 }
640 status = status & ~LM75_SHUTDOWN;
38aefb41 641 i2c_smbus_write_byte_data(client, LM75_REG_CONF, status);
9914518e
SD
642 return 0;
643}
644
645static const struct dev_pm_ops lm75_dev_pm_ops = {
646 .suspend = lm75_suspend,
647 .resume = lm75_resume,
648};
649#define LM75_DEV_PM_OPS (&lm75_dev_pm_ops)
650#else
651#define LM75_DEV_PM_OPS NULL
652#endif /* CONFIG_PM */
653
8ff69eeb
JD
654static struct i2c_driver lm75_driver = {
655 .class = I2C_CLASS_HWMON,
01a52397 656 .driver = {
8ff69eeb 657 .name = "lm75",
e97a45f1 658 .of_match_table = of_match_ptr(lm75_of_match),
9914518e 659 .pm = LM75_DEV_PM_OPS,
01a52397 660 },
8ff69eeb 661 .probe = lm75_probe,
8ff69eeb
JD
662 .id_table = lm75_ids,
663 .detect = lm75_detect,
c3813d6a 664 .address_list = normal_i2c,
01a52397
DB
665};
666
f0967eea 667module_i2c_driver(lm75_driver);
1da177e4
LT
668
669MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
670MODULE_DESCRIPTION("LM75 driver");
671MODULE_LICENSE("GPL");