Changeset 1684

Show
Ignore:
Timestamp:
01/04/03 21:21:22 (12 years ago)
Author:
mds
Message:

Don't return bad values if reads fail

Location:
lm-sensors/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/CHANGES

    r1680 r1684  
    2323  Library: Add support for exponents and logarithms for vt1211/vt8235 temps 
    2424  Makefile: Generate warnings if new library won't be found by ld.so 
     25  Module adm1021: Ignore failed reads and report old value 
    2526  Module i2c-i810.c: Fix for some chips 
    2627  Modules mtp008, smsc47m1, vt1211, vt8231, w83781d: Standardize and improve 
     
    2829  Module w83627hf: New 
    2930  Program mkpatch: Fix vt8231 compile; keep tsunami from menu on non-alpha 
     31  Program pwmtest: New 
    3032  Program sensors-detect: Add super i/o detection (smsc47m1, vt1211, 
    3133                          w83627hf, w83697hf) 
  • lm-sensors/trunk/kernel/chips/adm1021.c

    r1535 r1684  
    143143static void adm1021_dec_use(struct i2c_client *client); 
    144144static int adm1021_read_value(struct i2c_client *client, u8 reg); 
     145static int adm1021_rd_good(u8 *val, struct i2c_client *client, u8 reg); 
    145146static int adm1021_write_value(struct i2c_client *client, u8 reg, 
    146147                               u16 value); 
     
    427428} 
    428429 
     430/* only update value if read succeeded */ 
     431int adm1021_rd_good(u8 *val, struct i2c_client *client, u8 reg) 
     432{ 
     433        int i; 
     434        i = i2c_smbus_read_byte_data(client, reg); 
     435        if(i < 0) 
     436                return i; 
     437        else { 
     438                *val = i; 
     439                return 0; 
     440        } 
     441} 
     442 
    429443int adm1021_write_value(struct i2c_client *client, u8 reg, u16 value) 
    430444{ 
     
    448462#endif 
    449463 
    450                 data->temp = adm1021_read_value(client, ADM1021_REG_TEMP); 
    451                 data->temp_os = 
    452                     adm1021_read_value(client, ADM1021_REG_TOS_R); 
    453                 data->temp_hyst = 
    454                     adm1021_read_value(client, ADM1021_REG_THYST_R); 
    455                 data->remote_temp = 
    456                     adm1021_read_value(client, ADM1021_REG_REMOTE_TEMP); 
    457                 data->remote_temp_os = 
    458                     adm1021_read_value(client, ADM1021_REG_REMOTE_TOS_R); 
    459                 data->remote_temp_hyst = 
    460                     adm1021_read_value(client, ADM1021_REG_REMOTE_THYST_R); 
    461                 data->alarms = 
    462                     adm1021_read_value(client, ADM1021_REG_STATUS) & 0xec; 
     464                adm1021_rd_good(&(data->temp), client, ADM1021_REG_TEMP); 
     465                adm1021_rd_good(&(data->temp_os), client, ADM1021_REG_TOS_R); 
     466                adm1021_rd_good(&(data->temp_hyst), client, 
     467                                ADM1021_REG_THYST_R); 
     468                adm1021_rd_good(&(data->remote_temp), client, 
     469                                ADM1021_REG_REMOTE_TEMP); 
     470                adm1021_rd_good(&(data->remote_temp_os), client, 
     471                                ADM1021_REG_REMOTE_TOS_R); 
     472                adm1021_rd_good(&(data->remote_temp_hyst), client, 
     473                                   ADM1021_REG_REMOTE_THYST_R); 
     474                if(!adm1021_rd_good(&(data->alarms), client, 
     475                                       ADM1021_REG_STATUS)) 
     476                        data->alarms &= 0xec; 
    463477                if (data->type == adm1021) 
    464                         data->die_code = 
    465                             adm1021_read_value(client, 
    466                                                ADM1021_REG_DIE_CODE); 
     478                        adm1021_rd_good(&(data->die_code), client, 
     479                                        ADM1021_REG_DIE_CODE); 
    467480                if (data->type == adm1023) { 
    468                   data->remote_temp_prec = 
    469                     adm1021_read_value(client, ADM1021_REG_REM_TEMP_PREC); 
    470                   data->remote_temp_os_prec = 
    471                     adm1021_read_value(client, ADM1021_REG_REM_TOS_PREC); 
    472                   data->remote_temp_hyst_prec = 
    473                     adm1021_read_value(client, ADM1021_REG_REM_THYST_PREC); 
    474                   data->remote_temp_offset = 
    475                     adm1021_read_value(client, ADM1021_REG_REM_OFFSET); 
    476                   data->remote_temp_offset_prec = 
    477                     adm1021_read_value(client, ADM1021_REG_REM_OFFSET_PREC); 
     481                        adm1021_rd_good(&(data->remote_temp_prec), client, 
     482                                        ADM1021_REG_REM_TEMP_PREC); 
     483                        adm1021_rd_good(&(data->remote_temp_os_prec), client, 
     484                                        ADM1021_REG_REM_TOS_PREC); 
     485                        adm1021_rd_good(&(data->remote_temp_hyst_prec), client, 
     486                                        ADM1021_REG_REM_THYST_PREC); 
     487                        adm1021_rd_good(&(data->remote_temp_offset), client, 
     488                                          ADM1021_REG_REM_OFFSET); 
     489                        adm1021_rd_good(&(data->remote_temp_offset_prec), 
     490                                           client, ADM1021_REG_REM_OFFSET_PREC); 
    478491                } 
    479492                data->last_updated = jiffies;