Show
Ignore:
Timestamp:
11/09/01 16:58:13 (12 years ago)
Author:
knobi
Message:

(MK) Implement min/max statistics for temperatures.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/kernel/chips/fscscy.c

    r1224 r1227  
    130130#define FSCSCY_REG_TEMP0_ACT    0x64 
    131131#define FSCSCY_REG_TEMP0_STATE  0x71 
    132 #define FSCSCY_REG_TEMP0_MAX    0x76 
     132#define FSCSCY_REG_TEMP0_LIM    0x76 
    133133 
    134134/* sensor 1 */ 
    135135#define FSCSCY_REG_TEMP1_ACT    0xD0 
    136136#define FSCSCY_REG_TEMP1_STATE  0xD1 
    137 #define FSCSCY_REG_TEMP1_MAX    0xD6 
     137#define FSCSCY_REG_TEMP1_LIM    0xD6 
    138138 
    139139/* sensor 2 */ 
    140140#define FSCSCY_REG_TEMP2_ACT    0x32 
    141141#define FSCSCY_REG_TEMP2_STATE  0x81 
    142 #define FSCSCY_REG_TEMP2_MAX    0x86 
     142#define FSCSCY_REG_TEMP2_LIM    0x86 
    143143 
    144144/* sensor3 */ 
    145145#define FSCSCY_REG_TEMP3_ACT    0x35 
    146146#define FSCSCY_REG_TEMP3_STATE  0x91 
    147 #define FSCSCY_REG_TEMP3_MAX    0x96 
     147#define FSCSCY_REG_TEMP3_LIM    0x96 
    148148 
    149149/* PCI Load */ 
     
    186186        u8  volt[3];         /* 12, 5, battery current */  
    187187        u8  temp_act[4];     /* temperature */ 
    188         u8  temp_status[4];  /* status of sensor */ 
    189         u8  temp_max[4];     /* maximum of sensor */ 
     188        u8  temp_status[4];  /* status of temp. sensor */ 
     189        u8  temp_lim[4];     /* limit temperature of temp. sensor */ 
     190        u8  temp_min[4];     /* minimum of temp. sensor, this is just calculated by the module */ 
     191        u8  temp_max[4];     /* maximum of temp. sensor, this is just calculsted by the module */ 
    190192        u8  fan_act[6];      /* fans revolutions per second */ 
    191193        u8  fan_status[6];   /* fan status */ 
     
    461463        /* setup missing fan2_min value */ 
    462464        /* data->fan_min[2] = 0xff; */ 
     465 
     466        /* Initialize min/max values from chip */ 
     467        data->temp_min[0] = data->temp_max[0] = fscscy_read_value(client, FSCSCY_REG_TEMP0_ACT); 
     468        data->temp_min[1] = data->temp_max[1] = fscscy_read_value(client, FSCSCY_REG_TEMP1_ACT); 
     469        data->temp_min[2] = data->temp_max[2] = fscscy_read_value(client, FSCSCY_REG_TEMP2_ACT); 
     470        data->temp_min[3] = data->temp_max[3] = fscscy_read_value(client, FSCSCY_REG_TEMP3_ACT); 
    463471} 
    464472 
     
    476484#endif 
    477485                data->temp_act[0] = fscscy_read_value(client, FSCSCY_REG_TEMP0_ACT); 
     486                  if (data->temp_min[0] > data->temp_act[0]) data->temp_min[0] = data->temp_act[0]; 
     487                  if (data->temp_max[0] < data->temp_act[0]) data->temp_max[0] = data->temp_act[0]; 
    478488                data->temp_act[1] = fscscy_read_value(client, FSCSCY_REG_TEMP1_ACT); 
     489                  if (data->temp_min[1] > data->temp_act[1]) data->temp_min[1] = data->temp_act[1]; 
     490                  if (data->temp_max[1] < data->temp_act[1]) data->temp_max[1] = data->temp_act[1]; 
    479491                data->temp_act[2] = fscscy_read_value(client, FSCSCY_REG_TEMP2_ACT); 
     492                  if (data->temp_min[2] > data->temp_act[2]) data->temp_min[2] = data->temp_act[2]; 
     493                  if (data->temp_max[2] < data->temp_act[2]) data->temp_max[2] = data->temp_act[2]; 
    480494                data->temp_act[3] = fscscy_read_value(client, FSCSCY_REG_TEMP3_ACT); 
     495                  if (data->temp_min[3] > data->temp_act[3]) data->temp_min[3] = data->temp_act[3]; 
     496                  if (data->temp_max[3] < data->temp_act[3]) data->temp_max[3] = data->temp_act[3]; 
     497 
    481498                data->temp_status[0] = fscscy_read_value(client, FSCSCY_REG_TEMP0_STATE); 
    482499                data->temp_status[1] = fscscy_read_value(client, FSCSCY_REG_TEMP1_STATE); 
    483500                data->temp_status[2] = fscscy_read_value(client, FSCSCY_REG_TEMP2_STATE); 
    484501                data->temp_status[3] = fscscy_read_value(client, FSCSCY_REG_TEMP3_STATE); 
    485                 data->temp_max[0] = fscscy_read_value(client, FSCSCY_REG_TEMP0_MAX); 
    486                 data->temp_max[1] = fscscy_read_value(client, FSCSCY_REG_TEMP1_MAX); 
    487                 data->temp_max[2] = fscscy_read_value(client, FSCSCY_REG_TEMP2_MAX); 
    488                 data->temp_max[3] = fscscy_read_value(client, FSCSCY_REG_TEMP3_MAX); 
     502                data->temp_lim[0] = fscscy_read_value(client, FSCSCY_REG_TEMP0_LIM); 
     503                data->temp_lim[1] = fscscy_read_value(client, FSCSCY_REG_TEMP1_LIM); 
     504                data->temp_lim[2] = fscscy_read_value(client, FSCSCY_REG_TEMP2_LIM); 
     505                data->temp_lim[3] = fscscy_read_value(client, FSCSCY_REG_TEMP3_LIM); 
    489506 
    490507                data->volt[0] = fscscy_read_value(client, FSCSCY_REG_VOLT_12); 
     
    603620                                results[0] = data->temp_status[0] & 0x03; 
    604621                                results[1] = TEMP_FROM_REG(data->temp_act[0]); 
    605                                 results[2] = TEMP_FROM_REG(data->temp_max[0]); 
     622                                results[2] = TEMP_FROM_REG(data->temp_lim[0]); 
     623                                results[3] = TEMP_FROM_REG(data->temp_min[0]); 
     624                                results[4] = TEMP_FROM_REG(data->temp_max[0]); 
    606625                                break; 
    607626                        case FSCSCY_SYSCTL_TEMP1: 
    608627                                results[0] = data->temp_status[1] & 0x03; 
    609628                                results[1] = TEMP_FROM_REG(data->temp_act[1]); 
    610                                 results[2] = TEMP_FROM_REG(data->temp_max[1]); 
     629                                results[2] = TEMP_FROM_REG(data->temp_lim[1]); 
     630                                results[3] = TEMP_FROM_REG(data->temp_min[1]); 
     631                                results[4] = TEMP_FROM_REG(data->temp_max[1]); 
    611632                                break; 
    612633                        case FSCSCY_SYSCTL_TEMP2: 
    613634                                results[0] = data->temp_status[2] & 0x03; 
    614635                                results[1] = TEMP_FROM_REG(data->temp_act[2]); 
    615                                 results[2] = TEMP_FROM_REG(data->temp_max[2]); 
     636                                results[2] = TEMP_FROM_REG(data->temp_lim[2]); 
     637                                results[3] = TEMP_FROM_REG(data->temp_min[2]); 
     638                                results[4] = TEMP_FROM_REG(data->temp_max[2]); 
    616639                                break; 
    617640                        case FSCSCY_SYSCTL_TEMP3: 
    618641                                results[0] = data->temp_status[3] & 0x03; 
    619642                                results[1] = TEMP_FROM_REG(data->temp_act[3]); 
    620                                 results[2] = TEMP_FROM_REG(data->temp_max[3]); 
     643                                results[2] = TEMP_FROM_REG(data->temp_lim[3]); 
     644                                results[3] = TEMP_FROM_REG(data->temp_min[3]); 
     645                                results[4] = TEMP_FROM_REG(data->temp_max[3]); 
    621646                                break; 
    622647                        default: 
     
    626651                                return; 
    627652                } 
    628                 *nrels_mag = 3; 
     653                *nrels_mag = 5; 
    629654        } else if (operation == SENSORS_PROC_REAL_WRITE) { 
    630655                if(*nrels_mag >= 1) {