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