Changeset 3078

Show
Ignore:
Timestamp:
09/10/05 14:03:14 (9 years ago)
Author:
khali
Message:

Stop printing the algorithm name unless /proc compatibility format
is requested. Print the correct bus type if bus functionality can be
queried (will work if i2c-dev is loaded and user has write access to

/dev/i2c*).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/prog/dump/i2cbusses.c

    r3077 r3078  
    2525#include <string.h> 
    2626#include <stdio.h> 
     27#include <unistd.h> 
    2728#include <limits.h> 
    2829#include <dirent.h> 
     
    3031#include <errno.h> 
    3132#include "i2cbusses.h" 
     33#include "i2c-dev.h" 
     34 
     35enum adt { adt_dummy, adt_isa, adt_i2c, adt_smbus, adt_unknown }; 
     36 
     37struct adap_type { 
     38        const char *funcs; 
     39        const char* algo; 
     40}; 
     41 
     42static struct adap_type adap_types[5] = { 
     43        { .funcs        = "dummy", 
     44          .algo         = "Dummy bus algorithm", }, 
     45        { .funcs        = "isa", 
     46          .algo         = "ISA bus algorithm", }, 
     47        { .funcs        = "i2c", 
     48          .algo         = "Algorithm unavailable", }, 
     49        { .funcs        = "smbus", 
     50          .algo         = "Non-I2C SMBus adapter", }, 
     51        { .funcs        = "unknown", 
     52          .algo         = "Algorithm unavailable", }, 
     53}; 
     54 
     55static enum adt i2c_get_funcs(int i2cbus) 
     56{ 
     57        long funcs; 
     58        int file; 
     59        char filename[20]; 
     60        enum adt ret; 
     61 
     62        file = open_i2c_dev(i2cbus, filename, 1); 
     63        if (file < 0) 
     64                return adt_unknown; 
     65 
     66        if (ioctl(file, I2C_FUNCS, &funcs) < 0) 
     67                ret = adt_unknown; 
     68        else if (funcs & I2C_FUNC_I2C) 
     69                ret = adt_i2c; 
     70        else if (funcs & (I2C_FUNC_SMBUS_BYTE | 
     71                          I2C_FUNC_SMBUS_BYTE_DATA | 
     72                          I2C_FUNC_SMBUS_WORD_DATA)) 
     73                ret = adt_smbus; 
     74        else 
     75                ret = adt_dummy; 
     76 
     77        close(file); 
     78        return ret; 
     79} 
    3280 
    3381/* 
     
    4896        char dev[NAME_MAX], fstype[NAME_MAX], sysfs[NAME_MAX], n[NAME_MAX]; 
    4997        int foundsysfs = 0; 
    50         int tmp; 
    5198        int count=0; 
    5299 
     
    128175found: 
    129176                if (f != NULL) { 
     177                        int i2cbus; 
     178                        enum adt type; 
    130179                        char    x[120]; 
    131180 
     
    138187                        /* match 2.4 /proc/bus/i2c format as closely as possible */ 
    139188                        if(!strncmp(x, "ISA ", 4)) { 
    140                                 if(procfmt) 
    141                                         printf("%s\t%-10s\t%-32s\t%s\n", de->d_name, 
    142                                                 "dummy", x, "ISA bus algorithm"); 
    143                                 else 
    144                                         fprintf(stderr, "    %s\t%-10s\t%-32s\t%s\n", de->d_name, 
    145                                                 "dummy", x, "ISA bus algorithm"); 
    146                         } else if(!sscanf(de->d_name, "i2c-%d", &tmp)) { 
    147                                 if(procfmt) 
    148                                         printf("%s\t%-10s\t%-32s\t%s\n", de->d_name, 
    149                                                 "dummy", x, "Dummy bus algorithm"); 
    150                                 else 
    151                                         fprintf(stderr, "    %s\t%-10s\t%-32s\t%s\n", de->d_name, 
    152                                                 "dummy", x, "Dummy bus algorithm"); 
     189                                type = adt_isa; 
     190                        } else if(!sscanf(de->d_name, "i2c-%d", &i2cbus)) { 
     191                                type = adt_dummy; 
    153192                        } else { 
    154                                 if(procfmt) 
    155                                         printf("%s\t%-10s\t%-32s\t%s\n", de->d_name, 
    156                                                 "unknown", x, "Algorithm unavailable"); 
    157                                 else 
    158                                         fprintf(stderr, "    %s\t%-10s\t%-32s\t%s\n", de->d_name, 
    159                                                 "unknown", x, "Algorithm unavailable"); 
     193                                /* Attempt to probe for adapter capabilities */ 
     194                                type = i2c_get_funcs(i2cbus); 
    160195                        } 
     196 
     197                        if (procfmt) 
     198                                printf("%s\t%-10s\t%-32s\t%s\n", de->d_name, 
     199                                        adap_types[type].funcs, x, adap_types[type].algo); 
     200                        else 
     201                                fprintf(stderr, "    %s\t%-10s\t%s\n", de->d_name, 
     202                                        adap_types[type].funcs, x); 
    161203                } 
    162204        }