Changeset 4287

Show
Ignore:
Timestamp:
01/09/07 03:46:13 (2 years ago)
Author:
mmh
Message:

The sensors library relied on one structure having an identical layout in
memory as part of another structure. This rather large patch fixes that by
making the smaller piece an explicit member of the larger.

I brought this patch into sync with the latest SVN, and tested it by comparing
objects files from the tree pre- and post- patch.

The remaining 99% of the credit goes to Bob Schlärmann <bob2@dsv.nl> for
creating the original patch... thanks Bob!

* Bob Schlärmann <bob2@dsv.nl> [2006-12-24 18:29:39 +0100]:

The following patch changes all of the lib/chips.c entries and any function
that uses sensors_chip_feature. Most of the conversion was done through a
perl script, so if you don't agree with the syntax it'll be easy to change.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lm-sensors/trunk/lib/access.c

    r4266 r4287  
    101101                if (!strcasecmp(sensors_chip_features_list[i].prefix, prefix)) { 
    102102                        features = sensors_chip_features_list[i].feature; 
    103                         for (j = 0; features[j].name; j++) 
    104                                 if (features[j].number == feature) 
     103                        for (j = 0; features[j].data.name; j++) 
     104                                if (features[j].data.number == feature) 
    105105                                        return features + j; 
    106106                } 
     
    120120                if (!strcasecmp(sensors_chip_features_list[i].prefix, prefix)) { 
    121121                        features = sensors_chip_features_list[i].feature; 
    122                         for (j = 0; features[j].name; j++) 
    123                                 if (!strcasecmp(features[j].name, feature)) 
     122                        for (j = 0; features[j].data.name; j++) 
     123                                if (!strcasecmp(features[j].data.name, feature)) 
    124124                                        return features + j; 
    125125                } 
     
    159159        for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));) 
    160160                for (i = 0; i < chip->labels_count; i++) 
    161                         if (!strcasecmp(featureptr->name,chip->labels[i].name)){ 
     161                        if (!strcasecmp(featureptr->data.name,chip->labels[i].name)){ 
    162162                                if (*result) 
    163163                                        free(*result); 
     
    169169 
    170170        /* No label, return the feature name instead */ 
    171         if (!(*result = strdup(featureptr->name))) 
     171        if (!(*result = strdup(featureptr->data.name))) 
    172172                sensors_fatal_error("sensors_get_label", 
    173173                                    "Allocating label text"); 
     
    188188        if (!(featureptr = sensors_lookup_feature_nr(name.prefix, feature))) 
    189189                return -SENSORS_ERR_NO_ENTRY; 
    190         if (featureptr->logical_mapping == SENSORS_NO_MAPPING) 
     190        if (featureptr->data.mapping == SENSORS_NO_MAPPING) 
    191191                alt_featureptr = NULL; 
    192192        else if (!(alt_featureptr = 
    193193                   sensors_lookup_feature_nr(name.prefix, 
    194                                              featureptr->logical_mapping))) 
     194                                             featureptr->data.mapping))) 
    195195                return -SENSORS_ERR_NO_ENTRY; 
    196196        for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));) 
    197197                for (i = 0; i < chip->ignores_count; i++) 
    198                         if (!strcasecmp(featureptr->name, chip->ignores[i].name)) 
     198                        if (!strcasecmp(featureptr->data.name, chip->ignores[i].name)) 
    199199                                return 0; /* Exact match always overrules! */ 
    200200                        else if (alt_featureptr && 
    201                                  !strcasecmp(alt_featureptr->name, 
     201                                 !strcasecmp(alt_featureptr->data.name, 
    202202                                             chip->ignores[i].name)) 
    203203                                res = 0; 
     
    222222        if (!(main_feature = sensors_lookup_feature_nr(name.prefix, feature))) 
    223223                return -SENSORS_ERR_NO_ENTRY; 
    224         if (main_feature->compute_mapping == SENSORS_NO_MAPPING) 
     224        if (main_feature->data.compute_mapping == SENSORS_NO_MAPPING) 
    225225                alt_feature = NULL; 
    226226        else if (!(alt_feature = sensors_lookup_feature_nr(name.prefix, 
    227                                         main_feature->compute_mapping))) 
    228                 return -SENSORS_ERR_NO_ENTRY; 
    229         if (!(main_feature->mode & SENSORS_MODE_R)) 
     227                                        main_feature->data.compute_mapping))) 
     228                return -SENSORS_ERR_NO_ENTRY; 
     229        if (!(main_feature->data.mode & SENSORS_MODE_R)) 
    230230                return -SENSORS_ERR_ACCESS_R; 
    231231        for (chip = NULL; 
    232232             !expr && (chip = sensors_for_all_config_chips(name, chip));) 
    233233                for (i = 0; !final_expr && (i < chip->computes_count); i++) { 
    234                         if (!strcasecmp(main_feature->name, chip->computes[i].name)) { 
     234                        if (!strcasecmp(main_feature->data.name, chip->computes[i].name)) { 
    235235                                expr = chip->computes[i].from_proc; 
    236236                                final_expr = 1; 
    237                         } else if (alt_feature && !strcasecmp(alt_feature->name, 
     237                        } else if (alt_feature && !strcasecmp(alt_feature->data.name, 
    238238                                               chip->computes[i].name)) { 
    239239                                expr = chip->computes[i].from_proc; 
     
    266266        if (!(main_feature = sensors_lookup_feature_nr(name.prefix, feature))) 
    267267                return -SENSORS_ERR_NO_ENTRY; 
    268         if (main_feature->compute_mapping == SENSORS_NO_MAPPING) 
     268        if (main_feature->data.compute_mapping == SENSORS_NO_MAPPING) 
    269269                alt_feature = NULL; 
    270270        else if (!(alt_feature = sensors_lookup_feature_nr(name.prefix, 
    271                                              main_feature->compute_mapping))) 
    272                 return -SENSORS_ERR_NO_ENTRY; 
    273         if (!(main_feature->mode & SENSORS_MODE_W)) 
     271                                             main_feature->data.compute_mapping))) 
     272                return -SENSORS_ERR_NO_ENTRY; 
     273        if (!(main_feature->data.mode & SENSORS_MODE_W)) 
    274274                return -SENSORS_ERR_ACCESS_W; 
    275275        for (chip = NULL; 
    276276             !expr && (chip = sensors_for_all_config_chips(name, chip));) 
    277277                for (i = 0; !final_expr && (i < chip->computes_count); i++) 
    278                         if (!strcasecmp(main_feature->name, chip->computes[i].name)) { 
     278                        if (!strcasecmp(main_feature->data.name, chip->computes[i].name)) { 
    279279                                expr = chip->computes->to_proc; 
    280280                                final_expr = 1; 
    281                         } else if (alt_feature && !strcasecmp(alt_feature->name, 
     281                        } else if (alt_feature && !strcasecmp(alt_feature->data.name, 
    282282                                               chip->computes[i].name)) { 
    283283                                expr = chip->computes[i].to_proc; 
     
    335335                        feature_list = sensors_chip_features_list[i].feature; 
    336336                        if (!*nr1 && !*nr2) {   /* Return the first entry */ 
    337                                 if (!feature_list[0].name)    /* The list may be empty */ 
     337                                if (!feature_list[0].data.name)       /* The list may be empty */ 
    338338                                        return NULL; 
    339339                                *nr1 = *nr2 = 1; 
    340                                 return (sensors_feature_data *)feature_list; 
    341                         } 
    342                         for ((*nr2)++; feature_list[*nr2 - 1].name; (*nr2)++) 
    343                                 if (feature_list[*nr2 - 1].logical_mapping == 
    344                                     feature_list[*nr1 - 1].number) 
    345                                         return (sensors_feature_data *) 
    346                                                 (feature_list + *nr2 - 1); 
     340                                return &feature_list->data; 
     341                        } 
     342                        for ((*nr2)++; feature_list[*nr2 - 1].data.name; (*nr2)++) 
     343                                if (feature_list[*nr2 - 1].data.mapping == 
     344                                    feature_list[*nr1 - 1].data.number) 
     345                                        return &((feature_list + *nr2 - 1)->data); 
    347346                        for ((*nr1)++; 
    348                              feature_list[*nr1 - 1].name 
    349                              && (feature_list[*nr1 - 1].logical_mapping != 
     347                             feature_list[*nr1 - 1].data.name 
     348                             && (feature_list[*nr1 - 1].data.mapping != 
    350349                                 SENSORS_NO_MAPPING); (*nr1)++) ; 
    351350                        *nr2 = *nr1; 
    352                         if (!feature_list[*nr1 - 1].name) 
     351                        if (!feature_list[*nr1 - 1].data.name) 
    353352                                return NULL; 
    354                         return (sensors_feature_data *)(feature_list + *nr1 - 1); 
     353                        return &((feature_list + *nr1 - 1)->data); 
    355354                } 
    356355        return NULL; 
     
    376375                                                            expr->data.var))) 
    377376                        return SENSORS_ERR_NO_ENTRY; 
    378                 if (!(res = sensors_get_feature(chipname, feature->number, result))) 
     377                if (!(res = sensors_get_feature(chipname, feature->data.number, result))) 
    379378                        return res; 
    380379                return 0; 
     
    440439                                continue; 
    441440                        } 
    442                         feature_nr = feature->number; 
     441                        feature_nr = feature->data.number; 
    443442 
    444443                        /* Check whether we already set this feature */ 
  • lm-sensors/trunk/lib/chips.c

    r4270 r4287  
    4545static sensors_chip_feature lm78_features[] = 
    4646  {  
    47     { SENSORS_LM78_IN0, "in0", NOMAP, NOMAP,  
    48                         R, LM78_SYSCTL_IN0, VALUE(3), 2 }, 
    49     { SENSORS_LM78_IN1, "in1", NOMAP, NOMAP, 
    50                         R, LM78_SYSCTL_IN1, VALUE(3), 2 }, 
    51     { SENSORS_LM78_IN2, "in2", NOMAP, NOMAP, 
    52                         R, LM78_SYSCTL_IN2, VALUE(3), 2 }, 
    53     { SENSORS_LM78_IN3, "in3", NOMAP, NOMAP, 
    54                         R, LM78_SYSCTL_IN3, VALUE(3), 2 }, 
    55     { SENSORS_LM78_IN4, "in4", NOMAP, NOMAP, 
    56                         R, LM78_SYSCTL_IN4, VALUE(3), 2 }, 
    57     { SENSORS_LM78_IN5, "in5", NOMAP, NOMAP, 
    58                         R, LM78_SYSCTL_IN5, VALUE(3), 2 }, 
    59     { SENSORS_LM78_IN6, "in6", NOMAP, NOMAP, 
    60                         R, LM78_SYSCTL_IN6, VALUE(3), 2 }, 
    61     { SENSORS_LM78_IN0_MIN, "in0_min", SENSORS_LM78_IN0, SENSORS_LM78_IN0, 
    62                             RW, LM78_SYSCTL_IN0, VALUE(1), 2 }, 
    63     { SENSORS_LM78_IN1_MIN, "in1_min", SENSORS_LM78_IN1, SENSORS_LM78_IN1, 
    64                             RW, LM78_SYSCTL_IN1, VALUE(1), 2 }, 
    65     { SENSORS_LM78_IN2_MIN, "in2_min", SENSORS_LM78_IN2, SENSORS_LM78_IN2, 
    66                             RW, LM78_SYSCTL_IN2, VALUE(1), 2 }, 
    67     { SENSORS_LM78_IN3_MIN, "in3_min", SENSORS_LM78_IN3, SENSORS_LM78_IN3, 
    68                             RW, LM78_SYSCTL_IN3, VALUE(1), 2 }, 
    69     { SENSORS_LM78_IN4_MIN, "in4_min", SENSORS_LM78_IN4, SENSORS_LM78_IN4, 
    70                             RW, LM78_SYSCTL_IN4, VALUE(1), 2 }, 
     47    { { SENSORS_LM78_IN0, "in0", NOMAP, NOMAP, R },  
     48                        LM78_SYSCTL_IN0, VALUE(3), 2 }, 
     49    { { SENSORS_LM78_IN1, "in1", NOMAP, NOMAP, R },  
     50                        LM78_SYSCTL_IN1, VALUE(3), 2 }, 
     51    { { SENSORS_LM78_IN2, "in2", NOMAP, NOMAP, R },  
     52                        LM78_SYSCTL_IN2, VALUE(3), 2 }, 
     53    { { SENSORS_LM78_IN3, "in3", NOMAP, NOMAP, R },  
     54                        LM78_SYSCTL_IN3, VALUE(3), 2 }, 
     55    { { SENSORS_LM78_IN4, "in4", NOMAP, NOMAP, R },  
     56                        LM78_SYSCTL_IN4, VALUE(3), 2 }, 
     57    { { SENSORS_LM78_IN5, "in5", NOMAP, NOMAP, R },  
     58                        LM78_SYSCTL_IN5, VALUE(3), 2 }, 
     59    { { SENSORS_LM78_IN6, "in6", NOMAP, NOMAP, R },  
     60                        LM78_SYSCTL_IN6, VALUE(3), 2 }, 
     61    { { SENSORS_LM78_IN0_MIN, "in0_min", SENSORS_LM78_IN0, SENSORS_LM78_IN0, RW },  
     62                            LM78_SYSCTL_IN0, VALUE(1), 2 }, 
     63    { { SENSORS_LM78_IN1_MIN, "in1_min", SENSORS_LM78_IN1, SENSORS_LM78_IN1, RW },  
     64                            LM78_SYSCTL_IN1, VALUE(1), 2 }, 
     65    { { SENSORS_LM78_IN2_MIN, "in2_min", SENSORS_LM78_IN2, SENSORS_LM78_IN2, RW },  
     66                            LM78_SYSCTL_IN2, VALUE(1), 2 }, 
     67    { { SENSORS_LM78_IN3_MIN, "in3_min", SENSORS_LM78_IN3, SENSORS_LM78_IN3, RW },  
     68                            LM78_SYSCTL_IN3, VALUE(1), 2 }, 
     69    { { SENSORS_LM78_IN4_MIN, "in4_min", SENSORS_LM78_IN4, SENSORS_LM78_IN4, RW },  
     70                            LM78_SYSCTL_IN4, VALUE(1), 2 }, 
    7171/* swap 5 and 6 min/max because compute lines will be inverting */ 
    72     { SENSORS_LM78_IN5_MIN, "in5_min", SENSORS_LM78_IN5, SENSORS_LM78_IN5, 
    73                             RW, LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 }, 
    74     { SENSORS_LM78_IN6_MIN, "in6_min", SENSORS_LM78_IN6, SENSORS_LM78_IN6, 
    75                             RW, LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 }, 
    76     { SENSORS_LM78_IN0_MAX, "in0_max", SENSORS_LM78_IN0, SENSORS_LM78_IN0, 
    77                             RW, LM78_SYSCTL_IN0, VALUE(2), 2 }, 
    78     { SENSORS_LM78_IN1_MAX, "in1_max", SENSORS_LM78_IN1, SENSORS_LM78_IN1, 
    79                             RW, LM78_SYSCTL_IN1, VALUE(2), 2 }, 
    80     { SENSORS_LM78_IN2_MAX, "in2_max", SENSORS_LM78_IN2, SENSORS_LM78_IN2, 
    81                             RW, LM78_SYSCTL_IN2, VALUE(2), 2 }, 
    82     { SENSORS_LM78_IN3_MAX, "in3_max", SENSORS_LM78_IN3, SENSORS_LM78_IN3, 
    83                             RW, LM78_SYSCTL_IN3, VALUE(2), 2 }, 
    84     { SENSORS_LM78_IN4_MAX, "in4_max", SENSORS_LM78_IN4, SENSORS_LM78_IN4, 
    85                             RW, LM78_SYSCTL_IN4, VALUE(2), 2 }, 
    86     { SENSORS_LM78_IN5_MAX, "in5_max", SENSORS_LM78_IN5, SENSORS_LM78_IN5, 
    87                             RW, LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 }, 
    88     { SENSORS_LM78_IN6_MAX, "in6_max", SENSORS_LM78_IN6, SENSORS_LM78_IN6, 
    89                             RW, LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 }, 
    90     { SENSORS_LM78_FAN1, "fan1", NOMAP, NOMAP, 
    91                          R, LM78_SYSCTL_FAN1, VALUE(2), 0 }, 
    92     { SENSORS_LM78_FAN2, "fan2", NOMAP, NOMAP, 
    93                          R, LM78_SYSCTL_FAN2, VALUE(2), 0 }, 
    94     { SENSORS_LM78_FAN3, "fan3", NOMAP, NOMAP, 
    95                          R, LM78_SYSCTL_FAN3, VALUE(2), 0 }, 
    96     { SENSORS_LM78_FAN1_MIN, "fan1_min", SENSORS_LM78_FAN1, SENSORS_LM78_FAN1, 
    97                              RW, LM78_SYSCTL_FAN1, VALUE(1), 0 }, 
    98     { SENSORS_LM78_FAN2_MIN, "fan2_min", SENSORS_LM78_FAN2, SENSORS_LM78_FAN2
    99                              RW, LM78_SYSCTL_FAN2, VALUE(1), 0 }, 
    100     { SENSORS_LM78_FAN3_MIN, "fan3_min", SENSORS_LM78_FAN3, SENSORS_LM78_FAN3, 
    101                              RW, LM78_SYSCTL_FAN3, VALUE(1), 0 }, 
    102     { SENSORS_LM78_TEMP, "temp", NOMAP, NOMAP, 
    103                          R, LM78_SYSCTL_TEMP, VALUE(3), 1 }, 
    104     { SENSORS_LM78_TEMP_HYST, "temp_hyst", SENSORS_LM78_TEMP
    105                               SENSORS_LM78_TEMP, RW,  
    106                               LM78_SYSCTL_TEMP, VALUE(2), 1 }, 
    107     { SENSORS_LM78_TEMP_OVER, "temp_over", SENSORS_LM78_TEMP, 
    108                               SENSORS_LM78_TEMP, RW,  
    109                               LM78_SYSCTL_TEMP, VALUE(1), 1 }, 
    110     { SENSORS_LM78_VID, "vid", NOMAP, NOMAP, 
    111                         R, LM78_SYSCTL_VID, VALUE(1), 2 }, 
    112     { SENSORS_LM78_FAN1_DIV, "fan1_div", SENSORS_LM78_FAN1, NOMAP
    113                              RW, LM78_SYSCTL_FAN_DIV, VALUE(1),  
    114                              0 }, 
    115     { SENSORS_LM78_FAN2_DIV, "fan2_div", SENSORS_LM78_FAN2, NOMAP, 
    116                              RW, LM78_SYSCTL_FAN_DIV, VALUE(2),  
    117                              0 }, 
    118     { SENSORS_LM78_FAN3_DIV, "fan3_div", SENSORS_LM78_FAN3, NOMAP
    119                               R, LM78_SYSCTL_FAN_DIV, VALUE(3),  
    120                               0 }, 
    121     { SENSORS_LM78_ALARMS, "alarms", NOMAP, NOMAP,  
    122                            R, LM78_SYSCTL_ALARMS, VALUE(1), 0 }, 
    123     { 0 } 
     72    { { SENSORS_LM78_IN5_MIN, "in5_min", SENSORS_LM78_IN5, SENSORS_LM78_IN5, RW },  
     73                            LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 }, 
     74    { { SENSORS_LM78_IN6_MIN, "in6_min", SENSORS_LM78_IN6, SENSORS_LM78_IN6, RW },  
     75                            LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 }, 
     76    { { SENSORS_LM78_IN0_MAX, "in0_max", SENSORS_LM78_IN0, SENSORS_LM78_IN0, RW },  
     77                            LM78_SYSCTL_IN0, VALUE(2), 2 }, 
     78    { { SENSORS_LM78_IN1_MAX, "in1_max", SENSORS_LM78_IN1, SENSORS_LM78_IN1, RW },  
     79                            LM78_SYSCTL_IN1, VALUE(2), 2 }, 
     80    { { SENSORS_LM78_IN2_MAX, "in2_max", SENSORS_LM78_IN2, SENSORS_LM78_IN2, RW },  
     81                            LM78_SYSCTL_IN2, VALUE(2), 2 }, 
     82    { { SENSORS_LM78_IN3_MAX, "in3_max", SENSORS_LM78_IN3, SENSORS_LM78_IN3, RW },  
     83                            LM78_SYSCTL_IN3, VALUE(2), 2 }, 
     84    { { SENSORS_LM78_IN4_MAX, "in4_max", SENSORS_LM78_IN4, SENSORS_LM78_IN4, RW },  
     85                            LM78_SYSCTL_IN4, VALUE(2), 2 }, 
     86    { { SENSORS_LM78_IN5_MAX, "in5_max", SENSORS_LM78_IN5, SENSORS_LM78_IN5, RW },  
     87                            LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 }, 
     88    { { SENSORS_LM78_IN6_MAX, "in6_max", SENSORS_LM78_IN6, SENSORS_LM78_IN6, RW },  
     89                            LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 }, 
     90    { { SENSORS_LM78_FAN1, "fan1", NOMAP, NOMAP, R },  
     91                          LM78_SYSCTL_FAN1, VALUE(2), 0 }, 
     92    { { SENSORS_LM78_FAN2, "fan2", NOMAP, NOMAP, R },  
     93                          LM78_SYSCTL_FAN2, VALUE(2), 0 }, 
     94    { { SENSORS_LM78_FAN3, "fan3", NOMAP, NOMAP, R },  
     95                          LM78_SYSCTL_FAN3, VALUE(2), 0 }, 
     96    { { SENSORS_LM78_FAN1_MIN, "fan1_min", SENSORS_LM78_FAN1, SENSORS_LM78_FAN1,  
     97                               RW },  
     98                               LM78_SYSCTL_FAN1, VALUE(1), 0 }
     99    { { SENSORS_LM78_FAN2_MIN, "fan2_min", SENSORS_LM78_FAN2, SENSORS_LM78_FAN2,  
     100                               RW },  
     101                               LM78_SYSCTL_FAN2, VALUE(1), 0 }, 
     102    { { SENSORS_LM78_FAN3_MIN, "fan3_min", SENSORS_LM78_FAN3, SENSORS_LM78_FAN3,  
     103                               RW },  
     104                               LM78_SYSCTL_FAN3, VALUE(1), 0 }
     105    { { SENSORS_LM78_TEMP, "temp", NOMAP, NOMAP, R },  
     106                           LM78_SYSCTL_TEMP, VALUE(3), 1 }, 
     107    { { SENSORS_LM78_TEMP_HYST, "temp_hyst", SENSORS_LM78_TEMP,  
     108                                SENSORS_LM78_TEMP, RW },  
     109                                LM78_SYSCTL_TEMP, VALUE(2), 1 }, 
     110    { { SENSORS_LM78_TEMP_OVER, "temp_over", SENSORS_LM78_TEMP,  
     111                                SENSORS_LM78_TEMP, RW },  
     112                                LM78_SYSCTL_TEMP, VALUE(1), 1 }
     113    { { SENSORS_LM78_VID, "vid", NOMAP, NOMAP, R },  
     114                          LM78_SYSCTL_VID, VALUE(1), 2 }, 
     115    { { SENSORS_LM78_FAN1_DIV, "fan1_div", SENSORS_LM78_FAN1, NOMAP, RW },  
     116                               LM78_SYSCTL_FAN_DIV, VALUE(1), 0 }, 
     117    { { SENSORS_LM78_FAN2_DIV, "fan2_div", SENSORS_LM78_FAN2, NOMAP, RW },  
     118                               LM78_SYSCTL_FAN_DIV, VALUE(2), 0 }
     119    { { SENSORS_LM78_FAN3_DIV, "fan3_div", SENSORS_LM78_FAN3, NOMAP, R },  
     120                              LM78_SYSCTL_FAN_DIV, VALUE(3), 0 }, 
     121    { { SENSORS_LM78_ALARMS, "alarms", NOMAP, NOMAP, R },  
     122                            LM78_SYSCTL_ALARMS, VALUE(1), 0 }, 
     123    { { 0 }, 0 } 
    124124  }; 
    125125 
    126126static sensors_chip_feature lm78j_features[] = 
    127127  {  
    128     { SENSORS_LM78J_IN0, "in0", NOMAP, NOMAP,  
    129                          R, LM78_SYSCTL_IN0, VALUE(3), 2 }, 
    130     { SENSORS_LM78J_IN1, "in1", NOMAP, NOMAP, 
    131                          R, LM78_SYSCTL_IN1, VALUE(3), 2 }, 
    132     { SENSORS_LM78J_IN2, "in2", NOMAP, NOMAP, 
    133                          R, LM78_SYSCTL_IN2, VALUE(3), 2 }, 
    134     { SENSORS_LM78J_IN3, "in3", NOMAP, NOMAP, 
    135                          R, LM78_SYSCTL_IN3, VALUE(3), 2 }, 
    136     { SENSORS_LM78J_IN4, "in4", NOMAP, NOMAP, 
    137                          R, LM78_SYSCTL_IN4, VALUE(3), 2 }, 
    138     { SENSORS_LM78J_IN5, "in5", NOMAP, NOMAP, 
    139                          R, LM78_SYSCTL_IN5, VALUE(3), 2 }, 
    140     { SENSORS_LM78J_IN6, "in6", NOMAP, NOMAP, 
    141                          R, LM78_SYSCTL_IN6, VALUE(3), 2 }, 
    142     { SENSORS_LM78J_IN0_MIN, "in0_min", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0, 
    143                              RW, LM78_SYSCTL_IN0, VALUE(1), 2 }, 
    144     { SENSORS_LM78J_IN1_MIN, "in1_min", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1, 
    145                              RW, LM78_SYSCTL_IN1, VALUE(1), 2 }, 
    146     { SENSORS_LM78J_IN2_MIN, "in2_min", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2, 
    147                              RW, LM78_SYSCTL_IN2, VALUE(1), 2 }, 
    148     { SENSORS_LM78J_IN3_MIN, "in3_min", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3, 
    149                              RW, LM78_SYSCTL_IN3, VALUE(1), 2 }, 
    150     { SENSORS_LM78J_IN4_MIN, "in4_min", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4, 
    151                              RW, LM78_SYSCTL_IN4, VALUE(1), 2 }, 
     128    { { SENSORS_LM78J_IN0, "in0", NOMAP, NOMAP, R },  
     129                           LM78_SYSCTL_IN0, VALUE(3), 2 }, 
     130    { { SENSORS_LM78J_IN1, "in1", NOMAP, NOMAP, R },  
     131                           LM78_SYSCTL_IN1, VALUE(3), 2 }, 
     132    { { SENSORS_LM78J_IN2, "in2", NOMAP, NOMAP, R },  
     133                           LM78_SYSCTL_IN2, VALUE(3), 2 }, 
     134    { { SENSORS_LM78J_IN3, "in3", NOMAP, NOMAP, R },  
     135                           LM78_SYSCTL_IN3, VALUE(3), 2 }, 
     136    { { SENSORS_LM78J_IN4, "in4", NOMAP, NOMAP, R },  
     137                           LM78_SYSCTL_IN4, VALUE(3), 2 }, 
     138    { { SENSORS_LM78J_IN5, "in5", NOMAP, NOMAP, R },  
     139                           LM78_SYSCTL_IN5, VALUE(3), 2 }, 
     140    { { SENSORS_LM78J_IN6, "in6", NOMAP, NOMAP, R },  
     141                           LM78_SYSCTL_IN6, VALUE(3), 2 }, 
     142    { { SENSORS_LM78J_IN0_MIN, "in0_min", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0,  
     143                               RW },  
     144                               LM78_SYSCTL_IN0, VALUE(1), 2 }, 
     145    { { SENSORS_LM78J_IN1_MIN, "in1_min", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1,  
     146                               RW },  
     147                               LM78_SYSCTL_IN1, VALUE(1), 2 }, 
     148    { { SENSORS_LM78J_IN2_MIN, "in2_min", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2,  
     149                               RW },  
     150                               LM78_SYSCTL_IN2, VALUE(1), 2 }, 
     151    { { SENSORS_LM78J_IN3_MIN, "in3_min", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3,  
     152                               RW },  
     153                               LM78_SYSCTL_IN3, VALUE(1), 2 }, 
     154    { { SENSORS_LM78J_IN4_MIN, "in4_min", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4,  
     155                               RW },  
     156                               LM78_SYSCTL_IN4, VALUE(1), 2 }, 
    152157/* swap 5 and 6 min/max because compute lines will be inverting */ 
    153     { SENSORS_LM78J_IN5_MIN, "in5_min", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5, 
    154                              RW, LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 }, 
    155     { SENSORS_LM78J_IN6_MIN, "in6_min", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6, 
    156                              RW, LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 }, 
    157     { SENSORS_LM78J_IN0_MAX, "in0_max", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0, 
    158                              RW, LM78_SYSCTL_IN0, VALUE(2), 2 }, 
    159     { SENSORS_LM78J_IN1_MAX, "in1_max", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1, 
    160                              RW, LM78_SYSCTL_IN1, VALUE(2), 2 }, 
    161     { SENSORS_LM78J_IN2_MAX, "in2_max", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2, 
    162                              RW, LM78_SYSCTL_IN2, VALUE(2), 2 }, 
    163     { SENSORS_LM78J_IN3_MAX, "in3_max", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3, 
    164                              RW, LM78_SYSCTL_IN3, VALUE(2), 2 }, 
    165     { SENSORS_LM78J_IN4_MAX, "in4_max", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4, 
    166                              RW, LM78_SYSCTL_IN4, VALUE(2), 2 }, 
    167     { SENSORS_LM78J_IN5_MAX, "in5_max", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5, 
    168                              RW, LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 }, 
    169     { SENSORS_LM78J_IN6_MAX, "in6_max", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6, 
    170                              RW, LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 }, 
    171     { SENSORS_LM78J_FAN1, "fan1", NOMAP, NOMAP, 
    172                           R, LM78_SYSCTL_FAN1, VALUE(2), 0 }, 
    173     { SENSORS_LM78J_FAN2, "fan2", NOMAP, NOMAP, 
    174                           R, LM78_SYSCTL_FAN2, VALUE(2), 0 }, 
    175     { SENSORS_LM78J_FAN3, "fan3", NOMAP, NOMAP, 
    176                           R, LM78_SYSCTL_FAN3, VALUE(2), 0 }, 
    177     { SENSORS_LM78J_FAN1_MIN, "fan1_min", SENSORS_LM78J_FAN1, 
    178                               SENSORS_LM78J_FAN1, RW,  
    179                               LM78_SYSCTL_FAN1, VALUE(1), 0 }, 
    180     { SENSORS_LM78J_FAN2_MIN, "fan2_min", SENSORS_LM78J_FAN2, 
    181                               SENSORS_LM78J_FAN2, RW,  
    182                               LM78_SYSCTL_FAN2, VALUE(1), 0 }, 
    183     { SENSORS_LM78J_FAN3_MIN, "fan3_min", SENSORS_LM78J_FAN3, 
    184                               SENSORS_LM78J_FAN3, RW,  
    185                               LM78_SYSCTL_FAN3, VALUE(1), 0 }, 
    186     { SENSORS_LM78J_TEMP, "temp", NOMAP, NOMAP, 
    187                           R, LM78_SYSCTL_TEMP, VALUE(3), 1 }, 
    188     { SENSORS_LM78J_TEMP_HYST, "temp_hyst", SENSORS_LM78J_TEMP, 
    189                                SENSORS_LM78J_TEMP, RW,  
    190                                LM78_SYSCTL_TEMP, VALUE(2), 1 }, 
    191     { SENSORS_LM78J_TEMP_OVER, "temp_over", SENSORS_LM78J_TEMP, 
    192                                SENSORS_LM78J_TEMP, RW,  
    193                                LM78_SYSCTL_TEMP, VALUE(1), 1 }, 
    194     { SENSORS_LM78J_VID, "vid", NOMAP, NOMAP, 
    195                          R, LM78_SYSCTL_VID, VALUE(1), 2 }, 
    196     { SENSORS_LM78J_FAN1_DIV, "fan1_div", SENSORS_LM78J_FAN1, 
    197                               NOMAP, RW,  
    198                               LM78_SYSCTL_FAN_DIV, VALUE(1), 0 }, 
    199     { SENSORS_LM78J_FAN2_DIV, "fan2_div", SENSORS_LM78J_FAN2, 
    200                               NOMAP, RW, 
    201                               LM78_SYSCTL_FAN_DIV, VALUE(2), 0 }, 
    202     { SENSORS_LM78J_FAN3_DIV, "fan3_div", SENSORS_LM78J_FAN3, 
    203                               NOMAP, R, 
    204                               LM78_SYSCTL_FAN_DIV, VALUE(3), 0 }, 
    205     { SENSORS_LM78J_ALARMS, "alarms", NOMAP, NOMAP,  
    206                             R, LM78_SYSCTL_ALARMS, VALUE(1), 0 }, 
    207     { 0 } 
     158    { { SENSORS_LM78J_IN5_MIN, "in5_min", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5,  
     159                               RW },  
     160                               LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 }, 
     161    { { SENSORS_LM78J_IN6_MIN, "in6_min", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6,  
     162                               RW },  
     163                               LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 }, 
     164    { { SENSORS_LM78J_IN0_MAX, "in0_max", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0,  
     165                               RW },  
     166                               LM78_SYSCTL_IN0, VALUE(2), 2 }, 
     167    { { SENSORS_LM78J_IN1_MAX, "in1_max", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1,  
     168                               RW },  
     169                               LM78_SYSCTL_IN1, VALUE(2), 2 }, 
     170    { { SENSORS_LM78J_IN2_MAX, "in2_max", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2,  
     171                               RW },  
     172                               LM78_SYSCTL_IN2, VALUE(2), 2 }, 
     173    { { SENSORS_LM78J_IN3_MAX, "in3_max", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3,  
     174                               RW },  
     175                               LM78_SYSCTL_IN3, VALUE(2), 2 }, 
     176    { { SENSORS_LM78J_IN4_MAX, "in4_max", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4,  
     177                               RW },  
     178                               LM78_SYSCTL_IN4, VALUE(2), 2 }, 
     179    { { SENSORS_LM78J_IN5_MAX, "in5_max", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5,  
     180                               RW },  
     181                               LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 }, 
     182    { { SENSORS_LM78J_IN6_MAX, "in6_max", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6,  
     183                               RW },  
     184                               LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 }, 
     185    { { SENSORS_LM78J_FAN1, "fan1", NOMAP, NOMAP, R },  
     186                            LM78_SYSCTL_FAN1, VALUE(2), 0 }, 
     187    { { SENSORS_LM78J_FAN2, "fan2", NOMAP, NOMAP, R },  
     188                            LM78_SYSCTL_FAN2, VALUE(2), 0 }, 
     189    { { SENSORS_LM78J_FAN3, "fan3", NOMAP, NOMAP, R },  
     190                            LM78_SYSCTL_FAN3, VALUE(2), 0 }, 
     191    { { SENSORS_LM78J_FAN1_MIN, "fan1_min", SENSORS_LM78J_FAN1,  
     192                                SENSORS_LM78J_FAN1, RW },  
     193                                LM78_SYSCTL_FAN1, VALUE(1), 0 }, 
     194    { { SENSORS_LM78J_FAN2_MIN, "fan2_min", SENSORS_LM78J_FAN2,  
     195                                SENSORS_LM78J_FAN2, RW },  
     196                                LM78_SYSCTL_FAN2, VALUE(1), 0 }, 
     197    { { SENSORS_LM78J_FAN3_MIN, "fan3_min", SENSORS_LM78J_FAN3,  
     198                                SENSORS_LM78J_FAN3, RW },  
     199                                LM78_SYSCTL_FAN3, VALUE(1), 0 }, 
     200    { { SENSORS_LM78J_TEMP, "temp", NOMAP, NOMAP, R },  
     201                            LM78_SYSCTL_TEMP, VALUE(3), 1 }, 
     202    { { SENSORS_LM78J_TEMP_HYST, "temp_hyst", SENSORS_LM78J_TEMP,  
     203                                 SENSORS_LM78J_TEMP, RW },  
     204                                 LM78_SYSCTL_TEMP, VALUE(2), 1 }, 
     205    { { SENSORS_LM78J_TEMP_OVER, "temp_over", SENSORS_LM78J_TEMP,  
     206                                 SENSORS_LM78J_TEMP, RW },  
     207                                 LM78_SYSCTL_TEMP, VALUE(1), 1 }, 
     208    { { SENSORS_LM78J_VID, "vid", NOMAP, NOMAP, R },  
     209                           LM78_SYSCTL_VID, VALUE(1), 2 }, 
     210    { { SENSORS_LM78J_FAN1_DIV, "fan1_div", SENSORS_LM78J_FAN1, NOMAP, RW },  
     211                                LM78_SYSCTL_FAN_DIV, VALUE(1), 0 }, 
     212    { { SENSORS_LM78J_FAN2_DIV, "fan2_div", SENSORS_LM78J_FAN2, NOMAP, RW },  
     213                                LM78_SYSCTL_FAN_DIV, VALUE(2), 0 }, 
     214    { { SENSORS_LM78J_FAN3_DIV, "fan3_div", SENSORS_LM78J_FAN3, NOMAP, R },  
     215                                LM78_SYSCTL_FAN_DIV, VALUE(3), 0 }, 
     216    { { SENSORS_LM78J_ALARMS, "alarms", NOMAP, NOMAP, R },  
     217                              LM78_SYSCTL_ALARMS, VALUE(1), 0 }, 
     218    { { 0 }, 0 } 
    208219  }; 
    209220 
    210221static sensors_chip_feature lm79_features[] = 
    211222  {  
    212     { SENSORS_LM79_IN0, "in0", NOMAP, NOMAP,  
    213                         R, LM78_SYSCTL_IN0, VALUE(3), 2 }, 
    214     { SENSORS_LM79_IN1, "in1", NOMAP, NOMAP, 
    215                         R, LM78_SYSCTL_IN1, VALUE(3), 2 }, 
    216     { SENSORS_LM79_IN2, "in2", NOMAP, NOMAP, 
    217                         R, LM78_SYSCTL_IN2, VALUE(3), 2 }, 
    218     { SENSORS_LM79_IN3, "in3", NOMAP, NOMAP, 
    219                         R, LM78_SYSCTL_IN3, VALUE(3), 2 }, 
    220     { SENSORS_LM79_IN4, "in4", NOMAP, NOMAP, 
    221                         R, LM78_SYSCTL_IN4, VALUE(3), 2 }, 
    222     { SENSORS_LM79_IN5, "in5", NOMAP, NOMAP, 
    223                         R, LM78_SYSCTL_IN5, VALUE(3), 2 }, 
    224     { SENSORS_LM79_IN6, "in6", NOMAP, NOMAP, 
    225                         R, LM78_SYSCTL_IN6, VALUE(3), 2 }, 
    226     { SENSORS_LM79_IN0_MIN, "in0_min", SENSORS_LM79_IN0, SENSORS_LM79_IN0, 
    227                             RW, LM78_SYSCTL_IN0, VALUE(1), 2 }, 
    228     { SENSORS_LM79_IN1_MIN, "in1_min", SENSORS_LM79_IN1, SENSORS_LM79_IN1, 
    229                             RW, LM78_SYSCTL_IN1, VALUE(1), 2 }, 
    230     { SENSORS_LM79_IN2_MIN, "in2_min", SENSORS_LM79_IN2, SENSORS_LM79_IN2, 
    231                             RW, LM78_SYSCTL_IN2, VALUE(1), 2 }, 
    232     { SENSORS_LM79_IN3_MIN, "in3_min", SENSORS_LM79_IN3, SENSORS_LM79_IN3, 
    233                             RW, LM78_SYSCTL_IN3, VALUE(1), 2 }, 
    234     { SENSORS_LM79_IN4_MIN, "in4_min", SENSORS_LM79_IN4, SENSORS_LM79_IN4, 
    235                             RW, LM78_SYSCTL_IN4, VALUE(1), 2 }, 
     223    { { SENSORS_LM79_IN0, "in0", NOMAP, NOMAP, R },  
     224                        LM78_SYSCTL_IN0, VALUE(3), 2 }, 
     225    { { SENSORS_LM79_IN1, "in1", NOMAP, NOMAP, R },  
     226                        LM78_SYSCTL_IN1, VALUE(3), 2 }, 
     227    { { SENSORS_LM79_IN2, "in2", NOMAP, NOMAP, R },  
     228                        LM78_SYSCTL_IN2, VALUE(3), 2 }, 
     229    { { SENSORS_LM79_IN3, "in3", NOMAP, NOMAP, R },  
     230                        LM78_SYSCTL_IN3, VALUE(3), 2 }, 
     231    { { SENSORS_LM79_IN4, "in4", NOMAP, NOMAP, R },  
     232                        LM78_SYSCTL_IN4, VALUE(3), 2 }, 
     233    { { SENSORS_LM79_IN5, "in5", NOMAP, NOMAP, R },  
     234                        LM78_SYSCTL_IN5, VALUE(3), 2 }, 
     235    { { SENSORS_LM79_IN6, "in6", NOMAP, NOMAP, R },  
     236                        LM78_SYSCTL_IN6, VALUE(3), 2 }, 
     237    { { SENSORS_LM79_IN0_MIN, "in0_min", SENSORS_LM79_IN0, SENSORS_LM79_IN0, RW },  
     238                            LM78_SYSCTL_IN0, VALUE(1), 2 }, 
     239    { { SENSORS_LM79_IN1_MIN, "in1_min", SENSORS_LM79_IN1, SENSORS_LM79_IN1, RW },  
     240                            LM78_SYSCTL_IN1, VALUE(1), 2 }, 
     241    { { SENSORS_LM79_IN2_MIN, "in2_min", SENSORS_LM79_IN2, SENSORS_LM79_IN2, RW },  
     242                            LM78_SYSCTL_IN2, VALUE(1), 2 }, 
     243    { { SENSORS_LM79_IN3_MIN, "in3_min", SENSORS_LM79_IN3, SENSORS_LM79_IN3, RW },  
     244                            LM78_SYSCTL_IN3, VALUE(1), 2 }, 
     245    { { SENSORS_LM79_IN4_MIN, "in4_min", SENSORS_LM79_IN4, SENSORS_LM79_IN4, RW },  
     246                            LM78_SYSCTL_IN4, VALUE(1), 2 }, 
    236247/* swap 5 and 6 min/max because compute lines will be inverting */ 
    237     { SENSORS_LM79_IN5_MIN, "in5_min", SENSORS_LM79_IN5, SENSORS_LM79_IN5, 
    238                             RW, LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 }, 
    239     { SENSORS_LM79_IN6_MIN, "in6_min", SENSORS_LM79_IN6, SENSORS_LM79_IN6, 
    240                             RW, LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 }, 
    241     { SENSORS_LM79_IN0_MAX, "in0_max", SENSORS_LM79_IN0, SENSORS_LM79_IN0, 
    242                             RW, LM78_SYSCTL_IN0, VALUE(2), 2 }, 
    243     { SENSORS_LM79_IN1_MAX, "in1_max", SENSORS_LM79_IN1, SENSORS_LM79_IN1, 
    244                             RW, LM78_SYSCTL_IN1, VALUE(2), 2 }, 
    245     { SENSORS_LM79_IN2_MAX, "in2_max", SENSORS_LM79_IN2, SENSORS_LM79_IN2, 
    246                             RW, LM78_SYSCTL_IN2, VALUE(2), 2 }, 
    247     { SENSORS_LM79_IN3_MAX, "in3_max", SENSORS_LM79_IN3, SENSORS_LM79_IN3, 
    248                             RW, LM78_SYSCTL_IN3, VALUE(2), 2 }, 
    249     { SENSORS_LM79_IN4_MAX, "in4_max", SENSORS_LM79_IN4, SENSORS_LM79_IN4, 
    250                             RW, LM78_SYSCTL_IN4, VALUE(2), 2 }, 
    251     { SENSORS_LM79_IN5_MAX, "in5_max", SENSORS_LM79_IN5, SENSORS_LM79_IN5, 
    252                             RW, LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 }, 
    253     { SENSORS_LM79_IN6_MAX, "in6_max", SENSORS_LM79_IN6, SENSORS_LM79_IN6, 
    254                             RW, LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 }, 
    255     { SENSORS_LM79_FAN1, "fan1", NOMAP, NOMAP, 
    256                          R, LM78_SYSCTL_FAN1, VALUE(2), 0 }, 
    257     { SENSORS_LM79_FAN2, "fan2", NOMAP, NOMAP, 
    258                          R, LM78_SYSCTL_FAN2, VALUE(2), 0 }, 
    259     { SENSORS_LM79_FAN3, "fan3", NOMAP, NOMAP, 
    260                          R, LM78_SYSCTL_FAN3, VALUE(2), 0 }, 
    261     { SENSORS_LM79_FAN1_MIN, "fan1_min", SENSORS_LM79_FAN1, SENSORS_LM79_FAN1, 
    262                              RW, LM78_SYSCTL_FAN1, VALUE(1), 0 }, 
    263     { SENSORS_LM79_FAN2_MIN, "fan2_min", SENSORS_LM79_FAN2, SENSORS_LM79_FAN2
    264                              RW, LM78_SYSCTL_FAN2, VALUE(1), 0 }, 
    265     { SENSORS_LM79_FAN3_MIN, "fan3_min", SENSORS_LM79_FAN3, SENSORS_LM79_FAN3, 
    266                              RW, LM78_SYSCTL_FAN3, VALUE(1), 0 }, 
    267     { SENSORS_LM79_TEMP, "temp", NOMAP, NOMAP, 
    268                          R, LM78_SYSCTL_TEMP, VALUE(3), 1 }, 
    269     { SENSORS_LM79_TEMP_HYST, "temp_hyst", SENSORS_LM79_TEMP
    270                               SENSORS_LM79_TEMP, RW,  
    271                               LM78_SYSCTL_TEMP, VALUE(2), 1 }, 
    272     { SENSORS_LM79_TEMP_OVER, "temp_over", SENSORS_LM79_TEMP, 
    273                               SENSORS_LM79_TEMP, RW,  
    274                               LM78_SYSCTL_TEMP, VALUE(1), 1 }, 
    275     { SENSORS_LM79_VID, "vid", NOMAP, NOMAP, 
    276                         R, LM78_SYSCTL_VID, VALUE(1), 2 }, 
    277     { SENSORS_LM79_FAN1_DIV, "fan1_div", SENSORS_LM79_FAN1, NOMAP
    278                              RW, LM78_SYSCTL_FAN_DIV, VALUE(1),  
    279                              0 }, 
    280     { SENSORS_LM79_FAN2_DIV, "fan2_div", SENSORS_LM79_FAN2, NOMAP, 
    281                              RW, LM78_SYSCTL_FAN_DIV, VALUE(2),  
    282                              0 }, 
    283     { SENSORS_LM79_FAN3_DIV, "fan3_div", SENSORS_LM79_FAN3, NOMAP
    284                               R, LM78_SYSCTL_FAN_DIV, VALUE(3),  
    285                               0 }, 
    286     { SENSORS_LM79_ALARMS, "alarms", NOMAP, NOMAP,  
    287                            R, LM78_SYSCTL_ALARMS, VALUE(1), 0 }, 
    288     { 0 } 
     248    { { SENSORS_LM79_IN5_MIN, "in5_min", SENSORS_LM79_IN5, SENSORS_LM79_IN5, RW },  
     249                            LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 }, 
     250    { { SENSORS_LM79_IN6_MIN, "in6_min", SENSORS_LM79_IN6, SENSORS_LM79_IN6, RW },  
     251                            LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 }, 
     252    { { SENSORS_LM79_IN0_MAX, "in0_max", SENSORS_LM79_IN0, SENSORS_LM79_IN0, RW },  
     253                            LM78_SYSCTL_IN0, VALUE(2), 2 }, 
     254    { { SENSORS_LM79_IN1_MAX, "in1_max", SENSORS_LM79_IN1, SENSORS_LM79_IN1, RW },  
     255                            LM78_SYSCTL_IN1, VALUE(2), 2 }, 
     256    { { SENSORS_LM79_IN2_MAX, "in2_max", SENSORS_LM79_IN2, SENSORS_LM79_IN2, RW },  
     257                            LM78_SYSCTL_IN2, VALUE(2), 2 }, 
     258    { { SENSORS_LM79_IN3_MAX, "in3_max", SENSORS_LM79_IN3, SENSORS_LM79_IN3, RW },  
     259                            LM78_SYSCTL_IN3, VALUE(2), 2 }, 
     260    { { SENSORS_LM79_IN4_MAX, "in4_max", SENSORS_LM79_IN4, SENSORS_LM79_IN4, RW },  
     261                            LM78_SYSCTL_IN4, VALUE(2), 2 }, 
     262    { { SENSORS_LM79_IN5_MAX, "in5_max", SENSORS_LM79_IN5, SENSORS_LM79_IN5, RW },  
     263                            LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 }, 
     264    { { SENSORS_LM79_IN6_MAX, "in6_max", SENSORS_LM79_IN6, SENSORS_LM79_IN6, RW },  
     265                            LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 }, 
     266    { { SENSORS_LM79_FAN1, "fan1", NOMAP, NOMAP, R },  
     267                          LM78_SYSCTL_FAN1, VALUE(2), 0 }, 
     268    { { SENSORS_LM79_FAN2, "fan2", NOMAP, NOMAP, R },  
     269                          LM78_SYSCTL_FAN2, VALUE(2), 0 }, 
     270    { { SENSORS_LM79_FAN3, "fan3", NOMAP, NOMAP, R },  
     271                          LM78_SYSCTL_FAN3, VALUE(2), 0 }, 
     272    { { SENSORS_LM79_FAN1_MIN, "fan1_min", SENSORS_LM79_FAN1, SENSORS_LM79_FAN1,  
     273                               RW },  
     274                               LM78_SYSCTL_FAN1, VALUE(1), 0 }
     275    { { SENSORS_LM79_FAN2_MIN, "fan2_min", SENSORS_LM79_FAN2, SENSORS_LM79_FAN2,  
     276                               RW },  
     277                               LM78_SYSCTL_FAN2, VALUE(1), 0 }, 
     278    { { SENSORS_LM79_FAN3_MIN, "fan3_min", SENSORS_LM79_FAN3, SENSORS_LM79_FAN3,  
     279                               RW },  
     280                               LM78_SYSCTL_FAN3, VALUE(1), 0 }
     281    { { SENSORS_LM79_TEMP, "temp", NOMAP, NOMAP, R },  
     282                           LM78_SYSCTL_TEMP, VALUE(3), 1 }, 
     283    { { SENSORS_LM79_TEMP_HYST, "temp_hyst", SENSORS_LM79_TEMP,  
     284                                SENSORS_LM79_TEMP, RW },  
     285                                LM78_SYSCTL_TEMP, VALUE(2), 1 }, 
     286    { { SENSORS_LM79_TEMP_OVER, "temp_over", SENSORS_LM79_TEMP,  
     287                                SENSORS_LM79_TEMP, RW },  
     288                                LM78_SYSCTL_TEMP, VALUE(1), 1 }
     289    { { SENSORS_LM79_VID, "vid", NOMAP, NOMAP, R },  
     290                          LM78_SYSCTL_VID, VALUE(1), 2 }, 
     291    { { SENSORS_LM79_FAN1_DIV, "fan1_div", SENSORS_LM79_FAN1, NOMAP, RW },  
     292                               LM78_SYSCTL_FAN_DIV, VALUE(1), 0 }, 
     293    { { SENSORS_LM79_FAN2_DIV, "fan2_div", SENSORS_LM79_FAN2, NOMAP, RW },  
     294                               LM78_SYSCTL_FAN_DIV, VALUE(2), 0 }
     295    { { SENSORS_LM79_FAN3_DIV, "fan3_div", SENSORS_LM79_FAN3, NOMAP, R },  
     296                              LM78_SYSCTL_FAN_DIV, VALUE(3), 0 }, 
     297    { { SENSORS_LM79_ALARMS, "alarms", NOMAP, NOMAP, R },  
     298                            LM78_SYSCTL_ALARMS, VALUE(1), 0 }, 
     299    { { 0 }, 0 } 
    289300  }; 
    290301 
     
    292303static sensors_chip_feature lm75_features[] = 
    293304  { 
    294     { SENSORS_LM75_TEMP, "temp", NOMAP, NOMAP, 
    295                          R, LM75_SYSCTL_TEMP, VALUE(3), 1 }, 
    296     { SENSORS_LM75_TEMP_HYST, "temp_hyst", SENSORS_LM75_TEMP, 
    297                               SENSORS_LM75_TEMP, RW,  
    298                               LM75_SYSCTL_TEMP, VALUE(2), 1 }, 
    299     { SENSORS_LM75_TEMP_OVER, "temp_over", SENSORS_LM75_TEMP, 
    300                               SENSORS_LM75_TEMP, RW,  
    301                               LM75_SYSCTL_TEMP, VALUE(1), 1 }, 
    302     { 0 } 
     305    { { SENSORS_LM75_TEMP, "temp", NOMAP, NOMAP, R },  
     306                          LM75_SYSCTL_TEMP, VALUE(3), 1 }, 
     307    { { SENSORS_LM75_TEMP_HYST, "temp_hyst", SENSORS_LM75_TEMP,  
     308                                SENSORS_LM75_TEMP, RW },  
     309                                LM75_SYSCTL_TEMP, VALUE(2), 1 }, 
     310    { { SENSORS_LM75_TEMP_OVER, "temp_over", SENSORS_LM75_TEMP,  
     311                                SENSORS_LM75_TEMP, RW },  
     312                                LM75_SYSCTL_TEMP, VALUE(1), 1 }, 
     313    { { 0 }, 0 } 
    303314  }; 
    304315 
    305316static sensors_chip_feature adm1021_features[] = 
    306317  { 
    307     { SENSORS_ADM1021_TEMP, "temp", NOMAP, NOMAP, 
    308                               R, ADM1021_SYSCTL_TEMP, VALUE(3),  
    309                               0 }, 
    310     { SENSORS_ADM1021_TEMP_HYST, "temp_low", SENSORS_ADM1021_TEMP, 
    311                               SENSORS_ADM1021_TEMP, RW,  
    312                               ADM1021_SYSCTL_TEMP, VALUE(2), 0 }, 
    313     { SENSORS_ADM1021_TEMP_OVER, "temp_over", SENSORS_ADM1021_TEMP, 
    314                               SENSORS_ADM1021_TEMP, RW, 
    315                               ADM1021_SYSCTL_TEMP, VALUE(1), 0 }, 
    316     { SENSORS_ADM1021_REMOTE_TEMP, "remote_temp", NOMAP,  
    317                               NOMAP, R,  
    318                               ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 }, 
    319     { SENSORS_ADM1021_REMOTE_TEMP_HYST, "remote_temp_low",  
    320                               SENSORS_ADM1021_REMOTE_TEMP, 
    321                               SENSORS_ADM1021_REMOTE_TEMP, RW,  
    322                               ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 0 }, 
    323     { SENSORS_ADM1021_REMOTE_TEMP_OVER, "remote_temp_over",  
    324                               SENSORS_ADM1021_REMOTE_TEMP, 
    325                               SENSORS_ADM1021_REMOTE_TEMP, RW, 
    326                               ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 0 }, 
    327     { SENSORS_ADM1021_ALARMS, "alarms", NOMAP, 
    328                               NOMAP, R, 
    329                               ADM1021_SYSCTL_ALARMS, VALUE(1), 0 }, 
    330     { SENSORS_ADM1021_DIE_CODE, "die_code", NOMAP, 
    331 &nbs