Changeset 819

Show
Ignore:
Timestamp:
06/17/00 22:33:50 (9 years ago)
Author:
mds
Message:

(mds) Change as99127f fan speed calculation based on actual

measurements with frequency counter. Divisor changed from
1350000 to 810000.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lm-sensors/trunk/CHANGES

    r807 r819  
    2323  Module w83781d: Fix sensor2&3 selection, enable VBAT (in8) monitoring 
    2424  Module w83781d: Remove as99127f entries for in7-8, pwm3-4, sensor1-3 
     25  Module w83781d: Fis as99127f fan speed (was 66% too high) 
    2526  Module w83781d: Improve beep input checking 
    2627  Program i2cdump: Add Winbond-style bank selection 
  • lm-sensors/trunk/doc/chips/w83781d

    r807 r819  
    149149The as99127f support was developed without the benefit of a datasheet. 
    150150In most cases it is treated as a w83781d. 
    151 This support is BETA. One user has reported problems with fans stopping. 
     151This support is BETA. One user has reported problems with fans stopping 
     152occasionally. 
    152153 
    153154Known problems: 
    154         - Fans read about 30% low. 
    155155        - -12V readings a little high (-9.5V to -10.5V) 
    156156        - Problems with diode/thermistor settings (supported?) 
  • lm-sensors/trunk/kernel/chips/w83781d.c

    r807 r819  
    168168                             254); 
    169169} 
     170extern inline u8 AS_FAN_TO_REG(long rpm, int div) 
     171{ 
     172        if (rpm == 0) 
     173                return 255; 
     174        rpm = SENSORS_LIMIT(rpm, 1, 1000000); 
     175        return SENSORS_LIMIT((810000 + rpm * div / 2) / (rpm * div), 1, 
     176                             254); 
     177} 
    170178 
    171179#define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div))) 
     180#define AS_FAN_FROM_REG(val,div) \ 
     181                              ((val)==0?-1:(val)==255?0:810000/((val)*(div))) 
    172182 
    173183#define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-5)/10):\ 
     
    12991309                    (w83781d_read_value(client, W83781D_REG_VBAT) | 0x01)); 
    13001310        } 
    1301         w83781d_write_value(client, W83781D_REG_FAN_MIN(1), 
    1302                             FAN_TO_REG(W83781D_INIT_FAN_MIN_1, 2)); 
    1303         w83781d_write_value(client, W83781D_REG_FAN_MIN(2), 
    1304                             FAN_TO_REG(W83781D_INIT_FAN_MIN_2, 2)); 
    1305         w83781d_write_value(client, W83781D_REG_FAN_MIN(3), 
    1306                             FAN_TO_REG(W83781D_INIT_FAN_MIN_3, 2)); 
     1311        if (type == as99127f) { 
     1312                w83781d_write_value(client, W83781D_REG_FAN_MIN(1), 
     1313                                    AS_FAN_TO_REG(W83781D_INIT_FAN_MIN_1, 2)); 
     1314                w83781d_write_value(client, W83781D_REG_FAN_MIN(2), 
     1315                                    AS_FAN_TO_REG(W83781D_INIT_FAN_MIN_2, 2)); 
     1316                w83781d_write_value(client, W83781D_REG_FAN_MIN(3), 
     1317                                    AS_FAN_TO_REG(W83781D_INIT_FAN_MIN_3, 2)); 
     1318        } else { 
     1319                w83781d_write_value(client, W83781D_REG_FAN_MIN(1), 
     1320                                    FAN_TO_REG(W83781D_INIT_FAN_MIN_1, 2)); 
     1321                w83781d_write_value(client, W83781D_REG_FAN_MIN(2), 
     1322                                    FAN_TO_REG(W83781D_INIT_FAN_MIN_2, 2)); 
     1323                w83781d_write_value(client, W83781D_REG_FAN_MIN(3), 
     1324                                    FAN_TO_REG(W83781D_INIT_FAN_MIN_3, 2)); 
     1325        } 
    13071326 
    13081327        w83781d_write_value(client, W83781D_REG_TEMP_OVER, 
     
    15221541        else if (operation == SENSORS_PROC_REAL_READ) { 
    15231542                w83781d_update_client(client); 
    1524                 results[0] = FAN_FROM_REG(data->fan_min[nr - 1], 
    1525                                           DIV_FROM_REG(data-> 
    1526                                                        fan_div[nr - 1])); 
    1527                 results[1] = 
    1528                     FAN_FROM_REG(data->fan[nr - 1], 
    1529                                  DIV_FROM_REG(data->fan_div[nr - 1])); 
     1543                if(data->type == as99127f) { 
     1544                        results[0] = AS_FAN_FROM_REG(data->fan_min[nr - 1], 
     1545                                          DIV_FROM_REG(data->fan_div[nr - 1])); 
     1546                        results[1] = AS_FAN_FROM_REG(data->fan[nr - 1], 
     1547                                          DIV_FROM_REG(data->fan_div[nr - 1])); 
     1548                } else { 
     1549                        results[0] = FAN_FROM_REG(data->fan_min[nr - 1], 
     1550                                          DIV_FROM_REG(data->fan_div[nr - 1])); 
     1551                        results[1] = FAN_FROM_REG(data->fan[nr - 1], 
     1552                                          DIV_FROM_REG(data->fan_div[nr - 1])); 
     1553                } 
    15301554                *nrels_mag = 2; 
    15311555        } else if (operation == SENSORS_PROC_REAL_WRITE) { 
    15321556                if (*nrels_mag >= 1) { 
    1533                         data->fan_min[nr - 1] = FAN_TO_REG(results[0], 
    1534                                                            DIV_FROM_REG 
    1535                                                            (data-> 
    1536                                                             fan_div[nr - 
    1537                                                                     1])); 
     1557                        if(data->type == as99127f) { 
     1558                                data->fan_min[nr - 1] = 
     1559                                     AS_FAN_TO_REG(results[0], 
     1560                                            DIV_FROM_REG(data->fan_div[nr-1])); 
     1561                        } else { 
     1562                                data->fan_min[nr - 1] = 
     1563                                     FAN_TO_REG(results[0], 
     1564                                            DIV_FROM_REG(data->fan_div[nr-1])); 
     1565                        } 
    15381566                        w83781d_write_value(client, 
    15391567                                            W83781D_REG_FAN_MIN(nr),