35
35
* explicitly as max6659, or if its address is not 0x4c.
36
36
* These chips lack the remote temperature offset feature.
37
37
*
38
- * This driver also supports the MAX6654 chip made by Maxim. This chip can
39
- * be at 9 different addresses, similar to MAX6680/MAX6681. The MAX6654 is
40
- * otherwise similar to MAX6657/MAX6658/MAX6659. Extended range is available
41
- * by setting the configuration register accordingly, and is done during
42
- * initialization. Extended precision is only available at conversion rates
43
- * of 1 Hz and slower. Note that extended precision is not enabled by
44
- * default, as this driver initializes all chips to 2 Hz by design.
38
+ * This driver also supports the MAX6654 chip made by Maxim. This chip can be
39
+ * at 9 different addresses, similar to MAX6680/MAX6681. The MAX6654 is similar
40
+ * to MAX6657/MAX6658/MAX6659, but does not support critical temperature
41
+ * limits. Extended range is available by setting the configuration register
42
+ * accordingly, and is done during initialization. Extended precision is only
43
+ * available at conversion rates of 1 Hz and slower. Note that extended
44
+ * precision is not enabled by default, as this driver initializes all chips
45
+ * to 2 Hz by design.
45
46
*
46
47
* This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and
47
48
* MAX6692 chips made by Maxim. These are again similar to the LM86,
@@ -188,6 +189,7 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
188
189
#define LM90_HAVE_BROKEN_ALERT (1 << 7) /* Broken alert */
189
190
#define LM90_HAVE_EXTENDED_TEMP (1 << 8) /* extended temperature support*/
190
191
#define LM90_PAUSE_FOR_CONFIG (1 << 9) /* Pause conversion for config */
192
+ #define LM90_HAVE_CRIT (1 << 10)/* Chip supports CRIT/OVERT register */
191
193
192
194
/* LM90 status */
193
195
#define LM90_STATUS_LTHRM (1 << 0) /* local THERM limit tripped */
@@ -354,38 +356,43 @@ struct lm90_params {
354
356
static const struct lm90_params lm90_params [] = {
355
357
[adm1032 ] = {
356
358
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
357
- | LM90_HAVE_BROKEN_ALERT ,
359
+ | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_CRIT ,
358
360
.alert_alarms = 0x7c ,
359
361
.max_convrate = 10 ,
360
362
},
361
363
[adt7461 ] = {
362
364
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
363
- | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP ,
365
+ | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
366
+ | LM90_HAVE_CRIT ,
364
367
.alert_alarms = 0x7c ,
365
368
.max_convrate = 10 ,
366
369
},
367
370
[g781 ] = {
368
371
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
369
- | LM90_HAVE_BROKEN_ALERT ,
372
+ | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_CRIT ,
370
373
.alert_alarms = 0x7c ,
371
374
.max_convrate = 8 ,
372
375
},
373
376
[lm86 ] = {
374
- .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT ,
377
+ .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
378
+ | LM90_HAVE_CRIT ,
375
379
.alert_alarms = 0x7b ,
376
380
.max_convrate = 9 ,
377
381
},
378
382
[lm90 ] = {
379
- .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT ,
383
+ .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
384
+ | LM90_HAVE_CRIT ,
380
385
.alert_alarms = 0x7b ,
381
386
.max_convrate = 9 ,
382
387
},
383
388
[lm99 ] = {
384
- .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT ,
389
+ .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
390
+ | LM90_HAVE_CRIT ,
385
391
.alert_alarms = 0x7b ,
386
392
.max_convrate = 9 ,
387
393
},
388
394
[max6646 ] = {
395
+ .flags = LM90_HAVE_CRIT ,
389
396
.alert_alarms = 0x7c ,
390
397
.max_convrate = 6 ,
391
398
.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL ,
@@ -396,50 +403,50 @@ static const struct lm90_params lm90_params[] = {
396
403
.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL ,
397
404
},
398
405
[max6657 ] = {
399
- .flags = LM90_PAUSE_FOR_CONFIG ,
406
+ .flags = LM90_PAUSE_FOR_CONFIG | LM90_HAVE_CRIT ,
400
407
.alert_alarms = 0x7c ,
401
408
.max_convrate = 8 ,
402
409
.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL ,
403
410
},
404
411
[max6659 ] = {
405
- .flags = LM90_HAVE_EMERGENCY ,
412
+ .flags = LM90_HAVE_EMERGENCY | LM90_HAVE_CRIT ,
406
413
.alert_alarms = 0x7c ,
407
414
.max_convrate = 8 ,
408
415
.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL ,
409
416
},
410
417
[max6680 ] = {
411
- .flags = LM90_HAVE_OFFSET ,
418
+ .flags = LM90_HAVE_OFFSET | LM90_HAVE_CRIT ,
412
419
.alert_alarms = 0x7c ,
413
420
.max_convrate = 7 ,
414
421
},
415
422
[max6696 ] = {
416
423
.flags = LM90_HAVE_EMERGENCY
417
- | LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3 ,
424
+ | LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3 | LM90_HAVE_CRIT ,
418
425
.alert_alarms = 0x1c7c ,
419
426
.max_convrate = 6 ,
420
427
.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL ,
421
428
},
422
429
[w83l771 ] = {
423
- .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT ,
430
+ .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT ,
424
431
.alert_alarms = 0x7c ,
425
432
.max_convrate = 8 ,
426
433
},
427
434
[sa56004 ] = {
428
- .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT ,
435
+ .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT ,
429
436
.alert_alarms = 0x7b ,
430
437
.max_convrate = 9 ,
431
438
.reg_local_ext = SA56004_REG_R_LOCAL_TEMPL ,
432
439
},
433
440
[tmp451 ] = {
434
441
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
435
- | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP ,
442
+ | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP | LM90_HAVE_CRIT ,
436
443
.alert_alarms = 0x7c ,
437
444
.max_convrate = 9 ,
438
445
.reg_local_ext = TMP451_REG_R_LOCAL_TEMPL ,
439
446
},
440
447
[tmp461 ] = {
441
448
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
442
- | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP ,
449
+ | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP | LM90_HAVE_CRIT ,
443
450
.alert_alarms = 0x7c ,
444
451
.max_convrate = 9 ,
445
452
.reg_local_ext = TMP451_REG_R_LOCAL_TEMPL ,
@@ -668,20 +675,22 @@ static int lm90_update_limits(struct device *dev)
668
675
struct i2c_client * client = data -> client ;
669
676
int val ;
670
677
671
- val = lm90_read_reg (client , LM90_REG_R_LOCAL_CRIT );
672
- if (val < 0 )
673
- return val ;
674
- data -> temp8 [LOCAL_CRIT ] = val ;
678
+ if (data -> flags & LM90_HAVE_CRIT ) {
679
+ val = lm90_read_reg (client , LM90_REG_R_LOCAL_CRIT );
680
+ if (val < 0 )
681
+ return val ;
682
+ data -> temp8 [LOCAL_CRIT ] = val ;
675
683
676
- val = lm90_read_reg (client , LM90_REG_R_REMOTE_CRIT );
677
- if (val < 0 )
678
- return val ;
679
- data -> temp8 [REMOTE_CRIT ] = val ;
684
+ val = lm90_read_reg (client , LM90_REG_R_REMOTE_CRIT );
685
+ if (val < 0 )
686
+ return val ;
687
+ data -> temp8 [REMOTE_CRIT ] = val ;
680
688
681
- val = lm90_read_reg (client , LM90_REG_R_TCRIT_HYST );
682
- if (val < 0 )
683
- return val ;
684
- data -> temp_hyst = val ;
689
+ val = lm90_read_reg (client , LM90_REG_R_TCRIT_HYST );
690
+ if (val < 0 )
691
+ return val ;
692
+ data -> temp_hyst = val ;
693
+ }
685
694
686
695
val = lm90_read_reg (client , LM90_REG_R_REMOTE_LOWH );
687
696
if (val < 0 )
@@ -1902,11 +1911,14 @@ static int lm90_probe(struct i2c_client *client)
1902
1911
info -> config = data -> channel_config ;
1903
1912
1904
1913
data -> channel_config [0 ] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
1905
- HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
1906
- HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM ;
1914
+ HWMON_T_MIN_ALARM | HWMON_T_MAX_ALARM ;
1907
1915
data -> channel_config [1 ] = HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX |
1908
- HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_MIN_ALARM |
1909
- HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT ;
1916
+ HWMON_T_MIN_ALARM | HWMON_T_MAX_ALARM | HWMON_T_FAULT ;
1917
+
1918
+ if (data -> flags & LM90_HAVE_CRIT ) {
1919
+ data -> channel_config [0 ] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST ;
1920
+ data -> channel_config [1 ] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST ;
1921
+ }
1910
1922
1911
1923
if (data -> flags & LM90_HAVE_OFFSET )
1912
1924
data -> channel_config [1 ] |= HWMON_T_OFFSET ;
0 commit comments