0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098 #include <linux/bits.h>
0099 #include <linux/device.h>
0100 #include <linux/err.h>
0101 #include <linux/i2c.h>
0102 #include <linux/init.h>
0103 #include <linux/interrupt.h>
0104 #include <linux/jiffies.h>
0105 #include <linux/hwmon.h>
0106 #include <linux/module.h>
0107 #include <linux/mutex.h>
0108 #include <linux/of_device.h>
0109 #include <linux/regulator/consumer.h>
0110 #include <linux/slab.h>
0111 #include <linux/workqueue.h>
0112
0113
0114 #define MAX_CHANNELS 3
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 static const unsigned short normal_i2c[] = {
0132 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x48, 0x49, 0x4a, 0x4b, 0x4c,
0133 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
0134
0135 enum chips { adm1023, adm1032, adt7461, adt7461a, adt7481,
0136 g781, lm84, lm90, lm99,
0137 max1617, max6642, max6646, max6648, max6654, max6657, max6659, max6680, max6696,
0138 nct210, nct72, ne1618, sa56004, tmp451, tmp461, w83l771,
0139 };
0140
0141
0142
0143
0144
0145 #define LM90_REG_MAN_ID 0xFE
0146 #define LM90_REG_CHIP_ID 0xFF
0147 #define LM90_REG_CONFIG1 0x03
0148 #define LM90_REG_CONFIG2 0xBF
0149 #define LM90_REG_CONVRATE 0x04
0150 #define LM90_REG_STATUS 0x02
0151 #define LM90_REG_LOCAL_TEMP 0x00
0152 #define LM90_REG_LOCAL_HIGH 0x05
0153 #define LM90_REG_LOCAL_LOW 0x06
0154 #define LM90_REG_LOCAL_CRIT 0x20
0155 #define LM90_REG_REMOTE_TEMPH 0x01
0156 #define LM90_REG_REMOTE_TEMPL 0x10
0157 #define LM90_REG_REMOTE_OFFSH 0x11
0158 #define LM90_REG_REMOTE_OFFSL 0x12
0159 #define LM90_REG_REMOTE_HIGHH 0x07
0160 #define LM90_REG_REMOTE_HIGHL 0x13
0161 #define LM90_REG_REMOTE_LOWH 0x08
0162 #define LM90_REG_REMOTE_LOWL 0x14
0163 #define LM90_REG_REMOTE_CRIT 0x19
0164 #define LM90_REG_TCRIT_HYST 0x21
0165
0166
0167
0168 #define MAX6657_REG_LOCAL_TEMPL 0x11
0169 #define MAX6696_REG_STATUS2 0x12
0170 #define MAX6659_REG_REMOTE_EMERG 0x16
0171 #define MAX6659_REG_LOCAL_EMERG 0x17
0172
0173
0174
0175 #define SA56004_REG_LOCAL_TEMPL 0x22
0176
0177 #define LM90_MAX_CONVRATE_MS 16000
0178
0179
0180 #define TMP451_REG_LOCAL_TEMPL 0x15
0181 #define TMP451_REG_CONALERT 0x22
0182
0183 #define TMP461_REG_CHEN 0x16
0184 #define TMP461_REG_DFC 0x24
0185
0186
0187 #define ADT7481_REG_STATUS2 0x23
0188 #define ADT7481_REG_CONFIG2 0x24
0189
0190 #define ADT7481_REG_MAN_ID 0x3e
0191 #define ADT7481_REG_CHIP_ID 0x3d
0192
0193
0194 #define LM90_HAVE_EXTENDED_TEMP BIT(0)
0195 #define LM90_HAVE_OFFSET BIT(1)
0196 #define LM90_HAVE_UNSIGNED_TEMP BIT(2)
0197 #define LM90_HAVE_REM_LIMIT_EXT BIT(3)
0198 #define LM90_HAVE_EMERGENCY BIT(4)
0199 #define LM90_HAVE_EMERGENCY_ALARM BIT(5)
0200 #define LM90_HAVE_TEMP3 BIT(6)
0201 #define LM90_HAVE_BROKEN_ALERT BIT(7)
0202 #define LM90_PAUSE_FOR_CONFIG BIT(8)
0203 #define LM90_HAVE_CRIT BIT(9)
0204 #define LM90_HAVE_CRIT_ALRM_SWP BIT(10)
0205 #define LM90_HAVE_PEC BIT(11)
0206 #define LM90_HAVE_PARTIAL_PEC BIT(12)
0207 #define LM90_HAVE_ALARMS BIT(13)
0208 #define LM90_HAVE_EXT_UNSIGNED BIT(14)
0209 #define LM90_HAVE_LOW BIT(15)
0210 #define LM90_HAVE_CONVRATE BIT(16)
0211 #define LM90_HAVE_REMOTE_EXT BIT(17)
0212 #define LM90_HAVE_FAULTQUEUE BIT(18)
0213
0214
0215 #define LM90_STATUS_LTHRM BIT(0)
0216 #define LM90_STATUS_RTHRM BIT(1)
0217 #define LM90_STATUS_ROPEN BIT(2)
0218 #define LM90_STATUS_RLOW BIT(3)
0219 #define LM90_STATUS_RHIGH BIT(4)
0220 #define LM90_STATUS_LLOW BIT(5)
0221 #define LM90_STATUS_LHIGH BIT(6)
0222 #define LM90_STATUS_BUSY BIT(7)
0223
0224
0225 #define MAX6696_STATUS2_R2THRM BIT(1)
0226 #define MAX6696_STATUS2_R2OPEN BIT(2)
0227 #define MAX6696_STATUS2_R2LOW BIT(3)
0228 #define MAX6696_STATUS2_R2HIGH BIT(4)
0229 #define MAX6696_STATUS2_ROT2 BIT(5)
0230 #define MAX6696_STATUS2_R2OT2 BIT(6)
0231 #define MAX6696_STATUS2_LOT2 BIT(7)
0232
0233
0234
0235
0236
0237 static const struct i2c_device_id lm90_id[] = {
0238 { "adm1020", max1617 },
0239 { "adm1021", max1617 },
0240 { "adm1023", adm1023 },
0241 { "adm1032", adm1032 },
0242 { "adt7421", adt7461a },
0243 { "adt7461", adt7461 },
0244 { "adt7461a", adt7461a },
0245 { "adt7481", adt7481 },
0246 { "adt7482", adt7481 },
0247 { "adt7483a", adt7481 },
0248 { "g781", g781 },
0249 { "gl523sm", max1617 },
0250 { "lm84", lm84 },
0251 { "lm86", lm90 },
0252 { "lm89", lm90 },
0253 { "lm90", lm90 },
0254 { "lm99", lm99 },
0255 { "max1617", max1617 },
0256 { "max6642", max6642 },
0257 { "max6646", max6646 },
0258 { "max6647", max6646 },
0259 { "max6648", max6648 },
0260 { "max6649", max6646 },
0261 { "max6654", max6654 },
0262 { "max6657", max6657 },
0263 { "max6658", max6657 },
0264 { "max6659", max6659 },
0265 { "max6680", max6680 },
0266 { "max6681", max6680 },
0267 { "max6690", max6654 },
0268 { "max6692", max6648 },
0269 { "max6695", max6696 },
0270 { "max6696", max6696 },
0271 { "mc1066", max1617 },
0272 { "nct1008", adt7461a },
0273 { "nct210", nct210 },
0274 { "nct214", nct72 },
0275 { "nct218", nct72 },
0276 { "nct72", nct72 },
0277 { "ne1618", ne1618 },
0278 { "w83l771", w83l771 },
0279 { "sa56004", sa56004 },
0280 { "thmc10", max1617 },
0281 { "tmp451", tmp451 },
0282 { "tmp461", tmp461 },
0283 { }
0284 };
0285 MODULE_DEVICE_TABLE(i2c, lm90_id);
0286
0287 static const struct of_device_id __maybe_unused lm90_of_match[] = {
0288 {
0289 .compatible = "adi,adm1032",
0290 .data = (void *)adm1032
0291 },
0292 {
0293 .compatible = "adi,adt7461",
0294 .data = (void *)adt7461
0295 },
0296 {
0297 .compatible = "adi,adt7461a",
0298 .data = (void *)adt7461a
0299 },
0300 {
0301 .compatible = "adi,adt7481",
0302 .data = (void *)adt7481
0303 },
0304 {
0305 .compatible = "gmt,g781",
0306 .data = (void *)g781
0307 },
0308 {
0309 .compatible = "national,lm90",
0310 .data = (void *)lm90
0311 },
0312 {
0313 .compatible = "national,lm86",
0314 .data = (void *)lm90
0315 },
0316 {
0317 .compatible = "national,lm89",
0318 .data = (void *)lm90
0319 },
0320 {
0321 .compatible = "national,lm99",
0322 .data = (void *)lm99
0323 },
0324 {
0325 .compatible = "dallas,max6646",
0326 .data = (void *)max6646
0327 },
0328 {
0329 .compatible = "dallas,max6647",
0330 .data = (void *)max6646
0331 },
0332 {
0333 .compatible = "dallas,max6649",
0334 .data = (void *)max6646
0335 },
0336 {
0337 .compatible = "dallas,max6654",
0338 .data = (void *)max6654
0339 },
0340 {
0341 .compatible = "dallas,max6657",
0342 .data = (void *)max6657
0343 },
0344 {
0345 .compatible = "dallas,max6658",
0346 .data = (void *)max6657
0347 },
0348 {
0349 .compatible = "dallas,max6659",
0350 .data = (void *)max6659
0351 },
0352 {
0353 .compatible = "dallas,max6680",
0354 .data = (void *)max6680
0355 },
0356 {
0357 .compatible = "dallas,max6681",
0358 .data = (void *)max6680
0359 },
0360 {
0361 .compatible = "dallas,max6695",
0362 .data = (void *)max6696
0363 },
0364 {
0365 .compatible = "dallas,max6696",
0366 .data = (void *)max6696
0367 },
0368 {
0369 .compatible = "onnn,nct1008",
0370 .data = (void *)adt7461a
0371 },
0372 {
0373 .compatible = "onnn,nct214",
0374 .data = (void *)nct72
0375 },
0376 {
0377 .compatible = "onnn,nct218",
0378 .data = (void *)nct72
0379 },
0380 {
0381 .compatible = "onnn,nct72",
0382 .data = (void *)nct72
0383 },
0384 {
0385 .compatible = "winbond,w83l771",
0386 .data = (void *)w83l771
0387 },
0388 {
0389 .compatible = "nxp,sa56004",
0390 .data = (void *)sa56004
0391 },
0392 {
0393 .compatible = "ti,tmp451",
0394 .data = (void *)tmp451
0395 },
0396 {
0397 .compatible = "ti,tmp461",
0398 .data = (void *)tmp461
0399 },
0400 { },
0401 };
0402 MODULE_DEVICE_TABLE(of, lm90_of_match);
0403
0404
0405
0406
0407 struct lm90_params {
0408 u32 flags;
0409 u16 alert_alarms;
0410
0411 u8 max_convrate;
0412 u8 resolution;
0413 u8 reg_status2;
0414 u8 reg_local_ext;
0415 u8 faultqueue_mask;
0416 u8 faultqueue_depth;
0417 };
0418
0419 static const struct lm90_params lm90_params[] = {
0420 [adm1023] = {
0421 .flags = LM90_HAVE_ALARMS | LM90_HAVE_OFFSET | LM90_HAVE_BROKEN_ALERT
0422 | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0423 | LM90_HAVE_REMOTE_EXT,
0424 .alert_alarms = 0x7c,
0425 .resolution = 8,
0426 .max_convrate = 7,
0427 },
0428 [adm1032] = {
0429 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0430 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_CRIT
0431 | LM90_HAVE_PARTIAL_PEC | LM90_HAVE_ALARMS
0432 | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
0433 | LM90_HAVE_FAULTQUEUE,
0434 .alert_alarms = 0x7c,
0435 .max_convrate = 10,
0436 },
0437 [adt7461] = {
0438
0439
0440
0441
0442
0443 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0444 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
0445 | LM90_HAVE_CRIT | LM90_HAVE_PARTIAL_PEC
0446 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0447 | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0448 .alert_alarms = 0x7c,
0449 .max_convrate = 10,
0450 .resolution = 10,
0451 },
0452 [adt7461a] = {
0453 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0454 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
0455 | LM90_HAVE_CRIT | LM90_HAVE_PEC | LM90_HAVE_ALARMS
0456 | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
0457 | LM90_HAVE_FAULTQUEUE,
0458 .alert_alarms = 0x7c,
0459 .max_convrate = 10,
0460 },
0461 [adt7481] = {
0462 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0463 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
0464 | LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_PEC
0465 | LM90_HAVE_TEMP3 | LM90_HAVE_CRIT | LM90_HAVE_LOW
0466 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
0467 | LM90_HAVE_FAULTQUEUE,
0468 .alert_alarms = 0x1c7c,
0469 .max_convrate = 11,
0470 .resolution = 10,
0471 .reg_status2 = ADT7481_REG_STATUS2,
0472 },
0473 [g781] = {
0474 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0475 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_CRIT
0476 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0477 | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0478 .alert_alarms = 0x7c,
0479 .max_convrate = 7,
0480 },
0481 [lm84] = {
0482 .flags = LM90_HAVE_ALARMS,
0483 .resolution = 8,
0484 },
0485 [lm90] = {
0486 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0487 | LM90_HAVE_CRIT | LM90_HAVE_ALARMS | LM90_HAVE_LOW
0488 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
0489 | LM90_HAVE_FAULTQUEUE,
0490 .alert_alarms = 0x7b,
0491 .max_convrate = 9,
0492 .faultqueue_mask = BIT(0),
0493 .faultqueue_depth = 3,
0494 },
0495 [lm99] = {
0496 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0497 | LM90_HAVE_CRIT | LM90_HAVE_ALARMS | LM90_HAVE_LOW
0498 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
0499 | LM90_HAVE_FAULTQUEUE,
0500 .alert_alarms = 0x7b,
0501 .max_convrate = 9,
0502 .faultqueue_mask = BIT(0),
0503 .faultqueue_depth = 3,
0504 },
0505 [max1617] = {
0506 .flags = LM90_HAVE_CONVRATE | LM90_HAVE_BROKEN_ALERT |
0507 LM90_HAVE_LOW | LM90_HAVE_ALARMS,
0508 .alert_alarms = 0x78,
0509 .resolution = 8,
0510 .max_convrate = 7,
0511 },
0512 [max6642] = {
0513 .flags = LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXT_UNSIGNED
0514 | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0515 .alert_alarms = 0x50,
0516 .resolution = 10,
0517 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0518 .faultqueue_mask = BIT(4),
0519 .faultqueue_depth = 2,
0520 },
0521 [max6646] = {
0522 .flags = LM90_HAVE_CRIT | LM90_HAVE_BROKEN_ALERT
0523 | LM90_HAVE_EXT_UNSIGNED | LM90_HAVE_ALARMS | LM90_HAVE_LOW
0524 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
0525 .alert_alarms = 0x7c,
0526 .max_convrate = 6,
0527 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0528 },
0529 [max6648] = {
0530 .flags = LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_CRIT
0531 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_LOW
0532 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
0533 .alert_alarms = 0x7c,
0534 .max_convrate = 6,
0535 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0536 },
0537 [max6654] = {
0538 .flags = LM90_HAVE_BROKEN_ALERT | LM90_HAVE_ALARMS | LM90_HAVE_LOW
0539 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
0540 .alert_alarms = 0x7c,
0541 .max_convrate = 7,
0542 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0543 },
0544 [max6657] = {
0545 .flags = LM90_PAUSE_FOR_CONFIG | LM90_HAVE_CRIT
0546 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0547 | LM90_HAVE_REMOTE_EXT,
0548 .alert_alarms = 0x7c,
0549 .max_convrate = 8,
0550 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0551 },
0552 [max6659] = {
0553 .flags = LM90_HAVE_EMERGENCY | LM90_HAVE_CRIT
0554 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0555 | LM90_HAVE_REMOTE_EXT,
0556 .alert_alarms = 0x7c,
0557 .max_convrate = 8,
0558 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0559 },
0560 [max6680] = {
0561
0562
0563
0564
0565
0566 .flags = LM90_HAVE_OFFSET | LM90_HAVE_CRIT
0567 | LM90_HAVE_CRIT_ALRM_SWP | LM90_HAVE_BROKEN_ALERT
0568 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0569 | LM90_HAVE_REMOTE_EXT,
0570 .alert_alarms = 0x7c,
0571 .max_convrate = 7,
0572 },
0573 [max6696] = {
0574 .flags = LM90_HAVE_EMERGENCY
0575 | LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3 | LM90_HAVE_CRIT
0576 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0577 | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0578 .alert_alarms = 0x1c7c,
0579 .max_convrate = 6,
0580 .reg_status2 = MAX6696_REG_STATUS2,
0581 .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
0582 .faultqueue_mask = BIT(5),
0583 .faultqueue_depth = 4,
0584 },
0585 [nct72] = {
0586 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0587 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
0588 | LM90_HAVE_CRIT | LM90_HAVE_PEC | LM90_HAVE_UNSIGNED_TEMP
0589 | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
0590 | LM90_HAVE_FAULTQUEUE,
0591 .alert_alarms = 0x7c,
0592 .max_convrate = 10,
0593 .resolution = 10,
0594 },
0595 [nct210] = {
0596 .flags = LM90_HAVE_ALARMS | LM90_HAVE_BROKEN_ALERT
0597 | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0598 | LM90_HAVE_REMOTE_EXT,
0599 .alert_alarms = 0x7c,
0600 .resolution = 11,
0601 .max_convrate = 7,
0602 },
0603 [ne1618] = {
0604 .flags = LM90_PAUSE_FOR_CONFIG | LM90_HAVE_BROKEN_ALERT
0605 | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
0606 .alert_alarms = 0x7c,
0607 .resolution = 11,
0608 .max_convrate = 7,
0609 },
0610 [w83l771] = {
0611 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT
0612 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0613 | LM90_HAVE_REMOTE_EXT,
0614 .alert_alarms = 0x7c,
0615 .max_convrate = 8,
0616 },
0617 [sa56004] = {
0618
0619
0620
0621
0622
0623 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT
0624 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0625 | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0626 .alert_alarms = 0x7b,
0627 .max_convrate = 9,
0628 .reg_local_ext = SA56004_REG_LOCAL_TEMPL,
0629 .faultqueue_mask = BIT(0),
0630 .faultqueue_depth = 3,
0631 },
0632 [tmp451] = {
0633 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0634 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP | LM90_HAVE_CRIT
0635 | LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_ALARMS | LM90_HAVE_LOW
0636 | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0637 .alert_alarms = 0x7c,
0638 .max_convrate = 9,
0639 .resolution = 12,
0640 .reg_local_ext = TMP451_REG_LOCAL_TEMPL,
0641 },
0642 [tmp461] = {
0643 .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
0644 | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP | LM90_HAVE_CRIT
0645 | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
0646 | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
0647 .alert_alarms = 0x7c,
0648 .max_convrate = 9,
0649 .resolution = 12,
0650 .reg_local_ext = TMP451_REG_LOCAL_TEMPL,
0651 },
0652 };
0653
0654
0655
0656
0657 enum lm90_temp_reg_index {
0658 LOCAL_LOW = 0,
0659 LOCAL_HIGH,
0660 LOCAL_CRIT,
0661 REMOTE_CRIT,
0662 LOCAL_EMERG,
0663 REMOTE_EMERG,
0664 REMOTE2_CRIT,
0665 REMOTE2_EMERG,
0666
0667 REMOTE_TEMP,
0668 REMOTE_LOW,
0669 REMOTE_HIGH,
0670 REMOTE_OFFSET,
0671 LOCAL_TEMP,
0672 REMOTE2_TEMP,
0673 REMOTE2_LOW,
0674 REMOTE2_HIGH,
0675 REMOTE2_OFFSET,
0676
0677 TEMP_REG_NUM
0678 };
0679
0680
0681
0682
0683
0684 struct lm90_data {
0685 struct i2c_client *client;
0686 struct device *hwmon_dev;
0687 u32 chip_config[2];
0688 u32 channel_config[MAX_CHANNELS + 1];
0689 const char *channel_label[MAX_CHANNELS];
0690 struct hwmon_channel_info chip_info;
0691 struct hwmon_channel_info temp_info;
0692 const struct hwmon_channel_info *info[3];
0693 struct hwmon_chip_info chip;
0694 struct mutex update_lock;
0695 struct delayed_work alert_work;
0696 struct work_struct report_work;
0697 bool valid;
0698 bool alarms_valid;
0699 unsigned long last_updated;
0700 unsigned long alarms_updated;
0701 int kind;
0702 u32 flags;
0703
0704 unsigned int update_interval;
0705
0706 u8 config;
0707 u8 config_orig;
0708 u8 convrate_orig;
0709 u8 resolution;
0710 u16 alert_alarms;
0711
0712 u8 max_convrate;
0713 u8 reg_status2;
0714 u8 reg_local_ext;
0715 u8 reg_remote_ext;
0716 u8 faultqueue_mask;
0717 u8 faultqueue_depth;
0718
0719
0720 u16 temp[TEMP_REG_NUM];
0721 u8 temp_hyst;
0722 u8 conalert;
0723 u16 reported_alarms;
0724 u16 current_alarms;
0725 u16 alarms;
0726 };
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736 static inline s32 lm90_write_no_pec(struct i2c_client *client, u8 value)
0737 {
0738 return i2c_smbus_xfer(client->adapter, client->addr,
0739 client->flags & ~I2C_CLIENT_PEC,
0740 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
0741 }
0742
0743
0744
0745
0746
0747
0748
0749 static int lm90_read_reg(struct i2c_client *client, u8 reg)
0750 {
0751 struct lm90_data *data = i2c_get_clientdata(client);
0752 bool partial_pec = (client->flags & I2C_CLIENT_PEC) &&
0753 (data->flags & LM90_HAVE_PARTIAL_PEC);
0754 int err;
0755
0756 if (partial_pec) {
0757 err = lm90_write_no_pec(client, reg);
0758 if (err)
0759 return err;
0760 return i2c_smbus_read_byte(client);
0761 }
0762 return i2c_smbus_read_byte_data(client, reg);
0763 }
0764
0765
0766
0767
0768
0769
0770
0771 static u8 lm90_write_reg_addr(u8 reg)
0772 {
0773 if (reg >= LM90_REG_CONFIG1 && reg <= LM90_REG_REMOTE_LOWH)
0774 return reg + 6;
0775 return reg;
0776 }
0777
0778
0779
0780
0781
0782
0783 static int lm90_write_reg(struct i2c_client *client, u8 reg, u8 val)
0784 {
0785 return i2c_smbus_write_byte_data(client, lm90_write_reg_addr(reg), val);
0786 }
0787
0788
0789
0790
0791
0792
0793 static int lm90_write16(struct i2c_client *client, u8 regh, u8 regl, u16 val)
0794 {
0795 int ret;
0796
0797 ret = lm90_write_reg(client, regh, val >> 8);
0798 if (ret < 0 || !regl)
0799 return ret;
0800 return lm90_write_reg(client, regl, val & 0xff);
0801 }
0802
0803 static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl,
0804 bool is_volatile)
0805 {
0806 int oldh, newh, l;
0807
0808 oldh = lm90_read_reg(client, regh);
0809 if (oldh < 0)
0810 return oldh;
0811
0812 if (!regl)
0813 return oldh << 8;
0814
0815 l = lm90_read_reg(client, regl);
0816 if (l < 0)
0817 return l;
0818
0819 if (!is_volatile)
0820 return (oldh << 8) | l;
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833
0834
0835 newh = lm90_read_reg(client, regh);
0836 if (newh < 0)
0837 return newh;
0838 if (oldh != newh) {
0839 l = lm90_read_reg(client, regl);
0840 if (l < 0)
0841 return l;
0842 }
0843 return (newh << 8) | l;
0844 }
0845
0846 static int lm90_update_confreg(struct lm90_data *data, u8 config)
0847 {
0848 if (data->config != config) {
0849 int err;
0850
0851 err = lm90_write_reg(data->client, LM90_REG_CONFIG1, config);
0852 if (err)
0853 return err;
0854 data->config = config;
0855 }
0856 return 0;
0857 }
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867 static int lm90_select_remote_channel(struct lm90_data *data, bool second)
0868 {
0869 u8 config = data->config & ~0x08;
0870
0871 if (second)
0872 config |= 0x08;
0873
0874 return lm90_update_confreg(data, config);
0875 }
0876
0877 static int lm90_write_convrate(struct lm90_data *data, int val)
0878 {
0879 u8 config = data->config;
0880 int err;
0881
0882
0883 if (data->flags & LM90_PAUSE_FOR_CONFIG) {
0884 err = lm90_update_confreg(data, config | 0x40);
0885 if (err < 0)
0886 return err;
0887 }
0888
0889
0890 err = lm90_write_reg(data->client, LM90_REG_CONVRATE, val);
0891
0892
0893 lm90_update_confreg(data, config);
0894
0895 return err;
0896 }
0897
0898
0899
0900
0901
0902
0903 static int lm90_set_convrate(struct i2c_client *client, struct lm90_data *data,
0904 unsigned int interval)
0905 {
0906 unsigned int update_interval;
0907 int i, err;
0908
0909
0910 interval <<= 6;
0911
0912
0913 for (i = 0, update_interval = LM90_MAX_CONVRATE_MS << 6;
0914 i < data->max_convrate; i++, update_interval >>= 1)
0915 if (interval >= update_interval * 3 / 4)
0916 break;
0917
0918 err = lm90_write_convrate(data, i);
0919 data->update_interval = DIV_ROUND_CLOSEST(update_interval, 64);
0920 return err;
0921 }
0922
0923 static int lm90_set_faultqueue(struct i2c_client *client,
0924 struct lm90_data *data, int val)
0925 {
0926 int err;
0927
0928 if (data->faultqueue_mask) {
0929 err = lm90_update_confreg(data, val <= data->faultqueue_depth / 2 ?
0930 data->config & ~data->faultqueue_mask :
0931 data->config | data->faultqueue_mask);
0932 } else {
0933 static const u8 values[4] = {0, 2, 6, 0x0e};
0934
0935 data->conalert = (data->conalert & 0xf1) | values[val - 1];
0936 err = lm90_write_reg(data->client, TMP451_REG_CONALERT,
0937 data->conalert);
0938 }
0939
0940 return err;
0941 }
0942
0943 static int lm90_update_limits(struct device *dev)
0944 {
0945 struct lm90_data *data = dev_get_drvdata(dev);
0946 struct i2c_client *client = data->client;
0947 int val;
0948
0949 if (data->flags & LM90_HAVE_CRIT) {
0950 val = lm90_read_reg(client, LM90_REG_LOCAL_CRIT);
0951 if (val < 0)
0952 return val;
0953 data->temp[LOCAL_CRIT] = val << 8;
0954
0955 val = lm90_read_reg(client, LM90_REG_REMOTE_CRIT);
0956 if (val < 0)
0957 return val;
0958 data->temp[REMOTE_CRIT] = val << 8;
0959
0960 val = lm90_read_reg(client, LM90_REG_TCRIT_HYST);
0961 if (val < 0)
0962 return val;
0963 data->temp_hyst = val;
0964 }
0965 if ((data->flags & LM90_HAVE_FAULTQUEUE) && !data->faultqueue_mask) {
0966 val = lm90_read_reg(client, TMP451_REG_CONALERT);
0967 if (val < 0)
0968 return val;
0969 data->conalert = val;
0970 }
0971
0972 val = lm90_read16(client, LM90_REG_REMOTE_LOWH,
0973 (data->flags & LM90_HAVE_REM_LIMIT_EXT) ? LM90_REG_REMOTE_LOWL : 0,
0974 false);
0975 if (val < 0)
0976 return val;
0977 data->temp[REMOTE_LOW] = val;
0978
0979 val = lm90_read16(client, LM90_REG_REMOTE_HIGHH,
0980 (data->flags & LM90_HAVE_REM_LIMIT_EXT) ? LM90_REG_REMOTE_HIGHL : 0,
0981 false);
0982 if (val < 0)
0983 return val;
0984 data->temp[REMOTE_HIGH] = val;
0985
0986 if (data->flags & LM90_HAVE_OFFSET) {
0987 val = lm90_read16(client, LM90_REG_REMOTE_OFFSH,
0988 LM90_REG_REMOTE_OFFSL, false);
0989 if (val < 0)
0990 return val;
0991 data->temp[REMOTE_OFFSET] = val;
0992 }
0993
0994 if (data->flags & LM90_HAVE_EMERGENCY) {
0995 val = lm90_read_reg(client, MAX6659_REG_LOCAL_EMERG);
0996 if (val < 0)
0997 return val;
0998 data->temp[LOCAL_EMERG] = val << 8;
0999
1000 val = lm90_read_reg(client, MAX6659_REG_REMOTE_EMERG);
1001 if (val < 0)
1002 return val;
1003 data->temp[REMOTE_EMERG] = val << 8;
1004 }
1005
1006 if (data->flags & LM90_HAVE_TEMP3) {
1007 val = lm90_select_remote_channel(data, true);
1008 if (val < 0)
1009 return val;
1010
1011 val = lm90_read_reg(client, LM90_REG_REMOTE_CRIT);
1012 if (val < 0)
1013 return val;
1014 data->temp[REMOTE2_CRIT] = val << 8;
1015
1016 if (data->flags & LM90_HAVE_EMERGENCY) {
1017 val = lm90_read_reg(client, MAX6659_REG_REMOTE_EMERG);
1018 if (val < 0)
1019 return val;
1020 data->temp[REMOTE2_EMERG] = val << 8;
1021 }
1022
1023 val = lm90_read_reg(client, LM90_REG_REMOTE_LOWH);
1024 if (val < 0)
1025 return val;
1026 data->temp[REMOTE2_LOW] = val << 8;
1027
1028 val = lm90_read_reg(client, LM90_REG_REMOTE_HIGHH);
1029 if (val < 0)
1030 return val;
1031 data->temp[REMOTE2_HIGH] = val << 8;
1032
1033 if (data->flags & LM90_HAVE_OFFSET) {
1034 val = lm90_read16(client, LM90_REG_REMOTE_OFFSH,
1035 LM90_REG_REMOTE_OFFSL, false);
1036 if (val < 0)
1037 return val;
1038 data->temp[REMOTE2_OFFSET] = val;
1039 }
1040
1041 lm90_select_remote_channel(data, false);
1042 }
1043
1044 return 0;
1045 }
1046
1047 static void lm90_report_alarms(struct work_struct *work)
1048 {
1049 struct lm90_data *data = container_of(work, struct lm90_data, report_work);
1050 u16 cleared_alarms, new_alarms, current_alarms;
1051 struct device *hwmon_dev = data->hwmon_dev;
1052 struct device *dev = &data->client->dev;
1053 int st, st2;
1054
1055 current_alarms = data->current_alarms;
1056 cleared_alarms = data->reported_alarms & ~current_alarms;
1057 new_alarms = current_alarms & ~data->reported_alarms;
1058
1059 if (!cleared_alarms && !new_alarms)
1060 return;
1061
1062 st = new_alarms & 0xff;
1063 st2 = new_alarms >> 8;
1064
1065 if ((st & (LM90_STATUS_LLOW | LM90_STATUS_LHIGH | LM90_STATUS_LTHRM)) ||
1066 (st2 & MAX6696_STATUS2_LOT2))
1067 dev_dbg(dev, "temp%d out of range, please check!\n", 1);
1068 if ((st & (LM90_STATUS_RLOW | LM90_STATUS_RHIGH | LM90_STATUS_RTHRM)) ||
1069 (st2 & MAX6696_STATUS2_ROT2))
1070 dev_dbg(dev, "temp%d out of range, please check!\n", 2);
1071 if (st & LM90_STATUS_ROPEN)
1072 dev_dbg(dev, "temp%d diode open, please check!\n", 2);
1073 if (st2 & (MAX6696_STATUS2_R2LOW | MAX6696_STATUS2_R2HIGH |
1074 MAX6696_STATUS2_R2THRM | MAX6696_STATUS2_R2OT2))
1075 dev_dbg(dev, "temp%d out of range, please check!\n", 3);
1076 if (st2 & MAX6696_STATUS2_R2OPEN)
1077 dev_dbg(dev, "temp%d diode open, please check!\n", 3);
1078
1079 st |= cleared_alarms & 0xff;
1080 st2 |= cleared_alarms >> 8;
1081
1082 if (st & LM90_STATUS_LLOW)
1083 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_min_alarm, 0);
1084 if (st & LM90_STATUS_RLOW)
1085 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_min_alarm, 1);
1086 if (st2 & MAX6696_STATUS2_R2LOW)
1087 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_min_alarm, 2);
1088
1089 if (st & LM90_STATUS_LHIGH)
1090 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_max_alarm, 0);
1091 if (st & LM90_STATUS_RHIGH)
1092 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_max_alarm, 1);
1093 if (st2 & MAX6696_STATUS2_R2HIGH)
1094 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_max_alarm, 2);
1095
1096 if (st & LM90_STATUS_LTHRM)
1097 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_crit_alarm, 0);
1098 if (st & LM90_STATUS_RTHRM)
1099 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_crit_alarm, 1);
1100 if (st2 & MAX6696_STATUS2_R2THRM)
1101 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_crit_alarm, 2);
1102
1103 if (st2 & MAX6696_STATUS2_LOT2)
1104 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_emergency_alarm, 0);
1105 if (st2 & MAX6696_STATUS2_ROT2)
1106 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_emergency_alarm, 1);
1107 if (st2 & MAX6696_STATUS2_R2OT2)
1108 hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_emergency_alarm, 2);
1109
1110 data->reported_alarms = current_alarms;
1111 }
1112
1113 static int lm90_update_alarms_locked(struct lm90_data *data, bool force)
1114 {
1115 if (force || !data->alarms_valid ||
1116 time_after(jiffies, data->alarms_updated + msecs_to_jiffies(data->update_interval))) {
1117 struct i2c_client *client = data->client;
1118 bool check_enable;
1119 u16 alarms;
1120 int val;
1121
1122 data->alarms_valid = false;
1123
1124 val = lm90_read_reg(client, LM90_REG_STATUS);
1125 if (val < 0)
1126 return val;
1127 alarms = val & ~LM90_STATUS_BUSY;
1128
1129 if (data->reg_status2) {
1130 val = lm90_read_reg(client, data->reg_status2);
1131 if (val < 0)
1132 return val;
1133 alarms |= val << 8;
1134 }
1135
1136
1137
1138
1139
1140
1141
1142 if (force && data->alarms_valid)
1143 data->current_alarms |= alarms;
1144 else
1145 data->current_alarms = alarms;
1146 data->alarms |= alarms;
1147
1148 check_enable = (client->irq || !(data->config_orig & 0x80)) &&
1149 (data->config & 0x80);
1150
1151 if (force || check_enable)
1152 schedule_work(&data->report_work);
1153
1154
1155
1156
1157
1158
1159 if (check_enable) {
1160 if (!(data->current_alarms & data->alert_alarms)) {
1161 dev_dbg(&client->dev, "Re-enabling ALERT#\n");
1162 lm90_update_confreg(data, data->config & ~0x80);
1163
1164
1165
1166
1167
1168
1169 cancel_delayed_work(&data->alert_work);
1170 } else {
1171 schedule_delayed_work(&data->alert_work,
1172 max_t(int, HZ, msecs_to_jiffies(data->update_interval)));
1173 }
1174 }
1175 data->alarms_updated = jiffies;
1176 data->alarms_valid = true;
1177 }
1178 return 0;
1179 }
1180
1181 static int lm90_update_alarms(struct lm90_data *data, bool force)
1182 {
1183 int err;
1184
1185 mutex_lock(&data->update_lock);
1186 err = lm90_update_alarms_locked(data, force);
1187 mutex_unlock(&data->update_lock);
1188
1189 return err;
1190 }
1191
1192 static void lm90_alert_work(struct work_struct *__work)
1193 {
1194 struct delayed_work *delayed_work = container_of(__work, struct delayed_work, work);
1195 struct lm90_data *data = container_of(delayed_work, struct lm90_data, alert_work);
1196
1197
1198 if (!(data->config & 0x80))
1199 return;
1200
1201 lm90_update_alarms(data, true);
1202 }
1203
1204 static int lm90_update_device(struct device *dev)
1205 {
1206 struct lm90_data *data = dev_get_drvdata(dev);
1207 struct i2c_client *client = data->client;
1208 unsigned long next_update;
1209 int val;
1210
1211 if (!data->valid) {
1212 val = lm90_update_limits(dev);
1213 if (val < 0)
1214 return val;
1215 }
1216
1217 next_update = data->last_updated +
1218 msecs_to_jiffies(data->update_interval);
1219 if (time_after(jiffies, next_update) || !data->valid) {
1220 dev_dbg(&client->dev, "Updating lm90 data.\n");
1221
1222 data->valid = false;
1223
1224 val = lm90_read_reg(client, LM90_REG_LOCAL_LOW);
1225 if (val < 0)
1226 return val;
1227 data->temp[LOCAL_LOW] = val << 8;
1228
1229 val = lm90_read_reg(client, LM90_REG_LOCAL_HIGH);
1230 if (val < 0)
1231 return val;
1232 data->temp[LOCAL_HIGH] = val << 8;
1233
1234 val = lm90_read16(client, LM90_REG_LOCAL_TEMP,
1235 data->reg_local_ext, true);
1236 if (val < 0)
1237 return val;
1238 data->temp[LOCAL_TEMP] = val;
1239 val = lm90_read16(client, LM90_REG_REMOTE_TEMPH,
1240 data->reg_remote_ext, true);
1241 if (val < 0)
1242 return val;
1243 data->temp[REMOTE_TEMP] = val;
1244
1245 if (data->flags & LM90_HAVE_TEMP3) {
1246 val = lm90_select_remote_channel(data, true);
1247 if (val < 0)
1248 return val;
1249
1250 val = lm90_read16(client, LM90_REG_REMOTE_TEMPH,
1251 data->reg_remote_ext, true);
1252 if (val < 0) {
1253 lm90_select_remote_channel(data, false);
1254 return val;
1255 }
1256 data->temp[REMOTE2_TEMP] = val;
1257
1258 lm90_select_remote_channel(data, false);
1259 }
1260
1261 val = lm90_update_alarms_locked(data, false);
1262 if (val < 0)
1263 return val;
1264
1265 data->last_updated = jiffies;
1266 data->valid = true;
1267 }
1268
1269 return 0;
1270 }
1271
1272
1273 static ssize_t pec_show(struct device *dev, struct device_attribute *dummy,
1274 char *buf)
1275 {
1276 struct i2c_client *client = to_i2c_client(dev);
1277
1278 return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));
1279 }
1280
1281 static ssize_t pec_store(struct device *dev, struct device_attribute *dummy,
1282 const char *buf, size_t count)
1283 {
1284 struct i2c_client *client = to_i2c_client(dev);
1285 long val;
1286 int err;
1287
1288 err = kstrtol(buf, 10, &val);
1289 if (err < 0)
1290 return err;
1291
1292 switch (val) {
1293 case 0:
1294 client->flags &= ~I2C_CLIENT_PEC;
1295 break;
1296 case 1:
1297 client->flags |= I2C_CLIENT_PEC;
1298 break;
1299 default:
1300 return -EINVAL;
1301 }
1302
1303 return count;
1304 }
1305
1306 static DEVICE_ATTR_RW(pec);
1307
1308 static int lm90_temp_get_resolution(struct lm90_data *data, int index)
1309 {
1310 switch (index) {
1311 case REMOTE_TEMP:
1312 if (data->reg_remote_ext)
1313 return data->resolution;
1314 return 8;
1315 case REMOTE_OFFSET:
1316 case REMOTE2_OFFSET:
1317 case REMOTE2_TEMP:
1318 return data->resolution;
1319 case LOCAL_TEMP:
1320 if (data->reg_local_ext)
1321 return data->resolution;
1322 return 8;
1323 case REMOTE_LOW:
1324 case REMOTE_HIGH:
1325 case REMOTE2_LOW:
1326 case REMOTE2_HIGH:
1327 if (data->flags & LM90_HAVE_REM_LIMIT_EXT)
1328 return data->resolution;
1329 return 8;
1330 default:
1331 return 8;
1332 }
1333 }
1334
1335 static int lm90_temp_from_reg(u32 flags, u16 regval, u8 resolution)
1336 {
1337 int val;
1338
1339 if (flags & LM90_HAVE_EXTENDED_TEMP)
1340 val = regval - 0x4000;
1341 else if (flags & (LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_EXT_UNSIGNED))
1342 val = regval;
1343 else
1344 val = (s16)regval;
1345
1346 return ((val >> (16 - resolution)) * 1000) >> (resolution - 8);
1347 }
1348
1349 static int lm90_get_temp(struct lm90_data *data, int index, int channel)
1350 {
1351 int temp = lm90_temp_from_reg(data->flags, data->temp[index],
1352 lm90_temp_get_resolution(data, index));
1353
1354
1355 if (data->kind == lm99 && channel)
1356 temp += 16000;
1357
1358 return temp;
1359 }
1360
1361 static u16 lm90_temp_to_reg(u32 flags, long val, u8 resolution)
1362 {
1363 int fraction = resolution > 8 ?
1364 1000 - DIV_ROUND_CLOSEST(1000, BIT(resolution - 8)) : 0;
1365
1366 if (flags & LM90_HAVE_EXTENDED_TEMP) {
1367 val = clamp_val(val, -64000, 191000 + fraction);
1368 val += 64000;
1369 } else if (flags & LM90_HAVE_EXT_UNSIGNED) {
1370 val = clamp_val(val, 0, 255000 + fraction);
1371 } else if (flags & LM90_HAVE_UNSIGNED_TEMP) {
1372 val = clamp_val(val, 0, 127000 + fraction);
1373 } else {
1374 val = clamp_val(val, -128000, 127000 + fraction);
1375 }
1376
1377 return DIV_ROUND_CLOSEST(val << (resolution - 8), 1000) << (16 - resolution);
1378 }
1379
1380 static int lm90_set_temp(struct lm90_data *data, int index, int channel, long val)
1381 {
1382 static const u8 regs[] = {
1383 [LOCAL_LOW] = LM90_REG_LOCAL_LOW,
1384 [LOCAL_HIGH] = LM90_REG_LOCAL_HIGH,
1385 [LOCAL_CRIT] = LM90_REG_LOCAL_CRIT,
1386 [REMOTE_CRIT] = LM90_REG_REMOTE_CRIT,
1387 [LOCAL_EMERG] = MAX6659_REG_LOCAL_EMERG,
1388 [REMOTE_EMERG] = MAX6659_REG_REMOTE_EMERG,
1389 [REMOTE2_CRIT] = LM90_REG_REMOTE_CRIT,
1390 [REMOTE2_EMERG] = MAX6659_REG_REMOTE_EMERG,
1391 [REMOTE_LOW] = LM90_REG_REMOTE_LOWH,
1392 [REMOTE_HIGH] = LM90_REG_REMOTE_HIGHH,
1393 [REMOTE2_LOW] = LM90_REG_REMOTE_LOWH,
1394 [REMOTE2_HIGH] = LM90_REG_REMOTE_HIGHH,
1395 };
1396 struct i2c_client *client = data->client;
1397 u8 regh = regs[index];
1398 u8 regl = 0;
1399 int err;
1400
1401 if (channel && (data->flags & LM90_HAVE_REM_LIMIT_EXT)) {
1402 if (index == REMOTE_LOW || index == REMOTE2_LOW)
1403 regl = LM90_REG_REMOTE_LOWL;
1404 else if (index == REMOTE_HIGH || index == REMOTE2_HIGH)
1405 regl = LM90_REG_REMOTE_HIGHL;
1406 }
1407
1408
1409 if (data->kind == lm99 && channel) {
1410
1411 val = max(val, -128000l);
1412 val -= 16000;
1413 }
1414
1415 data->temp[index] = lm90_temp_to_reg(data->flags, val,
1416 lm90_temp_get_resolution(data, index));
1417
1418 if (channel > 1)
1419 lm90_select_remote_channel(data, true);
1420
1421 err = lm90_write16(client, regh, regl, data->temp[index]);
1422
1423 if (channel > 1)
1424 lm90_select_remote_channel(data, false);
1425
1426 return err;
1427 }
1428
1429 static int lm90_get_temphyst(struct lm90_data *data, int index, int channel)
1430 {
1431 int temp = lm90_get_temp(data, index, channel);
1432
1433 return temp - data->temp_hyst * 1000;
1434 }
1435
1436 static int lm90_set_temphyst(struct lm90_data *data, long val)
1437 {
1438 int temp = lm90_get_temp(data, LOCAL_CRIT, 0);
1439
1440
1441 val = clamp_val(val, -128000l, 255000l);
1442 data->temp_hyst = clamp_val(DIV_ROUND_CLOSEST(temp - val, 1000), 0, 31);
1443
1444 return lm90_write_reg(data->client, LM90_REG_TCRIT_HYST, data->temp_hyst);
1445 }
1446
1447 static int lm90_get_temp_offset(struct lm90_data *data, int index)
1448 {
1449 int res = lm90_temp_get_resolution(data, index);
1450
1451 return lm90_temp_from_reg(0, data->temp[index], res);
1452 }
1453
1454 static int lm90_set_temp_offset(struct lm90_data *data, int index, int channel, long val)
1455 {
1456 int err;
1457
1458 val = lm90_temp_to_reg(0, val, lm90_temp_get_resolution(data, index));
1459
1460
1461 if (channel > 1)
1462 lm90_select_remote_channel(data, true);
1463
1464 err = lm90_write16(data->client, LM90_REG_REMOTE_OFFSH, LM90_REG_REMOTE_OFFSL, val);
1465
1466 if (channel > 1)
1467 lm90_select_remote_channel(data, false);
1468
1469 if (err)
1470 return err;
1471
1472 data->temp[index] = val;
1473
1474 return 0;
1475 }
1476
1477 static const u8 lm90_temp_index[MAX_CHANNELS] = {
1478 LOCAL_TEMP, REMOTE_TEMP, REMOTE2_TEMP
1479 };
1480
1481 static const u8 lm90_temp_min_index[MAX_CHANNELS] = {
1482 LOCAL_LOW, REMOTE_LOW, REMOTE2_LOW
1483 };
1484
1485 static const u8 lm90_temp_max_index[MAX_CHANNELS] = {
1486 LOCAL_HIGH, REMOTE_HIGH, REMOTE2_HIGH
1487 };
1488
1489 static const u8 lm90_temp_crit_index[MAX_CHANNELS] = {
1490 LOCAL_CRIT, REMOTE_CRIT, REMOTE2_CRIT
1491 };
1492
1493 static const u8 lm90_temp_emerg_index[MAX_CHANNELS] = {
1494 LOCAL_EMERG, REMOTE_EMERG, REMOTE2_EMERG
1495 };
1496
1497 static const s8 lm90_temp_offset_index[MAX_CHANNELS] = {
1498 -1, REMOTE_OFFSET, REMOTE2_OFFSET
1499 };
1500
1501 static const u16 lm90_min_alarm_bits[MAX_CHANNELS] = { BIT(5), BIT(3), BIT(11) };
1502 static const u16 lm90_max_alarm_bits[MAX_CHANNELS] = { BIT(6), BIT(4), BIT(12) };
1503 static const u16 lm90_crit_alarm_bits[MAX_CHANNELS] = { BIT(0), BIT(1), BIT(9) };
1504 static const u16 lm90_crit_alarm_bits_swapped[MAX_CHANNELS] = { BIT(1), BIT(0), BIT(9) };
1505 static const u16 lm90_emergency_alarm_bits[MAX_CHANNELS] = { BIT(15), BIT(13), BIT(14) };
1506 static const u16 lm90_fault_bits[MAX_CHANNELS] = { BIT(0), BIT(2), BIT(10) };
1507
1508 static int lm90_temp_read(struct device *dev, u32 attr, int channel, long *val)
1509 {
1510 struct lm90_data *data = dev_get_drvdata(dev);
1511 int err;
1512 u16 bit;
1513
1514 mutex_lock(&data->update_lock);
1515 err = lm90_update_device(dev);
1516 mutex_unlock(&data->update_lock);
1517 if (err)
1518 return err;
1519
1520 switch (attr) {
1521 case hwmon_temp_input:
1522 *val = lm90_get_temp(data, lm90_temp_index[channel], channel);
1523 break;
1524 case hwmon_temp_min_alarm:
1525 case hwmon_temp_max_alarm:
1526 case hwmon_temp_crit_alarm:
1527 case hwmon_temp_emergency_alarm:
1528 case hwmon_temp_fault:
1529 switch (attr) {
1530 case hwmon_temp_min_alarm:
1531 bit = lm90_min_alarm_bits[channel];
1532 break;
1533 case hwmon_temp_max_alarm:
1534 bit = lm90_max_alarm_bits[channel];
1535 break;
1536 case hwmon_temp_crit_alarm:
1537 if (data->flags & LM90_HAVE_CRIT_ALRM_SWP)
1538 bit = lm90_crit_alarm_bits_swapped[channel];
1539 else
1540 bit = lm90_crit_alarm_bits[channel];
1541 break;
1542 case hwmon_temp_emergency_alarm:
1543 bit = lm90_emergency_alarm_bits[channel];
1544 break;
1545 case hwmon_temp_fault:
1546 bit = lm90_fault_bits[channel];
1547 break;
1548 }
1549 *val = !!(data->alarms & bit);
1550 data->alarms &= ~bit;
1551 data->alarms |= data->current_alarms;
1552 break;
1553 case hwmon_temp_min:
1554 *val = lm90_get_temp(data, lm90_temp_min_index[channel], channel);
1555 break;
1556 case hwmon_temp_max:
1557 *val = lm90_get_temp(data, lm90_temp_max_index[channel], channel);
1558 break;
1559 case hwmon_temp_crit:
1560 *val = lm90_get_temp(data, lm90_temp_crit_index[channel], channel);
1561 break;
1562 case hwmon_temp_crit_hyst:
1563 *val = lm90_get_temphyst(data, lm90_temp_crit_index[channel], channel);
1564 break;
1565 case hwmon_temp_emergency:
1566 *val = lm90_get_temp(data, lm90_temp_emerg_index[channel], channel);
1567 break;
1568 case hwmon_temp_emergency_hyst:
1569 *val = lm90_get_temphyst(data, lm90_temp_emerg_index[channel], channel);
1570 break;
1571 case hwmon_temp_offset:
1572 *val = lm90_get_temp_offset(data, lm90_temp_offset_index[channel]);
1573 break;
1574 default:
1575 return -EOPNOTSUPP;
1576 }
1577 return 0;
1578 }
1579
1580 static int lm90_temp_write(struct device *dev, u32 attr, int channel, long val)
1581 {
1582 struct lm90_data *data = dev_get_drvdata(dev);
1583 int err;
1584
1585 mutex_lock(&data->update_lock);
1586
1587 err = lm90_update_device(dev);
1588 if (err)
1589 goto error;
1590
1591 switch (attr) {
1592 case hwmon_temp_min:
1593 err = lm90_set_temp(data, lm90_temp_min_index[channel],
1594 channel, val);
1595 break;
1596 case hwmon_temp_max:
1597 err = lm90_set_temp(data, lm90_temp_max_index[channel],
1598 channel, val);
1599 break;
1600 case hwmon_temp_crit:
1601 err = lm90_set_temp(data, lm90_temp_crit_index[channel],
1602 channel, val);
1603 break;
1604 case hwmon_temp_crit_hyst:
1605 err = lm90_set_temphyst(data, val);
1606 break;
1607 case hwmon_temp_emergency:
1608 err = lm90_set_temp(data, lm90_temp_emerg_index[channel],
1609 channel, val);
1610 break;
1611 case hwmon_temp_offset:
1612 err = lm90_set_temp_offset(data, lm90_temp_offset_index[channel],
1613 channel, val);
1614 break;
1615 default:
1616 err = -EOPNOTSUPP;
1617 break;
1618 }
1619 error:
1620 mutex_unlock(&data->update_lock);
1621
1622 return err;
1623 }
1624
1625 static umode_t lm90_temp_is_visible(const void *data, u32 attr, int channel)
1626 {
1627 switch (attr) {
1628 case hwmon_temp_input:
1629 case hwmon_temp_min_alarm:
1630 case hwmon_temp_max_alarm:
1631 case hwmon_temp_crit_alarm:
1632 case hwmon_temp_emergency_alarm:
1633 case hwmon_temp_emergency_hyst:
1634 case hwmon_temp_fault:
1635 case hwmon_temp_label:
1636 return 0444;
1637 case hwmon_temp_min:
1638 case hwmon_temp_max:
1639 case hwmon_temp_crit:
1640 case hwmon_temp_emergency:
1641 case hwmon_temp_offset:
1642 return 0644;
1643 case hwmon_temp_crit_hyst:
1644 if (channel == 0)
1645 return 0644;
1646 return 0444;
1647 default:
1648 return 0;
1649 }
1650 }
1651
1652 static int lm90_chip_read(struct device *dev, u32 attr, int channel, long *val)
1653 {
1654 struct lm90_data *data = dev_get_drvdata(dev);
1655 int err;
1656
1657 mutex_lock(&data->update_lock);
1658 err = lm90_update_device(dev);
1659 mutex_unlock(&data->update_lock);
1660 if (err)
1661 return err;
1662
1663 switch (attr) {
1664 case hwmon_chip_update_interval:
1665 *val = data->update_interval;
1666 break;
1667 case hwmon_chip_alarms:
1668 *val = data->alarms;
1669 break;
1670 case hwmon_chip_temp_samples:
1671 if (data->faultqueue_mask) {
1672 *val = (data->config & data->faultqueue_mask) ?
1673 data->faultqueue_depth : 1;
1674 } else {
1675 switch (data->conalert & 0x0e) {
1676 case 0x0:
1677 default:
1678 *val = 1;
1679 break;
1680 case 0x2:
1681 *val = 2;
1682 break;
1683 case 0x6:
1684 *val = 3;
1685 break;
1686 case 0xe:
1687 *val = 4;
1688 break;
1689 }
1690 }
1691 break;
1692 default:
1693 return -EOPNOTSUPP;
1694 }
1695
1696 return 0;
1697 }
1698
1699 static int lm90_chip_write(struct device *dev, u32 attr, int channel, long val)
1700 {
1701 struct lm90_data *data = dev_get_drvdata(dev);
1702 struct i2c_client *client = data->client;
1703 int err;
1704
1705 mutex_lock(&data->update_lock);
1706
1707 err = lm90_update_device(dev);
1708 if (err)
1709 goto error;
1710
1711 switch (attr) {
1712 case hwmon_chip_update_interval:
1713 err = lm90_set_convrate(client, data,
1714 clamp_val(val, 0, 100000));
1715 break;
1716 case hwmon_chip_temp_samples:
1717 err = lm90_set_faultqueue(client, data, clamp_val(val, 1, 4));
1718 break;
1719 default:
1720 err = -EOPNOTSUPP;
1721 break;
1722 }
1723 error:
1724 mutex_unlock(&data->update_lock);
1725
1726 return err;
1727 }
1728
1729 static umode_t lm90_chip_is_visible(const void *data, u32 attr, int channel)
1730 {
1731 switch (attr) {
1732 case hwmon_chip_update_interval:
1733 case hwmon_chip_temp_samples:
1734 return 0644;
1735 case hwmon_chip_alarms:
1736 return 0444;
1737 default:
1738 return 0;
1739 }
1740 }
1741
1742 static int lm90_read(struct device *dev, enum hwmon_sensor_types type,
1743 u32 attr, int channel, long *val)
1744 {
1745 switch (type) {
1746 case hwmon_chip:
1747 return lm90_chip_read(dev, attr, channel, val);
1748 case hwmon_temp:
1749 return lm90_temp_read(dev, attr, channel, val);
1750 default:
1751 return -EOPNOTSUPP;
1752 }
1753 }
1754
1755 static int lm90_read_string(struct device *dev, enum hwmon_sensor_types type,
1756 u32 attr, int channel, const char **str)
1757 {
1758 struct lm90_data *data = dev_get_drvdata(dev);
1759
1760 *str = data->channel_label[channel];
1761
1762 return 0;
1763 }
1764
1765 static int lm90_write(struct device *dev, enum hwmon_sensor_types type,
1766 u32 attr, int channel, long val)
1767 {
1768 switch (type) {
1769 case hwmon_chip:
1770 return lm90_chip_write(dev, attr, channel, val);
1771 case hwmon_temp:
1772 return lm90_temp_write(dev, attr, channel, val);
1773 default:
1774 return -EOPNOTSUPP;
1775 }
1776 }
1777
1778 static umode_t lm90_is_visible(const void *data, enum hwmon_sensor_types type,
1779 u32 attr, int channel)
1780 {
1781 switch (type) {
1782 case hwmon_chip:
1783 return lm90_chip_is_visible(data, attr, channel);
1784 case hwmon_temp:
1785 return lm90_temp_is_visible(data, attr, channel);
1786 default:
1787 return 0;
1788 }
1789 }
1790
1791 static const char *lm90_detect_lm84(struct i2c_client *client)
1792 {
1793 static const u8 regs[] = {
1794 LM90_REG_STATUS, LM90_REG_LOCAL_TEMP, LM90_REG_LOCAL_HIGH,
1795 LM90_REG_REMOTE_TEMPH, LM90_REG_REMOTE_HIGHH
1796 };
1797 int status = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
1798 int reg1, reg2, reg3, reg4;
1799 bool nonzero = false;
1800 u8 ff = 0xff;
1801 int i;
1802
1803 if (status < 0 || (status & 0xab))
1804 return NULL;
1805
1806
1807
1808
1809
1810
1811 for (i = 0; i < ARRAY_SIZE(regs); i++) {
1812 reg1 = i2c_smbus_read_byte_data(client, regs[i]);
1813 reg2 = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL);
1814 reg3 = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW);
1815 reg4 = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH);
1816
1817 if (reg1 < 0)
1818 return NULL;
1819
1820
1821 if (reg2 != reg1 || reg3 != reg1 || reg4 != reg1)
1822 return NULL;
1823
1824 nonzero |= reg1 || reg2 || reg3 || reg4;
1825 ff &= reg1;
1826 }
1827
1828
1829
1830
1831 return nonzero && ff != 0xff ? "lm84" : NULL;
1832 }
1833
1834 static const char *lm90_detect_max1617(struct i2c_client *client, int config1)
1835 {
1836 int status = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
1837 int llo, rlo, lhi, rhi;
1838
1839 if (status < 0 || (status & 0x03))
1840 return NULL;
1841
1842 if (config1 & 0x3f)
1843 return NULL;
1844
1845
1846
1847
1848
1849
1850
1851 if (i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL) != 0xff ||
1852 i2c_smbus_read_byte_data(client, MAX6657_REG_LOCAL_TEMPL) != 0xff ||
1853 i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWL) != 0xff ||
1854 i2c_smbus_read_byte(client) != 0xff)
1855 return NULL;
1856
1857 llo = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW);
1858 rlo = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH);
1859
1860 lhi = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_HIGH);
1861 rhi = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_HIGHH);
1862
1863 if (llo < 0 || rlo < 0)
1864 return NULL;
1865
1866
1867
1868
1869
1870 if (i2c_smbus_read_byte(client) != rhi)
1871 return NULL;
1872
1873
1874
1875
1876
1877
1878
1879 if ((s8)lhi < 0 || (s8)rhi < 0)
1880 return NULL;
1881
1882
1883 if ((s8)llo >= lhi || (s8)rlo >= rhi)
1884 return NULL;
1885
1886 if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
1887
1888
1889
1890 if (i2c_smbus_read_word_data(client, LM90_REG_REMOTE_TEMPL) !=
1891 0xffff)
1892 return NULL;
1893 if (i2c_smbus_read_word_data(client, LM90_REG_CONFIG1) !=
1894 (config1 | 0xff00))
1895 return NULL;
1896 if (i2c_smbus_read_word_data(client, LM90_REG_LOCAL_HIGH) !=
1897 (lhi | 0xff00))
1898 return NULL;
1899 }
1900
1901 return "max1617";
1902 }
1903
1904 static const char *lm90_detect_national(struct i2c_client *client, int chip_id,
1905 int config1, int convrate)
1906 {
1907 int config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
1908 int address = client->addr;
1909 const char *name = NULL;
1910
1911 if (config2 < 0)
1912 return NULL;
1913
1914 if ((config1 & 0x2a) || (config2 & 0xf8) || convrate > 0x09)
1915 return NULL;
1916
1917 if (address != 0x4c && address != 0x4d)
1918 return NULL;
1919
1920 switch (chip_id & 0xf0) {
1921 case 0x10:
1922 if (address == 0x4c)
1923 name = "lm86";
1924 break;
1925 case 0x20:
1926 if (address == 0x4c)
1927 name = "lm90";
1928 break;
1929 case 0x30:
1930 name = "lm99";
1931 break;
1932 default:
1933 break;
1934 }
1935
1936 return name;
1937 }
1938
1939 static const char *lm90_detect_on(struct i2c_client *client, int chip_id, int config1,
1940 int convrate)
1941 {
1942 int address = client->addr;
1943 const char *name = NULL;
1944
1945 switch (chip_id) {
1946 case 0xca:
1947 if ((address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
1948 convrate <= 0x0a)
1949 name = "nct218";
1950 break;
1951 default:
1952 break;
1953 }
1954 return name;
1955 }
1956
1957 static const char *lm90_detect_analog(struct i2c_client *client, bool common_address,
1958 int chip_id, int config1, int convrate)
1959 {
1960 int status = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
1961 int config2 = i2c_smbus_read_byte_data(client, ADT7481_REG_CONFIG2);
1962 int man_id2 = i2c_smbus_read_byte_data(client, ADT7481_REG_MAN_ID);
1963 int chip_id2 = i2c_smbus_read_byte_data(client, ADT7481_REG_CHIP_ID);
1964 int address = client->addr;
1965 const char *name = NULL;
1966
1967 if (status < 0 || config2 < 0 || man_id2 < 0 || chip_id2 < 0)
1968 return NULL;
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006 switch (chip_id) {
2007 case 0x00 ... 0x03:
2008 case 0x05 ... 0x0f:
2009 if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
2010 !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
2011 name = "adm1021";
2012 break;
2013 case 0x04:
2014 if (man_id2 == 0x41 && chip_id2 == 0x21 &&
2015 (address == 0x4c || address == 0x4d) &&
2016 (config1 & 0x0b) == 0x08 && convrate <= 0x0a)
2017 name = "adt7421";
2018 break;
2019 case 0x30 ... 0x38:
2020 case 0x3a ... 0x3e:
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034 if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
2035 !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
2036 name = "adm1023";
2037 break;
2038 case 0x39:
2039 if (man_id2 == 0x00 && chip_id2 == 0x00 &&
2040 (address == 0x4c || address == 0x4d || address == 0x4e) &&
2041 !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
2042 name = "adm1020";
2043 break;
2044 case 0x3f:
2045 if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
2046 !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
2047 name = "nct210";
2048 break;
2049 case 0x40 ... 0x4f:
2050 if (man_id2 == 0x00 && chip_id2 == 0x00 &&
2051 (address == 0x4c || address == 0x4d) && !(config1 & 0x3f) &&
2052 convrate <= 0x0a)
2053 name = "adm1032";
2054 break;
2055 case 0x51:
2056 if (man_id2 == 0x00 && chip_id2 == 0x00 &&
2057 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
2058 convrate <= 0x0a)
2059 name = "adt7461";
2060 break;
2061 case 0x54:
2062 if (man_id2 == 0x41 && chip_id2 == 0x61 &&
2063 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
2064 convrate <= 0x0a)
2065 name = "nct1008";
2066 break;
2067 case 0x55:
2068 if (man_id2 == 0x41 && chip_id2 == 0x61 &&
2069 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
2070 convrate <= 0x0a)
2071 name = "nct72";
2072 break;
2073 case 0x57:
2074 if (man_id2 == 0x41 && chip_id2 == 0x61 &&
2075 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
2076 convrate <= 0x0a)
2077 name = "adt7461a";
2078 break;
2079 case 0x5a:
2080 if (man_id2 == 0x41 && chip_id2 == 0x61 &&
2081 common_address && !(config1 & 0x1b) && convrate <= 0x0a)
2082 name = "nct214";
2083 break;
2084 case 0x62:
2085 if (man_id2 == 0x41 && chip_id2 == 0x81 &&
2086 (address == 0x4b || address == 0x4c) && !(config1 & 0x10) &&
2087 !(config2 & 0x7f) && (convrate & 0x0f) <= 0x0b) {
2088 name = "adt7481";
2089 }
2090 break;
2091 case 0x65:
2092 case 0x75:
2093 if (man_id2 == 0x41 && chip_id2 == 0x82 &&
2094 address == 0x4c && !(config1 & 0x10) && !(config2 & 0x7f) &&
2095 convrate <= 0x0a)
2096 name = "adt7482";
2097 break;
2098 case 0x94:
2099 if (man_id2 == 0x41 && chip_id2 == 0x83 &&
2100 common_address &&
2101 ((address >= 0x18 && address <= 0x1a) ||
2102 (address >= 0x29 && address <= 0x2b) ||
2103 (address >= 0x4c && address <= 0x4e)) &&
2104 !(config1 & 0x10) && !(config2 & 0x7f) && convrate <= 0x0a)
2105 name = "adt7483a";
2106 break;
2107 default:
2108 break;
2109 }
2110
2111 return name;
2112 }
2113
2114 static const char *lm90_detect_maxim(struct i2c_client *client, bool common_address,
2115 int chip_id, int config1, int convrate)
2116 {
2117 int man_id, emerg, emerg2, status2;
2118 int address = client->addr;
2119 const char *name = NULL;
2120
2121 switch (chip_id) {
2122 case 0x01:
2123 if (!common_address)
2124 break;
2125
2126
2127
2128
2129
2130
2131
2132 emerg = i2c_smbus_read_byte_data(client,
2133 MAX6659_REG_REMOTE_EMERG);
2134 man_id = i2c_smbus_read_byte_data(client,
2135 LM90_REG_MAN_ID);
2136 emerg2 = i2c_smbus_read_byte_data(client,
2137 MAX6659_REG_REMOTE_EMERG);
2138 status2 = i2c_smbus_read_byte_data(client,
2139 MAX6696_REG_STATUS2);
2140 if (emerg < 0 || man_id < 0 || emerg2 < 0 || status2 < 0)
2141 return NULL;
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154 if (!(config1 & 0x10) && !(status2 & 0x01) && emerg == emerg2 &&
2155 convrate <= 0x07)
2156 name = "max6696";
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166 else if (!(config1 & 0x03) && convrate <= 0x07 &&
2167 emerg2 == man_id && emerg2 != status2)
2168 name = "max6680";
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181 else if (!(config1 & 0x03f) && convrate <= 0x07 &&
2182 emerg == 0x01 && emerg2 == 0x01 && status2 == 0x01)
2183 name = "max1617";
2184 break;
2185 case 0x08:
2186
2187
2188
2189
2190
2191 if (common_address && !(config1 & 0x07) && convrate <= 0x07)
2192 name = "max6654";
2193 break;
2194 case 0x09:
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204 if (common_address && !(config1 & 0x07) && convrate <= 0x07)
2205 name = "max6690";
2206 break;
2207 case 0x4d:
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226 if (address >= 0x48 && address <= 0x4f && config1 == convrate &&
2227 !(config1 & 0x0f)) {
2228 int regval;
2229
2230
2231
2232
2233
2234
2235
2236
2237 if (i2c_smbus_read_byte_data(client, LM90_REG_MAN_ID) != 0x4d)
2238 break;
2239
2240
2241 if (i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE) != 0x4d ||
2242 i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW) != 0x4d ||
2243 i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH) != 0x4d)
2244 break;
2245
2246
2247 regval = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
2248 if (regval < 0 || (regval & 0x2b))
2249 break;
2250
2251
2252 if (i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE) != regval ||
2253 i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW) != regval ||
2254 i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH) != regval)
2255 break;
2256
2257 name = "max6642";
2258 } else if ((address == 0x4c || address == 0x4d || address == 0x4e) &&
2259 (config1 & 0x1f) == 0x0d && convrate <= 0x09) {
2260 if (address == 0x4c)
2261 name = "max6657";
2262 else
2263 name = "max6659";
2264 }
2265 break;
2266 case 0x59:
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281 if (!(config1 & 0x3f) && convrate <= 0x07) {
2282 int temp;
2283
2284 switch (address) {
2285 case 0x4c:
2286
2287
2288
2289
2290
2291 temp = i2c_smbus_read_byte_data(client,
2292 LM90_REG_REMOTE_TEMPH);
2293 if (temp == 0x80)
2294 name = "max6648";
2295 else
2296 name = "max6649";
2297 break;
2298 case 0x4d:
2299 name = "max6646";
2300 break;
2301 case 0x4e:
2302 name = "max6647";
2303 break;
2304 default:
2305 break;
2306 }
2307 }
2308 break;
2309 default:
2310 break;
2311 }
2312
2313 return name;
2314 }
2315
2316 static const char *lm90_detect_nuvoton(struct i2c_client *client, int chip_id,
2317 int config1, int convrate)
2318 {
2319 int config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
2320 int address = client->addr;
2321 const char *name = NULL;
2322
2323 if (config2 < 0)
2324 return NULL;
2325
2326 if (address == 0x4c && !(config1 & 0x2a) && !(config2 & 0xf8)) {
2327 if (chip_id == 0x01 && convrate <= 0x09) {
2328
2329 name = "w83l771";
2330 } else if ((chip_id & 0xfe) == 0x10 && convrate <= 0x08) {
2331
2332 name = "w83l771";
2333 }
2334 }
2335 return name;
2336 }
2337
2338 static const char *lm90_detect_nxp(struct i2c_client *client, bool common_address,
2339 int chip_id, int config1, int convrate)
2340 {
2341 int address = client->addr;
2342 const char *name = NULL;
2343 int config2;
2344
2345 switch (chip_id) {
2346 case 0x00:
2347 config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
2348 if (config2 < 0)
2349 return NULL;
2350 if (address >= 0x48 && address <= 0x4f &&
2351 !(config1 & 0x2a) && !(config2 & 0xfe) && convrate <= 0x09)
2352 name = "sa56004";
2353 break;
2354 case 0x80:
2355 if (common_address && !(config1 & 0x3f) && convrate <= 0x07)
2356 name = "ne1618";
2357 break;
2358 default:
2359 break;
2360 }
2361 return name;
2362 }
2363
2364 static const char *lm90_detect_gmt(struct i2c_client *client, int chip_id,
2365 int config1, int convrate)
2366 {
2367 int address = client->addr;
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388 if ((chip_id == 0x01 || chip_id == 0x03) &&
2389 (address == 0x4c || address == 0x4d) &&
2390 !(config1 & 0x3f) && convrate <= 0x08) {
2391 int reg;
2392
2393 reg = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_OFFSL);
2394 if (reg < 0 || reg & 0x1f)
2395 return NULL;
2396 reg = i2c_smbus_read_byte_data(client, TMP451_REG_CONALERT);
2397 if (reg < 0 || reg & 0xf1)
2398 return NULL;
2399
2400 return "g781";
2401 }
2402
2403 return NULL;
2404 }
2405
2406 static const char *lm90_detect_ti49(struct i2c_client *client, bool common_address,
2407 int chip_id, int config1, int convrate)
2408 {
2409 if (common_address && chip_id == 0x00 && !(config1 & 0x3f) && !(convrate & 0xf8)) {
2410
2411 if (i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL) == 0xff &&
2412 i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_CRIT) == 0xff)
2413 return "thmc10";
2414 }
2415 return NULL;
2416 }
2417
2418 static const char *lm90_detect_ti(struct i2c_client *client, int chip_id,
2419 int config1, int convrate)
2420 {
2421 int address = client->addr;
2422 const char *name = NULL;
2423
2424 if (chip_id == 0x00 && !(config1 & 0x1b) && convrate <= 0x09) {
2425 int local_ext, conalert, chen, dfc;
2426
2427 local_ext = i2c_smbus_read_byte_data(client,
2428 TMP451_REG_LOCAL_TEMPL);
2429 conalert = i2c_smbus_read_byte_data(client,
2430 TMP451_REG_CONALERT);
2431 chen = i2c_smbus_read_byte_data(client, TMP461_REG_CHEN);
2432 dfc = i2c_smbus_read_byte_data(client, TMP461_REG_DFC);
2433
2434 if (!(local_ext & 0x0f) && (conalert & 0xf1) == 0x01 &&
2435 (chen & 0xfc) == 0x00 && (dfc & 0xfc) == 0x00) {
2436 if (address == 0x4c && !(chen & 0x03))
2437 name = "tmp451";
2438 else if (address >= 0x48 && address <= 0x4f)
2439 name = "tmp461";
2440 }
2441 }
2442
2443 return name;
2444 }
2445
2446
2447 static int lm90_detect(struct i2c_client *client, struct i2c_board_info *info)
2448 {
2449 struct i2c_adapter *adapter = client->adapter;
2450 int man_id, chip_id, config1, convrate, lhigh;
2451 const char *name = NULL;
2452 int address = client->addr;
2453 bool common_address =
2454 (address >= 0x18 && address <= 0x1a) ||
2455 (address >= 0x29 && address <= 0x2b) ||
2456 (address >= 0x4c && address <= 0x4e);
2457
2458 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
2459 return -ENODEV;
2460
2461
2462
2463
2464
2465 lhigh = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_HIGH);
2466
2467
2468 man_id = i2c_smbus_read_byte_data(client, LM90_REG_MAN_ID);
2469 chip_id = i2c_smbus_read_byte_data(client, LM90_REG_CHIP_ID);
2470 config1 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG1);
2471 convrate = i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE);
2472 if (man_id < 0 || chip_id < 0 || config1 < 0 || convrate < 0 || lhigh < 0)
2473 return -ENODEV;
2474
2475
2476 if (lhigh == man_id && lhigh == chip_id && lhigh == config1 && lhigh == convrate)
2477 return -ENODEV;
2478
2479
2480
2481
2482
2483
2484 if (man_id == lhigh && chip_id == lhigh) {
2485 convrate = i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE);
2486 man_id = i2c_smbus_read_byte_data(client, LM90_REG_MAN_ID);
2487 chip_id = i2c_smbus_read_byte_data(client, LM90_REG_CHIP_ID);
2488 if (convrate < 0 || man_id < 0 || chip_id < 0)
2489 return -ENODEV;
2490 if (man_id == convrate && chip_id == convrate)
2491 man_id = -1;
2492 }
2493 switch (man_id) {
2494 case -1:
2495 if (common_address && !convrate && !(config1 & 0x7f))
2496 name = lm90_detect_lm84(client);
2497 break;
2498 case 0x01:
2499 name = lm90_detect_national(client, chip_id, config1, convrate);
2500 break;
2501 case 0x1a:
2502 name = lm90_detect_on(client, chip_id, config1, convrate);
2503 break;
2504 case 0x23:
2505 if (common_address && !(config1 & 0x3f) && !(convrate & 0xf8))
2506 name = "gl523sm";
2507 break;
2508 case 0x41:
2509 name = lm90_detect_analog(client, common_address, chip_id, config1,
2510 convrate);
2511 break;
2512 case 0x47:
2513 name = lm90_detect_gmt(client, chip_id, config1, convrate);
2514 break;
2515 case 0x49:
2516 name = lm90_detect_ti49(client, common_address, chip_id, config1, convrate);
2517 break;
2518 case 0x4d:
2519 name = lm90_detect_maxim(client, common_address, chip_id,
2520 config1, convrate);
2521 break;
2522 case 0x54:
2523 if (common_address && !(config1 & 0x3f) && !(convrate & 0xf8))
2524 name = "mc1066";
2525 break;
2526 case 0x55:
2527 name = lm90_detect_ti(client, chip_id, config1, convrate);
2528 break;
2529 case 0x5c:
2530 name = lm90_detect_nuvoton(client, chip_id, config1, convrate);
2531 break;
2532 case 0xa1:
2533 name = lm90_detect_nxp(client, common_address, chip_id, config1, convrate);
2534 break;
2535 case 0xff:
2536 if (common_address && chip_id == 0xff && convrate < 8)
2537 name = lm90_detect_max1617(client, config1);
2538 break;
2539 default:
2540 break;
2541 }
2542
2543 if (!name) {
2544 dev_dbg(&adapter->dev,
2545 "Unsupported chip at 0x%02x (man_id=0x%02X, chip_id=0x%02X)\n",
2546 client->addr, man_id, chip_id);
2547 return -ENODEV;
2548 }
2549
2550 strlcpy(info->type, name, I2C_NAME_SIZE);
2551
2552 return 0;
2553 }
2554
2555 static void lm90_restore_conf(void *_data)
2556 {
2557 struct lm90_data *data = _data;
2558 struct i2c_client *client = data->client;
2559
2560 cancel_delayed_work_sync(&data->alert_work);
2561 cancel_work_sync(&data->report_work);
2562
2563
2564 if (data->flags & LM90_HAVE_CONVRATE)
2565 lm90_write_convrate(data, data->convrate_orig);
2566 lm90_write_reg(client, LM90_REG_CONFIG1, data->config_orig);
2567 }
2568
2569 static int lm90_init_client(struct i2c_client *client, struct lm90_data *data)
2570 {
2571 struct device_node *np = client->dev.of_node;
2572 int config, convrate;
2573
2574 if (data->flags & LM90_HAVE_CONVRATE) {
2575 convrate = lm90_read_reg(client, LM90_REG_CONVRATE);
2576 if (convrate < 0)
2577 return convrate;
2578 data->convrate_orig = convrate;
2579 lm90_set_convrate(client, data, 500);
2580 } else {
2581 data->update_interval = 500;
2582 }
2583
2584
2585
2586
2587 config = lm90_read_reg(client, LM90_REG_CONFIG1);
2588 if (config < 0)
2589 return config;
2590 data->config_orig = config;
2591 data->config = config;
2592
2593
2594 if (data->flags & LM90_HAVE_EXTENDED_TEMP) {
2595 if (of_property_read_bool(np, "ti,extended-range-enable"))
2596 config |= 0x04;
2597 if (!(config & 0x04))
2598 data->flags &= ~LM90_HAVE_EXTENDED_TEMP;
2599 }
2600
2601
2602
2603
2604
2605
2606
2607
2608 if (data->kind == max6680)
2609 config |= 0x18;
2610
2611
2612
2613
2614
2615
2616
2617 if (data->kind == max6654)
2618 config |= 0x20;
2619
2620
2621
2622
2623 if (data->flags & LM90_HAVE_TEMP3)
2624 config &= ~0x08;
2625
2626
2627
2628
2629
2630 if (client->irq)
2631 config &= ~0x80;
2632
2633 config &= 0xBF;
2634 lm90_update_confreg(data, config);
2635
2636 return devm_add_action_or_reset(&client->dev, lm90_restore_conf, data);
2637 }
2638
2639 static bool lm90_is_tripped(struct i2c_client *client)
2640 {
2641 struct lm90_data *data = i2c_get_clientdata(client);
2642 int ret;
2643
2644 ret = lm90_update_alarms(data, true);
2645 if (ret < 0)
2646 return false;
2647
2648 return !!data->current_alarms;
2649 }
2650
2651 static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
2652 {
2653 struct i2c_client *client = dev_id;
2654
2655 if (lm90_is_tripped(client))
2656 return IRQ_HANDLED;
2657 else
2658 return IRQ_NONE;
2659 }
2660
2661 static void lm90_remove_pec(void *dev)
2662 {
2663 device_remove_file(dev, &dev_attr_pec);
2664 }
2665
2666 static void lm90_regulator_disable(void *regulator)
2667 {
2668 regulator_disable(regulator);
2669 }
2670
2671 static int lm90_probe_channel_from_dt(struct i2c_client *client,
2672 struct device_node *child,
2673 struct lm90_data *data)
2674 {
2675 u32 id;
2676 s32 val;
2677 int err;
2678 struct device *dev = &client->dev;
2679
2680 err = of_property_read_u32(child, "reg", &id);
2681 if (err) {
2682 dev_err(dev, "missing reg property of %pOFn\n", child);
2683 return err;
2684 }
2685
2686 if (id >= MAX_CHANNELS) {
2687 dev_err(dev, "invalid reg property value %d in %pOFn\n", id, child);
2688 return -EINVAL;
2689 }
2690
2691 err = of_property_read_string(child, "label", &data->channel_label[id]);
2692 if (err == -ENODATA || err == -EILSEQ) {
2693 dev_err(dev, "invalid label property in %pOFn\n", child);
2694 return err;
2695 }
2696
2697 if (data->channel_label[id])
2698 data->channel_config[id] |= HWMON_T_LABEL;
2699
2700 err = of_property_read_s32(child, "temperature-offset-millicelsius", &val);
2701 if (!err) {
2702 if (id == 0) {
2703 dev_err(dev, "temperature-offset-millicelsius can't be set for internal channel\n");
2704 return -EINVAL;
2705 }
2706
2707 err = lm90_set_temp_offset(data, lm90_temp_offset_index[id], id, val);
2708 if (err) {
2709 dev_err(dev, "can't set temperature offset %d for channel %d (%d)\n",
2710 val, id, err);
2711 return err;
2712 }
2713 }
2714
2715 return 0;
2716 }
2717
2718 static int lm90_parse_dt_channel_info(struct i2c_client *client,
2719 struct lm90_data *data)
2720 {
2721 int err;
2722 struct device_node *child;
2723 struct device *dev = &client->dev;
2724 const struct device_node *np = dev->of_node;
2725
2726 for_each_child_of_node(np, child) {
2727 if (strcmp(child->name, "channel"))
2728 continue;
2729
2730 err = lm90_probe_channel_from_dt(client, child, data);
2731 if (err) {
2732 of_node_put(child);
2733 return err;
2734 }
2735 }
2736
2737 return 0;
2738 }
2739
2740 static const struct hwmon_ops lm90_ops = {
2741 .is_visible = lm90_is_visible,
2742 .read = lm90_read,
2743 .read_string = lm90_read_string,
2744 .write = lm90_write,
2745 };
2746
2747 static int lm90_probe(struct i2c_client *client)
2748 {
2749 struct device *dev = &client->dev;
2750 struct i2c_adapter *adapter = client->adapter;
2751 struct hwmon_channel_info *info;
2752 struct regulator *regulator;
2753 struct device *hwmon_dev;
2754 struct lm90_data *data;
2755 int err;
2756
2757 regulator = devm_regulator_get(dev, "vcc");
2758 if (IS_ERR(regulator))
2759 return PTR_ERR(regulator);
2760
2761 err = regulator_enable(regulator);
2762 if (err < 0) {
2763 dev_err(dev, "Failed to enable regulator: %d\n", err);
2764 return err;
2765 }
2766
2767 err = devm_add_action_or_reset(dev, lm90_regulator_disable, regulator);
2768 if (err)
2769 return err;
2770
2771 data = devm_kzalloc(dev, sizeof(struct lm90_data), GFP_KERNEL);
2772 if (!data)
2773 return -ENOMEM;
2774
2775 data->client = client;
2776 i2c_set_clientdata(client, data);
2777 mutex_init(&data->update_lock);
2778 INIT_DELAYED_WORK(&data->alert_work, lm90_alert_work);
2779 INIT_WORK(&data->report_work, lm90_report_alarms);
2780
2781
2782 if (client->dev.of_node)
2783 data->kind = (enum chips)of_device_get_match_data(&client->dev);
2784 else
2785 data->kind = i2c_match_id(lm90_id, client)->driver_data;
2786
2787
2788
2789
2790
2791 data->alert_alarms = lm90_params[data->kind].alert_alarms;
2792 data->resolution = lm90_params[data->kind].resolution ? : 11;
2793
2794
2795 data->flags = lm90_params[data->kind].flags;
2796
2797 if ((data->flags & (LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC)) &&
2798 !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_PEC))
2799 data->flags &= ~(LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC);
2800
2801 if ((data->flags & LM90_HAVE_PARTIAL_PEC) &&
2802 !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
2803 data->flags &= ~LM90_HAVE_PARTIAL_PEC;
2804
2805 data->chip.ops = &lm90_ops;
2806 data->chip.info = data->info;
2807
2808 data->info[0] = &data->chip_info;
2809 info = &data->chip_info;
2810 info->type = hwmon_chip;
2811 info->config = data->chip_config;
2812
2813 data->chip_config[0] = HWMON_C_REGISTER_TZ;
2814 if (data->flags & LM90_HAVE_ALARMS)
2815 data->chip_config[0] |= HWMON_C_ALARMS;
2816 if (data->flags & LM90_HAVE_CONVRATE)
2817 data->chip_config[0] |= HWMON_C_UPDATE_INTERVAL;
2818 if (data->flags & LM90_HAVE_FAULTQUEUE)
2819 data->chip_config[0] |= HWMON_C_TEMP_SAMPLES;
2820 data->info[1] = &data->temp_info;
2821
2822 info = &data->temp_info;
2823 info->type = hwmon_temp;
2824 info->config = data->channel_config;
2825
2826 data->channel_config[0] = HWMON_T_INPUT | HWMON_T_MAX |
2827 HWMON_T_MAX_ALARM;
2828 data->channel_config[1] = HWMON_T_INPUT | HWMON_T_MAX |
2829 HWMON_T_MAX_ALARM | HWMON_T_FAULT;
2830
2831 if (data->flags & LM90_HAVE_LOW) {
2832 data->channel_config[0] |= HWMON_T_MIN | HWMON_T_MIN_ALARM;
2833 data->channel_config[1] |= HWMON_T_MIN | HWMON_T_MIN_ALARM;
2834 }
2835
2836 if (data->flags & LM90_HAVE_CRIT) {
2837 data->channel_config[0] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST;
2838 data->channel_config[1] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST;
2839 }
2840
2841 if (data->flags & LM90_HAVE_OFFSET)
2842 data->channel_config[1] |= HWMON_T_OFFSET;
2843
2844 if (data->flags & LM90_HAVE_EMERGENCY) {
2845 data->channel_config[0] |= HWMON_T_EMERGENCY |
2846 HWMON_T_EMERGENCY_HYST;
2847 data->channel_config[1] |= HWMON_T_EMERGENCY |
2848 HWMON_T_EMERGENCY_HYST;
2849 }
2850
2851 if (data->flags & LM90_HAVE_EMERGENCY_ALARM) {
2852 data->channel_config[0] |= HWMON_T_EMERGENCY_ALARM;
2853 data->channel_config[1] |= HWMON_T_EMERGENCY_ALARM;
2854 }
2855
2856 if (data->flags & LM90_HAVE_TEMP3) {
2857 data->channel_config[2] = HWMON_T_INPUT |
2858 HWMON_T_MIN | HWMON_T_MAX |
2859 HWMON_T_CRIT | HWMON_T_CRIT_HYST |
2860 HWMON_T_MIN_ALARM | HWMON_T_MAX_ALARM |
2861 HWMON_T_CRIT_ALARM | HWMON_T_FAULT;
2862 if (data->flags & LM90_HAVE_EMERGENCY) {
2863 data->channel_config[2] |= HWMON_T_EMERGENCY |
2864 HWMON_T_EMERGENCY_HYST;
2865 }
2866 if (data->flags & LM90_HAVE_EMERGENCY_ALARM)
2867 data->channel_config[2] |= HWMON_T_EMERGENCY_ALARM;
2868 if (data->flags & LM90_HAVE_OFFSET)
2869 data->channel_config[2] |= HWMON_T_OFFSET;
2870 }
2871
2872 data->faultqueue_mask = lm90_params[data->kind].faultqueue_mask;
2873 data->faultqueue_depth = lm90_params[data->kind].faultqueue_depth;
2874 data->reg_local_ext = lm90_params[data->kind].reg_local_ext;
2875 if (data->flags & LM90_HAVE_REMOTE_EXT)
2876 data->reg_remote_ext = LM90_REG_REMOTE_TEMPL;
2877 data->reg_status2 = lm90_params[data->kind].reg_status2;
2878
2879
2880 data->max_convrate = lm90_params[data->kind].max_convrate;
2881
2882
2883 if (client->dev.of_node) {
2884 err = lm90_parse_dt_channel_info(client, data);
2885 if (err)
2886 return err;
2887 }
2888
2889
2890 err = lm90_init_client(client, data);
2891 if (err < 0) {
2892 dev_err(dev, "Failed to initialize device\n");
2893 return err;
2894 }
2895
2896
2897
2898
2899
2900 if (data->flags & (LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC)) {
2901 err = device_create_file(dev, &dev_attr_pec);
2902 if (err)
2903 return err;
2904 err = devm_add_action_or_reset(dev, lm90_remove_pec, dev);
2905 if (err)
2906 return err;
2907 }
2908
2909 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
2910 data, &data->chip,
2911 NULL);
2912 if (IS_ERR(hwmon_dev))
2913 return PTR_ERR(hwmon_dev);
2914
2915 data->hwmon_dev = hwmon_dev;
2916
2917 if (client->irq) {
2918 dev_dbg(dev, "IRQ: %d\n", client->irq);
2919 err = devm_request_threaded_irq(dev, client->irq,
2920 NULL, lm90_irq_thread,
2921 IRQF_ONESHOT, "lm90", client);
2922 if (err < 0) {
2923 dev_err(dev, "cannot request IRQ %d\n", client->irq);
2924 return err;
2925 }
2926 }
2927
2928 return 0;
2929 }
2930
2931 static void lm90_alert(struct i2c_client *client, enum i2c_alert_protocol type,
2932 unsigned int flag)
2933 {
2934 if (type != I2C_PROTOCOL_SMBUS_ALERT)
2935 return;
2936
2937 if (lm90_is_tripped(client)) {
2938
2939
2940
2941
2942
2943 struct lm90_data *data = i2c_get_clientdata(client);
2944
2945 if ((data->flags & LM90_HAVE_BROKEN_ALERT) &&
2946 (data->current_alarms & data->alert_alarms)) {
2947 if (!(data->config & 0x80)) {
2948 dev_dbg(&client->dev, "Disabling ALERT#\n");
2949 lm90_update_confreg(data, data->config | 0x80);
2950 }
2951 schedule_delayed_work(&data->alert_work,
2952 max_t(int, HZ, msecs_to_jiffies(data->update_interval)));
2953 }
2954 } else {
2955 dev_dbg(&client->dev, "Everything OK\n");
2956 }
2957 }
2958
2959 static int __maybe_unused lm90_suspend(struct device *dev)
2960 {
2961 struct lm90_data *data = dev_get_drvdata(dev);
2962 struct i2c_client *client = data->client;
2963
2964 if (client->irq)
2965 disable_irq(client->irq);
2966
2967 return 0;
2968 }
2969
2970 static int __maybe_unused lm90_resume(struct device *dev)
2971 {
2972 struct lm90_data *data = dev_get_drvdata(dev);
2973 struct i2c_client *client = data->client;
2974
2975 if (client->irq)
2976 enable_irq(client->irq);
2977
2978 return 0;
2979 }
2980
2981 static SIMPLE_DEV_PM_OPS(lm90_pm_ops, lm90_suspend, lm90_resume);
2982
2983 static struct i2c_driver lm90_driver = {
2984 .class = I2C_CLASS_HWMON,
2985 .driver = {
2986 .name = "lm90",
2987 .of_match_table = of_match_ptr(lm90_of_match),
2988 .pm = &lm90_pm_ops,
2989 },
2990 .probe_new = lm90_probe,
2991 .alert = lm90_alert,
2992 .id_table = lm90_id,
2993 .detect = lm90_detect,
2994 .address_list = normal_i2c,
2995 };
2996
2997 module_i2c_driver(lm90_driver);
2998
2999 MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>");
3000 MODULE_DESCRIPTION("LM90/ADM1032 driver");
3001 MODULE_LICENSE("GPL");