Changeset 1987
- Timestamp:
- 08/31/03 22:45:12 (5 years ago)
- Files:
-
- lm-sensors/trunk/CHANGES (modified) (1 diff)
- lm-sensors/trunk/CONTRIBUTORS (modified) (1 diff)
- lm-sensors/trunk/README (modified) (1 diff)
- lm-sensors/trunk/doc/chips/max6650 (added)
- lm-sensors/trunk/kernel/chips/max6650.c (added)
- lm-sensors/trunk/lib/chips.c (modified) (2 diffs)
- lm-sensors/trunk/lib/chips.h (modified) (1 diff)
- lm-sensors/trunk/prog/detect/sensors-detect (modified) (3 diffs)
- lm-sensors/trunk/prog/sensors/chips.c (modified) (1 diff)
- lm-sensors/trunk/prog/sensors/chips.h (modified) (1 diff)
- lm-sensors/trunk/prog/sensors/main.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
lm-sensors/trunk/CHANGES
r1978 r1987 59 59 Module lm83: Add t_crit and alarms support 60 60 Module lm90: New 61 Module max6650: New 61 62 Module saa1064: New 62 63 Module w83781d: Enhance chip detection lm-sensors/trunk/CONTRIBUTORS
r1896 r1987 91 91 * Sascha Volkenandt <sascha@akv-soft.de> 92 92 Author of the SAA1064 chip driver. 93 * John Morris (john.morris@spirentcom.com) 94 Author of the MAX6650 chip driver. 95 lm-sensors/trunk/README
r1897 r1987 78 78 Intel Xeon processor embedded sensors 79 79 ITE IT8705F, IT8712F embedded sensors 80 Maxim MAX1617 and MAX1617A80 Maxim MAX1617, MAX1617A, MAX6650 and MAX6651 81 81 Microchip TC1068, TCM1617, TCN75 82 82 Myson MTP008 lm-sensors/trunk/lib/chips.c
r1978 r1987 4444 4444 }; 4445 4445 4446 static sensors_chip_feature max6650_features[] = 4447 { 4448 { SENSORS_MAX6650_FAN1_TACH, "fan1", SENSORS_NO_MAPPING, 4449 SENSORS_NO_MAPPING, SENSORS_MODE_R, 4450 MAX6650_SYSCTL_FAN1, VALUE(1), 0 }, 4451 { SENSORS_MAX6650_FAN2_TACH, "fan2", SENSORS_NO_MAPPING, 4452 SENSORS_NO_MAPPING, SENSORS_MODE_R, 4453 MAX6650_SYSCTL_FAN2, VALUE(1), 0 }, 4454 { SENSORS_MAX6650_FAN3_TACH, "fan3", SENSORS_NO_MAPPING, 4455 SENSORS_NO_MAPPING, SENSORS_MODE_R, 4456 MAX6650_SYSCTL_FAN3, VALUE(1), 0 }, 4457 { SENSORS_MAX6650_FAN4_TACH, "fan4", SENSORS_NO_MAPPING, 4458 SENSORS_NO_MAPPING, SENSORS_MODE_R, 4459 MAX6650_SYSCTL_FAN4, VALUE(1), 0 }, 4460 { SENSORS_MAX6650_SPEED, "speed", SENSORS_NO_MAPPING, 4461 SENSORS_NO_MAPPING, SENSORS_MODE_RW, 4462 MAX6650_SYSCTL_SPEED, VALUE(1), 0 }, 4463 }; 4464 4446 4465 sensors_chip_features sensors_chip_features_list[] = 4447 4466 { … … 4512 4531 { SENSORS_LM90_PREFIX, lm90_features }, 4513 4532 { SENSORS_XEONTEMP_PREFIX, xeontemp_features }, 4533 { SENSORS_MAX6650_PREFIX, max6650_features }, 4514 4534 { 0 } 4515 4535 }; lm-sensors/trunk/lib/chips.h
r1978 r1987 1656 1656 #define SENSORS_XEONTEMP_ALARMS 81 /* R */ 1657 1657 1658 /* MAX6650 / 1 chips */ 1659 1660 #define SENSORS_MAX6650_PREFIX "max6650" 1661 1662 #define SENSORS_MAX6650_FAN1_TACH 1 /* R */ 1663 #define SENSORS_MAX6650_FAN2_TACH 2 /* R */ 1664 #define SENSORS_MAX6650_FAN3_TACH 3 /* R */ 1665 #define SENSORS_MAX6650_FAN4_TACH 4 /* R */ 1666 #define SENSORS_MAX6650_SPEED 5 /* RW */ 1667 1658 1668 #endif /* def LIB_SENSORS_CHIPS_H */ lm-sensors/trunk/prog/detect/sensors-detect
r1982 r1987 777 777 ipmi_smic_detect via8231_isa_detect lm85_detect smartbatt_detect 778 778 adm1026_detect w83l785ts_detect lm83_detect lm90_detect 779 saa1064_detect w83l784r_detect mozart_detect );779 saa1064_detect w83l784r_detect mozart_detect max6650_detect); 780 780 781 781 # This is a list of all recognized chips. … … 1060 1060 i2c_addrs => [0x18..0x1a,0x29..0x2b,0x4c..0x4e], 1061 1061 i2c_detect => sub { adm1021_detect 3, @_ }, 1062 }, 1063 { 1064 name => "Maxim MAX6650/MAX6651", 1065 driver => "max6650", 1066 i2c_addrs => [0x1b,0x1f,0x48,0x4b], 1067 i2c_detect => sub { max6650_detect 0, @_ }, 1062 1068 }, 1063 1069 { … … 3401 3407 } 3402 3408 3409 # $_[0]: Chip to detect. Always zero for now, but available for future use 3410 # if somebody finds a way to distinguish MAX6650 and MAX6651. 3411 # $_[1]: A reference to the file descriptor to access this chip. 3412 # We may assume an i2c_set_slave_addr was already done. 3413 # $_[2]: Address 3414 # Returns: undef if not detected, 4 if detected. 3415 # 3416 # The max6650 has no device ID register. However, a few registers have 3417 # spare bits, which are documented as being always zero on read. We read 3418 # all of these registers check the spare bits. Any non-zero means this 3419 # is not a max6650/1. 3420 # 3421 # The always zero bits are: 3422 # configuration byte register (0x02) - top 2 bits 3423 # gpio status register (0x14) - top 3 bits 3424 # alarm enable register (0x08) - top 3 bits 3425 # alarm status register (0x0A) - top 3 bits 3426 # tachometer count time register (0x16) - top 6 bits 3427 sub max6650_detect 3428 { 3429 my ($chip, $file) = @_; 3430 return if i2c_smbus_read_byte_data($file,0x16) & 0xFC; 3431 return if i2c_smbus_read_byte_data($file,0x0A) & 0xE0; 3432 return if i2c_smbus_read_byte_data($file,0x08) & 0xE0; 3433 return if i2c_smbus_read_byte_data($file,0x14) & 0xE0; 3434 return if i2c_smbus_read_byte_data($file,0x02) & 0xC0; 3435 return 4; 3436 } 3403 3437 3404 3438 lm-sensors/trunk/prog/sensors/chips.c
r1978 r1987 4512 4512 } 4513 4513 4514 void print_max6650(const sensors_chip_name *name) 4515 { 4516 char *label = NULL; 4517 double tach, speed; 4518 int valid, i; 4519 4520 static const struct 4521 { 4522 int tag; 4523 char *name; 4524 } 4525 tach_list[] = 4526 { 4527 { SENSORS_MAX6650_FAN1_TACH, "FAN1" }, 4528 { SENSORS_MAX6650_FAN2_TACH, "FAN2" }, 4529 { SENSORS_MAX6650_FAN3_TACH, "FAN3" }, 4530 { SENSORS_MAX6650_FAN4_TACH, "FAN4" } 4531 }; 4532 4533 /* Display full config for fan1, which is controlled */ 4534 4535 if (!sensors_get_label_and_valid(*name,tach_list[0].tag,&label,&valid) && 4536 !sensors_get_feature(*name,tach_list[0].tag,&tach) && 4537 !sensors_get_feature(*name,SENSORS_MAX6650_SPEED,&speed)) { 4538 if (valid) { 4539 print_label(label,10); 4540 printf("configured %4.0f RPM, actual %4.0f RPM.\n", speed, tach); 4541 } 4542 } else 4543 printf("ERROR: Can't get %s data!\n", tach_list[i].name); 4544 free_the_label(&label); 4545 4546 /* Just display the measured speed for the other three, uncontrolled fans */ 4547 4548 for (i = 1; i < 4; i++) 4549 { 4550 if (!sensors_get_label_and_valid(*name,tach_list[i].tag,&label,&valid) && 4551 !sensors_get_feature(*name,tach_list[i].tag,&tach)) { 4552 if (valid) { 4553 print_label(label,10); 4554 printf("%4.0f RPM \n", tach); 4555 } 4556 } else 4557 printf("ERROR: Can't get %s data!\n", tach_list[i].name); 4558 4559 free_the_label(&label); 4560 } 4561 } 4562 4514 4563 void print_unknown_chip(const sensors_chip_name *name) 4515 4564 { lm-sensors/trunk/prog/sensors/chips.h
r1978 r1987 56 56 extern void print_lm90(const sensors_chip_name *name); 57 57 extern void print_xeontemp(const sensors_chip_name *name); 58 extern void print_max6650(const sensors_chip_name *name); 58 59 59 60 #endif /* def PROG_SENSORS_CHIPS_H */ lm-sensors/trunk/prog/sensors/main.c
r1978 r1987 381 381 else if (!strcmp(name.prefix,"xeontemp")) 382 382 print_xeontemp(&name); 383 else if (!strcmp(name.prefix,"max6650")) 384 print_max6650(&name); 383 385 else 384 386 print_unknown_chip(&name);
