hwmon: use simple i2c probe function
[linux-block.git] / drivers / hwmon / lm75.c
CommitLineData
74ba9207 1// SPDX-License-Identifier: GPL-2.0-or-later
1da177e4 2/*
caaa0f36
S
3 * lm75.c - Part of lm_sensors, Linux kernel modules for hardware
4 * monitoring
5 * Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
caaa0f36 6 */
1da177e4 7
1da177e4
LT
8#include <linux/module.h>
9#include <linux/init.h>
10#include <linux/slab.h>
11#include <linux/jiffies.h>
12#include <linux/i2c.h>
943b0830 13#include <linux/hwmon.h>
9ca8e40c 14#include <linux/hwmon-sysfs.h>
943b0830 15#include <linux/err.h>
e97a45f1 16#include <linux/of_device.h>
22e73183 17#include <linux/of.h>
e65365fe 18#include <linux/regmap.h>
4b5be3c1 19#include <linux/util_macros.h>
1da177e4
LT
20#include "lm75.h"
21
01a52397
DB
22/*
23 * This driver handles the LM75 and compatible digital temperature sensors.
01a52397
DB
24 */
25
9ebd3d82 26enum lm75_type { /* keep sorted in alphabetical order */
e96f9d89 27 adt75,
1f86df49 28 ds1775,
9ebd3d82 29 ds75,
3fbc81e3 30 ds7505,
c98d6c65 31 g751,
1f86df49 32 lm75,
9ebd3d82 33 lm75a,
799fc602 34 lm75b,
9ebd3d82
DB
35 max6625,
36 max6626,
a54ca77a 37 max31725,
9ebd3d82 38 mcp980x,
557c7ffa 39 pct2075,
9ebd3d82 40 stds75,
2e9a41bb 41 stlm75,
9ebd3d82
DB
42 tcn75,
43 tmp100,
44 tmp101,
6d034059 45 tmp105,
c83959f8 46 tmp112,
9ebd3d82
DB
47 tmp175,
48 tmp275,
49 tmp75,
39abe9d8 50 tmp75b,
9c32e815 51 tmp75c,
9ebd3d82
DB
52};
53
dcb12653
IPPS
54/**
55 * struct lm75_params - lm75 configuration parameters.
56 * @set_mask: Bits to set in configuration register when configuring
57 * the chip.
58 * @clr_mask: Bits to clear in configuration register when configuring
59 * the chip.
60 * @default_resolution: Default number of bits to represent the temperature
61 * value.
62 * @resolution_limits: Limit register resolution. Optional. Should be set if
63 * the resolution of limit registers does not match the
64 * resolution of the temperature register.
7f1a300f
IPPS
65 * @resolutions: List of resolutions associated with sample times.
66 * Optional. Should be set if num_sample_times is larger
67 * than 1, and if the resolution changes with sample times.
68 * If set, number of entries must match num_sample_times.
69 * @default_sample_time:Sample time to be set by default.
70 * @num_sample_times: Number of possible sample times to be set. Optional.
71 * Should be set if the number of sample times is larger
72 * than one.
73 * @sample_times: All the possible sample times to be set. Mandatory if
74 * num_sample_times is larger than 1. If set, number of
75 * entries must match num_sample_times.
dcb12653
IPPS
76 */
77
78struct lm75_params {
7f1a300f
IPPS
79 u8 set_mask;
80 u8 clr_mask;
81 u8 default_resolution;
82 u8 resolution_limits;
83 const u8 *resolutions;
84 unsigned int default_sample_time;
85 u8 num_sample_times;
86 const unsigned int *sample_times;
dcb12653
IPPS
87};
88
8ff69eeb 89/* Addresses scanned */
25e9c86d 90static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
1da177e4 91 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
1da177e4 92
1da177e4 93/* The LM75 registers */
e65365fe 94#define LM75_REG_TEMP 0x00
1da177e4 95#define LM75_REG_CONF 0x01
e65365fe
GR
96#define LM75_REG_HYST 0x02
97#define LM75_REG_MAX 0x03
d7a85cde 98#define PCT2075_REG_IDLE 0x04
1da177e4
LT
99
100/* Each client has this additional data */
101struct lm75_data {
dcb12653
IPPS
102 struct i2c_client *client;
103 struct regmap *regmap;
104 u8 orig_conf;
105 u8 current_conf;
106 u8 resolution; /* In bits, 9 to 16 */
107 unsigned int sample_time; /* In ms */
108 enum lm75_type kind;
109 const struct lm75_params *params;
1da177e4
LT
110};
111
01a52397 112/*-----------------------------------------------------------------------*/
7db0db3f
GR
113
114static const u8 lm75_sample_set_masks[] = { 0 << 5, 1 << 5, 2 << 5, 3 << 5 };
115
116#define LM75_SAMPLE_CLEAR_MASK (3 << 5)
117
dcb12653
IPPS
118/* The structure below stores the configuration values of the supported devices.
119 * In case of being supported multiple configurations, the default one must
120 * always be the first element of the array
121 */
122static const struct lm75_params device_params[] = {
123 [adt75] = {
124 .clr_mask = 1 << 5, /* not one-shot mode */
125 .default_resolution = 12,
35cd1804 126 .default_sample_time = MSEC_PER_SEC / 10,
dcb12653
IPPS
127 },
128 [ds1775] = {
129 .clr_mask = 3 << 5,
130 .set_mask = 2 << 5, /* 11-bit mode */
131 .default_resolution = 11,
35cd1804 132 .default_sample_time = 500,
7db0db3f 133 .num_sample_times = 4,
35cd1804 134 .sample_times = (unsigned int []){ 125, 250, 500, 1000 },
7db0db3f 135 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
136 },
137 [ds75] = {
138 .clr_mask = 3 << 5,
139 .set_mask = 2 << 5, /* 11-bit mode */
140 .default_resolution = 11,
7db0db3f
GR
141 .default_sample_time = 600,
142 .num_sample_times = 4,
143 .sample_times = (unsigned int []){ 150, 300, 600, 1200 },
144 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
145 },
146 [stds75] = {
147 .clr_mask = 3 << 5,
148 .set_mask = 2 << 5, /* 11-bit mode */
149 .default_resolution = 11,
7db0db3f
GR
150 .default_sample_time = 600,
151 .num_sample_times = 4,
152 .sample_times = (unsigned int []){ 150, 300, 600, 1200 },
153 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
154 },
155 [stlm75] = {
156 .default_resolution = 9,
35cd1804 157 .default_sample_time = MSEC_PER_SEC / 6,
dcb12653
IPPS
158 },
159 [ds7505] = {
160 .set_mask = 3 << 5, /* 12-bit mode*/
161 .default_resolution = 12,
7db0db3f
GR
162 .default_sample_time = 200,
163 .num_sample_times = 4,
164 .sample_times = (unsigned int []){ 25, 50, 100, 200 },
165 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
166 },
167 [g751] = {
168 .default_resolution = 9,
35cd1804 169 .default_sample_time = MSEC_PER_SEC / 10,
dcb12653
IPPS
170 },
171 [lm75] = {
172 .default_resolution = 9,
35cd1804 173 .default_sample_time = MSEC_PER_SEC / 10,
dcb12653
IPPS
174 },
175 [lm75a] = {
176 .default_resolution = 9,
35cd1804 177 .default_sample_time = MSEC_PER_SEC / 10,
dcb12653
IPPS
178 },
179 [lm75b] = {
180 .default_resolution = 11,
35cd1804 181 .default_sample_time = MSEC_PER_SEC / 10,
dcb12653
IPPS
182 },
183 [max6625] = {
184 .default_resolution = 9,
35cd1804 185 .default_sample_time = MSEC_PER_SEC / 7,
dcb12653
IPPS
186 },
187 [max6626] = {
188 .default_resolution = 12,
35cd1804 189 .default_sample_time = MSEC_PER_SEC / 7,
dcb12653
IPPS
190 .resolution_limits = 9,
191 },
192 [max31725] = {
193 .default_resolution = 16,
35cd1804 194 .default_sample_time = MSEC_PER_SEC / 20,
dcb12653
IPPS
195 },
196 [tcn75] = {
197 .default_resolution = 9,
35cd1804 198 .default_sample_time = MSEC_PER_SEC / 18,
dcb12653
IPPS
199 },
200 [pct2075] = {
201 .default_resolution = 11,
202 .default_sample_time = MSEC_PER_SEC / 10,
d7a85cde
GR
203 .num_sample_times = 31,
204 .sample_times = (unsigned int []){ 100, 200, 300, 400, 500, 600,
205 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700,
206 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700,
207 2800, 2900, 3000, 3100 },
dcb12653
IPPS
208 },
209 [mcp980x] = {
210 .set_mask = 3 << 5, /* 12-bit mode */
211 .clr_mask = 1 << 7, /* not one-shot mode */
212 .default_resolution = 12,
213 .resolution_limits = 9,
7db0db3f
GR
214 .default_sample_time = 240,
215 .num_sample_times = 4,
35cd1804 216 .sample_times = (unsigned int []){ 30, 60, 120, 240 },
7db0db3f 217 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
218 },
219 [tmp100] = {
220 .set_mask = 3 << 5, /* 12-bit mode */
221 .clr_mask = 1 << 7, /* not one-shot mode */
222 .default_resolution = 12,
7db0db3f
GR
223 .default_sample_time = 320,
224 .num_sample_times = 4,
35cd1804 225 .sample_times = (unsigned int []){ 40, 80, 160, 320 },
7db0db3f 226 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
227 },
228 [tmp101] = {
229 .set_mask = 3 << 5, /* 12-bit mode */
230 .clr_mask = 1 << 7, /* not one-shot mode */
231 .default_resolution = 12,
7db0db3f
GR
232 .default_sample_time = 320,
233 .num_sample_times = 4,
35cd1804 234 .sample_times = (unsigned int []){ 40, 80, 160, 320 },
7db0db3f 235 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653 236 },
7db0db3f 237 [tmp105] = {
dcb12653 238 .set_mask = 3 << 5, /* 12-bit mode */
7db0db3f 239 .clr_mask = 1 << 7, /* not one-shot mode*/
dcb12653 240 .default_resolution = 12,
7db0db3f
GR
241 .default_sample_time = 220,
242 .num_sample_times = 4,
35cd1804 243 .sample_times = (unsigned int []){ 28, 55, 110, 220 },
7db0db3f 244 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653 245 },
7db0db3f 246 [tmp112] = {
35cd1804 247 .set_mask = 3 << 5, /* 8 samples / second */
7db0db3f 248 .clr_mask = 1 << 7, /* no one-shot mode*/
dcb12653 249 .default_resolution = 12,
35cd1804 250 .default_sample_time = 125,
cee04a01
GR
251 .num_sample_times = 4,
252 .sample_times = (unsigned int []){ 125, 250, 1000, 4000 },
dcb12653
IPPS
253 },
254 [tmp175] = {
255 .set_mask = 3 << 5, /* 12-bit mode */
256 .clr_mask = 1 << 7, /* not one-shot mode*/
257 .default_resolution = 12,
7db0db3f
GR
258 .default_sample_time = 220,
259 .num_sample_times = 4,
35cd1804 260 .sample_times = (unsigned int []){ 28, 55, 110, 220 },
7db0db3f 261 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
262 },
263 [tmp275] = {
264 .set_mask = 3 << 5, /* 12-bit mode */
265 .clr_mask = 1 << 7, /* not one-shot mode*/
266 .default_resolution = 12,
7db0db3f
GR
267 .default_sample_time = 220,
268 .num_sample_times = 4,
35cd1804 269 .sample_times = (unsigned int []){ 28, 55, 110, 220 },
7db0db3f 270 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
271 },
272 [tmp75] = {
273 .set_mask = 3 << 5, /* 12-bit mode */
274 .clr_mask = 1 << 7, /* not one-shot mode*/
275 .default_resolution = 12,
7db0db3f
GR
276 .default_sample_time = 220,
277 .num_sample_times = 4,
35cd1804 278 .sample_times = (unsigned int []){ 28, 55, 110, 220 },
7db0db3f 279 .resolutions = (u8 []) {9, 10, 11, 12 },
dcb12653
IPPS
280 },
281 [tmp75b] = { /* not one-shot mode, Conversion rate 37Hz */
282 .clr_mask = 1 << 7 | 3 << 5,
283 .default_resolution = 12,
284 .default_sample_time = MSEC_PER_SEC / 37,
7f1a300f
IPPS
285 .sample_times = (unsigned int []){ MSEC_PER_SEC / 37,
286 MSEC_PER_SEC / 18,
287 MSEC_PER_SEC / 9, MSEC_PER_SEC / 4 },
288 .num_sample_times = 4,
dcb12653
IPPS
289 },
290 [tmp75c] = {
291 .clr_mask = 1 << 5, /*not one-shot mode*/
292 .default_resolution = 12,
35cd1804 293 .default_sample_time = MSEC_PER_SEC / 12,
dcb12653
IPPS
294 }
295};
01a52397 296
22e73183
EV
297static inline long lm75_reg_to_mc(s16 temp, u8 resolution)
298{
299 return ((temp >> (16 - resolution)) * 1000) >> (resolution - 8);
300}
301
58608cfe
IPPS
302static int lm75_write_config(struct lm75_data *data, u8 set_mask,
303 u8 clr_mask)
304{
305 u8 value;
306
307 clr_mask |= LM75_SHUTDOWN;
308 value = data->current_conf & ~clr_mask;
309 value |= set_mask;
310
311 if (data->current_conf != value) {
312 s32 err;
313
314 err = i2c_smbus_write_byte_data(data->client, LM75_REG_CONF,
315 value);
316 if (err)
317 return err;
318 data->current_conf = value;
319 }
320 return 0;
321}
322
08b02433
GR
323static int lm75_read(struct device *dev, enum hwmon_sensor_types type,
324 u32 attr, int channel, long *val)
22e73183 325{
e65365fe 326 struct lm75_data *data = dev_get_drvdata(dev);
08b02433
GR
327 unsigned int regval;
328 int err, reg;
329
330 switch (type) {
331 case hwmon_chip:
332 switch (attr) {
333 case hwmon_chip_update_interval:
334 *val = data->sample_time;
ccffe776 335 break;
08b02433
GR
336 default:
337 return -EINVAL;
338 }
339 break;
340 case hwmon_temp:
341 switch (attr) {
342 case hwmon_temp_input:
343 reg = LM75_REG_TEMP;
344 break;
345 case hwmon_temp_max:
346 reg = LM75_REG_MAX;
347 break;
348 case hwmon_temp_max_hyst:
349 reg = LM75_REG_HYST;
350 break;
351 default:
352 return -EINVAL;
353 }
354 err = regmap_read(data->regmap, reg, &regval);
355 if (err < 0)
356 return err;
357
358 *val = lm75_reg_to_mc(regval, data->resolution);
359 break;
360 default:
361 return -EINVAL;
362 }
22e73183
EV
363 return 0;
364}
365
4b5be3c1 366static int lm75_write_temp(struct device *dev, u32 attr, long temp)
9ca8e40c 367{
e65365fe 368 struct lm75_data *data = dev_get_drvdata(dev);
87d0621a 369 u8 resolution;
08b02433
GR
370 int reg;
371
08b02433
GR
372 switch (attr) {
373 case hwmon_temp_max:
374 reg = LM75_REG_MAX;
375 break;
376 case hwmon_temp_max_hyst:
377 reg = LM75_REG_HYST;
378 break;
379 default:
380 return -EINVAL;
381 }
9ca8e40c 382
87d0621a
JD
383 /*
384 * Resolution of limit registers is assumed to be the same as the
385 * temperature input register resolution unless given explicitly.
386 */
dcb12653
IPPS
387 if (data->params->resolution_limits)
388 resolution = data->params->resolution_limits;
87d0621a
JD
389 else
390 resolution = data->resolution;
391
87d0621a 392 temp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX);
e65365fe
GR
393 temp = DIV_ROUND_CLOSEST(temp << (resolution - 8),
394 1000) << (16 - resolution);
e65365fe 395
7d82fcc9 396 return regmap_write(data->regmap, reg, (u16)temp);
1da177e4 397}
1da177e4 398
040b106f 399static int lm75_update_interval(struct device *dev, long val)
4b5be3c1
IPPS
400{
401 struct lm75_data *data = dev_get_drvdata(dev);
cee04a01 402 unsigned int reg;
4b5be3c1
IPPS
403 u8 index;
404 s32 err;
405
040b106f
GR
406 index = find_closest(val, data->params->sample_times,
407 (int)data->params->num_sample_times);
4b5be3c1 408
cee04a01
GR
409 switch (data->kind) {
410 default:
411 err = lm75_write_config(data, lm75_sample_set_masks[index],
412 LM75_SAMPLE_CLEAR_MASK);
413 if (err)
414 return err;
040b106f 415
cee04a01
GR
416 data->sample_time = data->params->sample_times[index];
417 if (data->params->resolutions)
418 data->resolution = data->params->resolutions[index];
419 break;
420 case tmp112:
421 err = regmap_read(data->regmap, LM75_REG_CONF, &reg);
422 if (err < 0)
423 return err;
424 reg &= ~0x00c0;
425 reg |= (3 - index) << 6;
426 err = regmap_write(data->regmap, LM75_REG_CONF, reg);
427 if (err < 0)
428 return err;
429 data->sample_time = data->params->sample_times[index];
430 break;
d7a85cde
GR
431 case pct2075:
432 err = i2c_smbus_write_byte_data(data->client, PCT2075_REG_IDLE,
433 index + 1);
434 if (err)
435 return err;
436 data->sample_time = data->params->sample_times[index];
437 break;
cee04a01 438 }
040b106f
GR
439 return 0;
440}
441
442static int lm75_write_chip(struct device *dev, u32 attr, long val)
443{
444 switch (attr) {
445 case hwmon_chip_update_interval:
446 return lm75_update_interval(dev, val);
4b5be3c1
IPPS
447 default:
448 return -EINVAL;
449 }
450 return 0;
451}
452
453static int lm75_write(struct device *dev, enum hwmon_sensor_types type,
454 u32 attr, int channel, long val)
455{
456 switch (type) {
457 case hwmon_chip:
458 return lm75_write_chip(dev, attr, val);
459 case hwmon_temp:
460 return lm75_write_temp(dev, attr, val);
461 default:
462 return -EINVAL;
463 }
464 return 0;
465}
466
08b02433
GR
467static umode_t lm75_is_visible(const void *data, enum hwmon_sensor_types type,
468 u32 attr, int channel)
5f7e5e29 469{
4b5be3c1
IPPS
470 const struct lm75_data *config_data = data;
471
08b02433
GR
472 switch (type) {
473 case hwmon_chip:
474 switch (attr) {
475 case hwmon_chip_update_interval:
4b5be3c1
IPPS
476 if (config_data->params->num_sample_times > 1)
477 return 0644;
e6ab6e0e 478 return 0444;
08b02433
GR
479 }
480 break;
481 case hwmon_temp:
482 switch (attr) {
483 case hwmon_temp_input:
e6ab6e0e 484 return 0444;
08b02433
GR
485 case hwmon_temp_max:
486 case hwmon_temp_max_hyst:
e6ab6e0e 487 return 0644;
08b02433
GR
488 }
489 break;
490 default:
491 break;
492 }
493 return 0;
5f7e5e29
GR
494}
495
08b02433 496static const struct hwmon_channel_info *lm75_info[] = {
e4f6fed1
GR
497 HWMON_CHANNEL_INFO(chip,
498 HWMON_C_REGISTER_TZ | HWMON_C_UPDATE_INTERVAL),
499 HWMON_CHANNEL_INFO(temp,
500 HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST),
08b02433
GR
501 NULL
502};
503
504static const struct hwmon_ops lm75_hwmon_ops = {
505 .is_visible = lm75_is_visible,
506 .read = lm75_read,
507 .write = lm75_write,
508};
509
510static const struct hwmon_chip_info lm75_chip_info = {
511 .ops = &lm75_hwmon_ops,
512 .info = lm75_info,
513};
9ebd3d82 514
e65365fe
GR
515static bool lm75_is_writeable_reg(struct device *dev, unsigned int reg)
516{
517 return reg != LM75_REG_TEMP;
518}
519
520static bool lm75_is_volatile_reg(struct device *dev, unsigned int reg)
521{
cee04a01 522 return reg == LM75_REG_TEMP || reg == LM75_REG_CONF;
e65365fe
GR
523}
524
525static const struct regmap_config lm75_regmap_config = {
526 .reg_bits = 8,
527 .val_bits = 16,
d7a85cde 528 .max_register = PCT2075_REG_IDLE,
e65365fe
GR
529 .writeable_reg = lm75_is_writeable_reg,
530 .volatile_reg = lm75_is_volatile_reg,
531 .val_format_endian = REGMAP_ENDIAN_BIG,
532 .cache_type = REGCACHE_RBTREE,
1c96a2f6
DF
533 .use_single_read = true,
534 .use_single_write = true,
e65365fe
GR
535};
536
9e37d3e2
GR
537static void lm75_remove(void *data)
538{
539 struct lm75_data *lm75 = data;
540 struct i2c_client *client = lm75->client;
541
542 i2c_smbus_write_byte_data(client, LM75_REG_CONF, lm75->orig_conf);
543}
544
67487038
SK
545static const struct i2c_device_id lm75_ids[];
546
547static int lm75_probe(struct i2c_client *client)
9ebd3d82 548{
d663ec49 549 struct device *dev = &client->dev;
9e37d3e2 550 struct device *hwmon_dev;
9ebd3d82 551 struct lm75_data *data;
90e2b545 552 int status, err;
e97a45f1
JMC
553 enum lm75_type kind;
554
555 if (client->dev.of_node)
556 kind = (enum lm75_type)of_device_get_match_data(&client->dev);
557 else
67487038 558 kind = i2c_match_id(lm75_ids, client)->driver_data;
9ebd3d82
DB
559
560 if (!i2c_check_functionality(client->adapter,
561 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
562 return -EIO;
563
d663ec49 564 data = devm_kzalloc(dev, sizeof(struct lm75_data), GFP_KERNEL);
9ebd3d82
DB
565 if (!data)
566 return -ENOMEM;
567
d663ec49 568 data->client = client;
dcb12653 569 data->kind = kind;
e65365fe
GR
570
571 data->regmap = devm_regmap_init_i2c(client, &lm75_regmap_config);
572 if (IS_ERR(data->regmap))
573 return PTR_ERR(data->regmap);
9ebd3d82
DB
574
575 /* Set to LM75 resolution (9 bits, 1/2 degree C) and range.
576 * Then tweak to be more precise when appropriate.
577 */
9ebd3d82 578
dcb12653
IPPS
579 data->params = &device_params[data->kind];
580
581 /* Save default sample time and resolution*/
582 data->sample_time = data->params->default_sample_time;
583 data->resolution = data->params->default_resolution;
584
585 /* Cache original configuration */
38aefb41 586 status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);
9ebd3d82 587 if (status < 0) {
d663ec49 588 dev_dbg(dev, "Can't read config? %d\n", status);
13ac7a01 589 return status;
9ebd3d82
DB
590 }
591 data->orig_conf = status;
58608cfe 592 data->current_conf = status;
9ebd3d82 593
58608cfe
IPPS
594 err = lm75_write_config(data, data->params->set_mask,
595 data->params->clr_mask);
90e2b545
GR
596 if (err)
597 return err;
9ebd3d82 598
58608cfe
IPPS
599 err = devm_add_action_or_reset(dev, lm75_remove, data);
600 if (err)
601 return err;
22e73183 602
08b02433
GR
603 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
604 data, &lm75_chip_info,
605 NULL);
9e37d3e2
GR
606 if (IS_ERR(hwmon_dev))
607 return PTR_ERR(hwmon_dev);
9ebd3d82 608
9e37d3e2 609 dev_info(dev, "%s: sensor '%s'\n", dev_name(hwmon_dev), client->name);
9ebd3d82 610
9ebd3d82
DB
611 return 0;
612}
613
614static const struct i2c_device_id lm75_ids[] = {
e96f9d89 615 { "adt75", adt75, },
9ebd3d82
DB
616 { "ds1775", ds1775, },
617 { "ds75", ds75, },
3fbc81e3 618 { "ds7505", ds7505, },
c98d6c65 619 { "g751", g751, },
9ebd3d82
DB
620 { "lm75", lm75, },
621 { "lm75a", lm75a, },
799fc602 622 { "lm75b", lm75b, },
9ebd3d82
DB
623 { "max6625", max6625, },
624 { "max6626", max6626, },
a54ca77a
KY
625 { "max31725", max31725, },
626 { "max31726", max31725, },
9ebd3d82 627 { "mcp980x", mcp980x, },
557c7ffa 628 { "pct2075", pct2075, },
9ebd3d82 629 { "stds75", stds75, },
2e9a41bb 630 { "stlm75", stlm75, },
9ebd3d82
DB
631 { "tcn75", tcn75, },
632 { "tmp100", tmp100, },
633 { "tmp101", tmp101, },
6d034059 634 { "tmp105", tmp105, },
c83959f8 635 { "tmp112", tmp112, },
9ebd3d82
DB
636 { "tmp175", tmp175, },
637 { "tmp275", tmp275, },
638 { "tmp75", tmp75, },
39abe9d8 639 { "tmp75b", tmp75b, },
9c32e815 640 { "tmp75c", tmp75c, },
9ebd3d82
DB
641 { /* LIST END */ }
642};
643MODULE_DEVICE_TABLE(i2c, lm75_ids);
644
ffa83e78 645static const struct of_device_id __maybe_unused lm75_of_match[] = {
e97a45f1
JMC
646 {
647 .compatible = "adi,adt75",
648 .data = (void *)adt75
649 },
650 {
651 .compatible = "dallas,ds1775",
652 .data = (void *)ds1775
653 },
654 {
655 .compatible = "dallas,ds75",
656 .data = (void *)ds75
657 },
658 {
659 .compatible = "dallas,ds7505",
660 .data = (void *)ds7505
661 },
662 {
663 .compatible = "gmt,g751",
664 .data = (void *)g751
665 },
666 {
667 .compatible = "national,lm75",
668 .data = (void *)lm75
669 },
670 {
671 .compatible = "national,lm75a",
672 .data = (void *)lm75a
673 },
674 {
675 .compatible = "national,lm75b",
676 .data = (void *)lm75b
677 },
678 {
679 .compatible = "maxim,max6625",
680 .data = (void *)max6625
681 },
682 {
683 .compatible = "maxim,max6626",
684 .data = (void *)max6626
685 },
a54ca77a
KY
686 {
687 .compatible = "maxim,max31725",
688 .data = (void *)max31725
689 },
690 {
691 .compatible = "maxim,max31726",
692 .data = (void *)max31725
693 },
e97a45f1
JMC
694 {
695 .compatible = "maxim,mcp980x",
696 .data = (void *)mcp980x
697 },
557c7ffa
DM
698 {
699 .compatible = "nxp,pct2075",
700 .data = (void *)pct2075
701 },
e97a45f1
JMC
702 {
703 .compatible = "st,stds75",
704 .data = (void *)stds75
705 },
2e9a41bb
JT
706 {
707 .compatible = "st,stlm75",
708 .data = (void *)stlm75
709 },
e97a45f1
JMC
710 {
711 .compatible = "microchip,tcn75",
712 .data = (void *)tcn75
713 },
714 {
715 .compatible = "ti,tmp100",
716 .data = (void *)tmp100
717 },
718 {
719 .compatible = "ti,tmp101",
720 .data = (void *)tmp101
721 },
722 {
723 .compatible = "ti,tmp105",
724 .data = (void *)tmp105
725 },
726 {
727 .compatible = "ti,tmp112",
728 .data = (void *)tmp112
729 },
730 {
731 .compatible = "ti,tmp175",
732 .data = (void *)tmp175
733 },
734 {
735 .compatible = "ti,tmp275",
736 .data = (void *)tmp275
737 },
738 {
739 .compatible = "ti,tmp75",
740 .data = (void *)tmp75
741 },
39abe9d8
IPPS
742 {
743 .compatible = "ti,tmp75b",
744 .data = (void *)tmp75b
745 },
e97a45f1
JMC
746 {
747 .compatible = "ti,tmp75c",
748 .data = (void *)tmp75c
749 },
750 { },
751};
752MODULE_DEVICE_TABLE(of, lm75_of_match);
753
05e82fe4
LS
754#define LM75A_ID 0xA1
755
8ff69eeb 756/* Return 0 if detection is successful, -ENODEV otherwise */
310ec792 757static int lm75_detect(struct i2c_client *new_client,
8ff69eeb 758 struct i2c_board_info *info)
1da177e4 759{
8ff69eeb 760 struct i2c_adapter *adapter = new_client->adapter;
1da177e4 761 int i;
e76f67b5 762 int conf, hyst, os;
05e82fe4 763 bool is_lm75a = 0;
1da177e4 764
1da177e4
LT
765 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
766 I2C_FUNC_SMBUS_WORD_DATA))
8ff69eeb 767 return -ENODEV;
1da177e4 768
426343ef
JD
769 /*
770 * Now, we do the remaining detection. There is no identification-
771 * dedicated register so we have to rely on several tricks:
772 * unused bits, registers cycling over 8-address boundaries,
773 * addresses 0x04-0x07 returning the last read value.
774 * The cycling+unused addresses combination is not tested,
775 * since it would significantly slow the detection down and would
776 * hardly add any value.
777 *
778 * The National Semiconductor LM75A is different than earlier
779 * LM75s. It has an ID byte of 0xaX (where X is the chip
780 * revision, with 1 being the only revision in existence) in
781 * register 7, and unused registers return 0xff rather than the
782 * last read value.
783 *
784 * Note that this function only detects the original National
785 * Semiconductor LM75 and the LM75A. Clones from other vendors
786 * aren't detected, on purpose, because they are typically never
787 * found on PC hardware. They are found on embedded designs where
788 * they can be instantiated explicitly so detection is not needed.
789 * The absence of identification registers on all these clones
790 * would make their exhaustive detection very difficult and weak,
791 * and odds are that the driver would bind to unsupported devices.
792 */
1da177e4 793
e76f67b5 794 /* Unused bits */
52df6440 795 conf = i2c_smbus_read_byte_data(new_client, 1);
e76f67b5
JD
796 if (conf & 0xe0)
797 return -ENODEV;
05e82fe4
LS
798
799 /* First check for LM75A */
800 if (i2c_smbus_read_byte_data(new_client, 7) == LM75A_ID) {
8cbf2172
MO
801 /*
802 * LM75A returns 0xff on unused registers so
803 * just to be sure we check for that too.
804 */
05e82fe4
LS
805 if (i2c_smbus_read_byte_data(new_client, 4) != 0xff
806 || i2c_smbus_read_byte_data(new_client, 5) != 0xff
807 || i2c_smbus_read_byte_data(new_client, 6) != 0xff)
808 return -ENODEV;
809 is_lm75a = 1;
e76f67b5
JD
810 hyst = i2c_smbus_read_byte_data(new_client, 2);
811 os = i2c_smbus_read_byte_data(new_client, 3);
05e82fe4
LS
812 } else { /* Traditional style LM75 detection */
813 /* Unused addresses */
e76f67b5
JD
814 hyst = i2c_smbus_read_byte_data(new_client, 2);
815 if (i2c_smbus_read_byte_data(new_client, 4) != hyst
816 || i2c_smbus_read_byte_data(new_client, 5) != hyst
817 || i2c_smbus_read_byte_data(new_client, 6) != hyst
818 || i2c_smbus_read_byte_data(new_client, 7) != hyst)
05e82fe4 819 return -ENODEV;
e76f67b5
JD
820 os = i2c_smbus_read_byte_data(new_client, 3);
821 if (i2c_smbus_read_byte_data(new_client, 4) != os
822 || i2c_smbus_read_byte_data(new_client, 5) != os
823 || i2c_smbus_read_byte_data(new_client, 6) != os
824 || i2c_smbus_read_byte_data(new_client, 7) != os)
05e82fe4
LS
825 return -ENODEV;
826 }
4ad40cc5
GR
827 /*
828 * It is very unlikely that this is a LM75 if both
829 * hysteresis and temperature limit registers are 0.
830 */
831 if (hyst == 0 && os == 0)
832 return -ENODEV;
1da177e4 833
52df6440 834 /* Addresses cycling */
e76f67b5 835 for (i = 8; i <= 248; i += 40) {
52df6440 836 if (i2c_smbus_read_byte_data(new_client, i + 1) != conf
e76f67b5
JD
837 || i2c_smbus_read_byte_data(new_client, i + 2) != hyst
838 || i2c_smbus_read_byte_data(new_client, i + 3) != os)
52df6440 839 return -ENODEV;
05e82fe4
LS
840 if (is_lm75a && i2c_smbus_read_byte_data(new_client, i + 7)
841 != LM75A_ID)
842 return -ENODEV;
1da177e4
LT
843 }
844
05e82fe4 845 strlcpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE);
c1685f61 846
1da177e4 847 return 0;
01a52397
DB
848}
849
9914518e
SD
850#ifdef CONFIG_PM
851static int lm75_suspend(struct device *dev)
852{
853 int status;
854 struct i2c_client *client = to_i2c_client(dev);
8cbf2172 855
38aefb41 856 status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);
9914518e
SD
857 if (status < 0) {
858 dev_dbg(&client->dev, "Can't read config? %d\n", status);
859 return status;
860 }
861 status = status | LM75_SHUTDOWN;
38aefb41 862 i2c_smbus_write_byte_data(client, LM75_REG_CONF, status);
9914518e
SD
863 return 0;
864}
865
866static int lm75_resume(struct device *dev)
867{
868 int status;
869 struct i2c_client *client = to_i2c_client(dev);
8cbf2172 870
38aefb41 871 status = i2c_smbus_read_byte_data(client, LM75_REG_CONF);
9914518e
SD
872 if (status < 0) {
873 dev_dbg(&client->dev, "Can't read config? %d\n", status);
874 return status;
875 }
876 status = status & ~LM75_SHUTDOWN;
38aefb41 877 i2c_smbus_write_byte_data(client, LM75_REG_CONF, status);
9914518e
SD
878 return 0;
879}
880
881static const struct dev_pm_ops lm75_dev_pm_ops = {
882 .suspend = lm75_suspend,
883 .resume = lm75_resume,
884};
885#define LM75_DEV_PM_OPS (&lm75_dev_pm_ops)
886#else
887#define LM75_DEV_PM_OPS NULL
888#endif /* CONFIG_PM */
889
8ff69eeb
JD
890static struct i2c_driver lm75_driver = {
891 .class = I2C_CLASS_HWMON,
01a52397 892 .driver = {
8ff69eeb 893 .name = "lm75",
e97a45f1 894 .of_match_table = of_match_ptr(lm75_of_match),
9914518e 895 .pm = LM75_DEV_PM_OPS,
01a52397 896 },
67487038 897 .probe_new = lm75_probe,
8ff69eeb
JD
898 .id_table = lm75_ids,
899 .detect = lm75_detect,
c3813d6a 900 .address_list = normal_i2c,
01a52397
DB
901};
902
f0967eea 903module_i2c_driver(lm75_driver);
1da177e4
LT
904
905MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
906MODULE_DESCRIPTION("LM75 driver");
907MODULE_LICENSE("GPL");