Changeset 4574

Show
Ignore:
Timestamp:
07/07/07 10:09:38 (7 years ago)
Author:
khali
Message:

Add support for the EMC6D102 extra resolution bits. The chip offers
4 extra resolution bits per voltage and temperature channel, but I
chose to use only 2 bits per channel because that's what the ADM1027
has so it made the changes smaller. The EMC6D102 has a 10-bit ADC
anyway, the 2 remaining bits are obtained from averaging so they are
not so important.

Location:
lm-sensors/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/CHANGES

    r4565 r4574  
    1717  Module i2c-nforce2: Add nForce MCP61, MCP65 support (2.6 backport) 
    1818  Module lm85: Fix setting the fan speed min limit to 0 
     19               Add support for the EMC6D102 extra resolution bits 
    1920  Module thmc50: Fix the i2c address range 
    2021  Module w83627ehf: New (2.6 backport) 
     
    4445                   Add support for the w83627ehf thermal sensor types 
    4546                   Add support for it87 fan4 and fan5 
     47                   Display the extra resolution bits of the emc6d102 
    4648  Program sensors-detect: Stop Super-I/O probe after first family success 
    4749                          Fix SMSC DME1737 detection 
  • lm-sensors/trunk/kernel/chips/lm85.c

    r4573 r4574  
    165165#define EMC6D100_REG_IN_MIN(nr) (0x73 + ((nr)-5) * 2) 
    166166#define EMC6D100_REG_IN_MAX(nr) (0x74 + ((nr)-5) * 2) 
     167 
     168#define EMC6D102_REG_EXTEND_ADC1 0x85 
     169#define EMC6D102_REG_EXTEND_ADC2 0x86 
     170#define EMC6D102_REG_EXTEND_ADC3 0x87 
     171#define EMC6D102_REG_EXTEND_ADC4 0x88 
    167172 
    168173/* Conversions. Rounding and limit checking is only done on the TO_REG  
     
    11631168 
    11641169                        break ; 
     1170                case emc6d102 : 
     1171                        /* Have to read LSB bits after the MSB ones because 
     1172                           the reading of the MSB bits has frozen the 
     1173                           LSBs (backward from the ADM1027). 
     1174                           We use only two extra bits per channel, and encode 
     1175                           them in the same format the ADM1027 uses, to keep the 
     1176                           rest of the code unchanged. 
     1177                         */ 
     1178                        i = lm85_read_value(client, EMC6D102_REG_EXTEND_ADC1); 
     1179                        data->extend_adc = (i & 0xcc) << 8; /* temp3, temp1 */ 
     1180                        i = lm85_read_value(client, EMC6D102_REG_EXTEND_ADC2); 
     1181                        data->extend_adc |= (i & 0x0c) << 10; /* temp2 */ 
     1182                        data->extend_adc |= (i & 0xc0) << 2; /* in4 */ 
     1183                        i = lm85_read_value(client, EMC6D102_REG_EXTEND_ADC3); 
     1184                        data->extend_adc |= (i & 0x0c) >> 2; /* in0 */ 
     1185                        data->extend_adc |= i & 0xc0; /* in3 */ 
     1186                        i = lm85_read_value(client, EMC6D102_REG_EXTEND_ADC4); 
     1187                        data->extend_adc |= i & 0x0c; /* in1 */ 
     1188                        data->extend_adc |= (i & 0xc0) >> 2; /* in2 */ 
     1189                        break; 
    11651190                default : break ; /* no warnings */ 
    11661191                } 
  • lm-sensors/trunk/prog/sensors/chips.c

    r4565 r4574  
    15591559  double cur, min, max; 
    15601560  int alarms, alarm_mask = 0, valid; 
    1561   int is1027, is7463, is6d100; 
     1561  int is1027, is7463, is6d100, xadc; 
    15621562 
    15631563  is1027 = !strcmp(name->prefix,"adm1027") 
     
    15651565  is7463 = !strcmp(name->prefix, "adt7463"); 
    15661566  is6d100 = !strcmp(name->prefix,"emc6d100") ; 
     1567  xadc = is1027 || !strcmp(name->prefix, "emc6d102"); 
    15671568 
    15681569  if (!sensors_get_feature(*name,SENSORS_LM85_ALARMS,&cur))  
     
    15851586      print_label(label,10); 
    15861587      printf("%+7.*f V  (min = %+6.2f V, max = %+6.2f V)   %s", 
    1587            (is1027?3:2),cur,min,max,alarms&LM85_ALARM_IN0?"ALARM":""); 
     1588           (xadc?3:2),cur,min,max,alarms&LM85_ALARM_IN0?"ALARM":""); 
    15881589      if (is1027) { printf(alarm_mask&LM85_ALARM_IN0?" MASKED":""); } 
    15891590      putchar( '\n' ); 
     
    15991600      print_label(label,10); 
    16001601      printf("%+7.*f V  (min = %+6.2f V, max = %+6.2f V)   %s", 
    1601            (is1027?3:2),cur,min,max,alarms&LM85_ALARM_IN1?"ALARM":""); 
     1602           (xadc?3:2),cur,min,max,alarms&LM85_ALARM_IN1?"ALARM":""); 
    16021603      if (is1027) { printf(alarm_mask&LM85_ALARM_IN1?" MASKED":""); } 
    16031604      putchar( '\n' ); 
     
    16131614      print_label(label,10); 
    16141615      printf("%+7.*f V  (min = %+6.2f V, max = %+6.2f V)   %s", 
    1615            (is1027?3:2),cur,min,max,alarms&LM85_ALARM_IN2?"ALARM":""); 
     1616           (xadc?3:2),cur,min,max,alarms&LM85_ALARM_IN2?"ALARM":""); 
    16161617      if (is1027) { printf(alarm_mask&LM85_ALARM_IN2?" MASKED":""); } 
    16171618      putchar( '\n' ); 
     
    16271628      print_label(label,10); 
    16281629      printf("%+7.*f V  (min = %+6.2f V, max = %+6.2f V)   %s", 
    1629            (is1027?3:2),cur,min,max,alarms&LM85_ALARM_IN3?"ALARM":""); 
     1630           (xadc?3:2),cur,min,max,alarms&LM85_ALARM_IN3?"ALARM":""); 
    16301631      if (is1027) { printf(alarm_mask&LM85_ALARM_IN3?" MASKED":""); } 
    16311632      putchar( '\n' ); 
     
    16411642      print_label(label,10); 
    16421643      printf("%+7.*f V  (min = %+6.2f V, max = %+6.2f V)   %s", 
    1643            (is1027?3:2),cur,min,max,alarms&LM85_ALARM_IN4?"ALARM":""); 
     1644           (xadc?3:2),cur,min,max,alarms&LM85_ALARM_IN4?"ALARM":""); 
    16441645      if (is1027) { printf(alarm_mask&LM85_ALARM_IN4?" MASKED":""); } 
    16451646      putchar( '\n' ); 
     
    17471748    if (valid) { 
    17481749      print_label(label,10); 
    1749       print_temp_info( cur, max, min, MINMAX, (is1027 ? 2 : 0), 0); 
     1750      print_temp_info( cur, max, min, MINMAX, (xadc ? 2 : 0), 0); 
    17501751      printf( "   %s %s %s\n", 
    17511752                 alarms&LM85_ALARM_TEMP1?"ALARM":"", 
     
    17631764    if (valid) { 
    17641765      print_label(label,10); 
    1765       print_temp_info( cur, max, min, MINMAX, (is1027 ? 2 : 0), 0); 
     1766      print_temp_info( cur, max, min, MINMAX, (xadc ? 2 : 0), 0); 
    17661767      printf( "   %s %s\n", 
    17671768                 alarms&LM85_ALARM_TEMP2?"ALARM":"", 
     
    17781779    if (valid) { 
    17791780      print_label(label,10); 
    1780       print_temp_info( cur, max, min, MINMAX, (is1027 ? 2 : 0), 0); 
     1781      print_temp_info( cur, max, min, MINMAX, (xadc ? 2 : 0), 0); 
    17811782      printf( "   %s %s %s\n", 
    17821783                 alarms&LM85_ALARM_TEMP3?"ALARM":"",