[lm-sensors] generic chip support for sensors

Mark M. Hoffman mhoffman at lightlink.com
Sun Jan 7 20:36:26 CET 2007


Hi Bob:

* Bob Schlärmann <bob2 at 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.
> 
> It's a diff against current svn.

Very nice, thanks for doing this.  I have some minor requests though...

* please CC the lm-sensors list with all patches
* always prepare patches with lm-sensors as CWD, even if it only touches lib
* attach patches as plain text instead of base64 if possible

I fixed up your patch so it applies to latest SVN (adm1029 support was added
since then), and IMO we should apply this prior to releasing 2.10.2 even.

BTW: A binary diff between SVN and patched revisions of lib/chips.ao,
lib/proc.ao, and lib/access.ao comes up clean.  That is proof enough for me
that this transformation was done correctly.

Thanks again Bob.  Here's the revised patch; comments anyone?

Index: lib/access.c
===================================================================
--- lib/access.c	(revision 4285)
+++ lib/access.c	(working copy)
@@ -100,8 +100,8 @@
 	for (i = 0; sensors_chip_features_list[i].prefix; i++)
 		if (!strcasecmp(sensors_chip_features_list[i].prefix, prefix)) {
 			features = sensors_chip_features_list[i].feature;
-			for (j = 0; features[j].name; j++)
-				if (features[j].number == feature)
+			for (j = 0; features[j].data.name; j++)
+				if (features[j].data.number == feature)
 					return features + j;
 		}
 	return NULL;
@@ -119,8 +119,8 @@
 	for (i = 0; sensors_chip_features_list[i].prefix; i++)
 		if (!strcasecmp(sensors_chip_features_list[i].prefix, prefix)) {
 			features = sensors_chip_features_list[i].feature;
-			for (j = 0; features[j].name; j++)
-				if (!strcasecmp(features[j].name, feature))
+			for (j = 0; features[j].data.name; j++)
+				if (!strcasecmp(features[j].data.name, feature))
 					return features + j;
 		}
 	return NULL;
@@ -158,7 +158,7 @@
 
 	for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
 		for (i = 0; i < chip->labels_count; i++)
-			if (!strcasecmp(featureptr->name,chip->labels[i].name)){
+			if (!strcasecmp(featureptr->data.name,chip->labels[i].name)){
 				if (*result)
 					free(*result);
 				if (!(*result = strdup(chip->labels[i].value)))
@@ -168,7 +168,7 @@
 			}
 
 	/* No label, return the feature name instead */
-	if (!(*result = strdup(featureptr->name)))
+	if (!(*result = strdup(featureptr->data.name)))
 		sensors_fatal_error("sensors_get_label",
 				    "Allocating label text");
 	return 0;
@@ -187,18 +187,18 @@
 		return -SENSORS_ERR_WILDCARDS;
 	if (!(featureptr = sensors_lookup_feature_nr(name.prefix, feature)))
 		return -SENSORS_ERR_NO_ENTRY;
-	if (featureptr->logical_mapping == SENSORS_NO_MAPPING)
+	if (featureptr->data.mapping == SENSORS_NO_MAPPING)
 		alt_featureptr = NULL;
 	else if (!(alt_featureptr =
 		   sensors_lookup_feature_nr(name.prefix,
-					     featureptr->logical_mapping)))
+					     featureptr->data.mapping)))
 		return -SENSORS_ERR_NO_ENTRY;
 	for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
 		for (i = 0; i < chip->ignores_count; i++)
-			if (!strcasecmp(featureptr->name, chip->ignores[i].name))
+			if (!strcasecmp(featureptr->data.name, chip->ignores[i].name))
 				return 0; /* Exact match always overrules! */
 			else if (alt_featureptr &&
-				 !strcasecmp(alt_featureptr->name,
+				 !strcasecmp(alt_featureptr->data.name,
 					     chip->ignores[i].name))
 				res = 0;
 	return res;
@@ -221,20 +221,20 @@
 		return -SENSORS_ERR_WILDCARDS;
 	if (!(main_feature = sensors_lookup_feature_nr(name.prefix, feature)))
 		return -SENSORS_ERR_NO_ENTRY;
-	if (main_feature->compute_mapping == SENSORS_NO_MAPPING)
+	if (main_feature->data.compute_mapping == SENSORS_NO_MAPPING)
 		alt_feature = NULL;
 	else if (!(alt_feature = sensors_lookup_feature_nr(name.prefix,
-					main_feature->compute_mapping)))
+					main_feature->data.compute_mapping)))
 		return -SENSORS_ERR_NO_ENTRY;
-	if (!(main_feature->mode & SENSORS_MODE_R))
+	if (!(main_feature->data.mode & SENSORS_MODE_R))
 		return -SENSORS_ERR_ACCESS_R;
 	for (chip = NULL;
 	     !expr && (chip = sensors_for_all_config_chips(name, chip));)
 		for (i = 0; !final_expr && (i < chip->computes_count); i++) {
-			if (!strcasecmp(main_feature->name, chip->computes[i].name)) {
+			if (!strcasecmp(main_feature->data.name, chip->computes[i].name)) {
 				expr = chip->computes[i].from_proc;
 				final_expr = 1;
-			} else if (alt_feature && !strcasecmp(alt_feature->name,
+			} else if (alt_feature && !strcasecmp(alt_feature->data.name,
 					       chip->computes[i].name)) {
 				expr = chip->computes[i].from_proc;
 			}
@@ -265,20 +265,20 @@
 		return -SENSORS_ERR_WILDCARDS;
 	if (!(main_feature = sensors_lookup_feature_nr(name.prefix, feature)))
 		return -SENSORS_ERR_NO_ENTRY;
-	if (main_feature->compute_mapping == SENSORS_NO_MAPPING)
+	if (main_feature->data.compute_mapping == SENSORS_NO_MAPPING)
 		alt_feature = NULL;
 	else if (!(alt_feature = sensors_lookup_feature_nr(name.prefix,
-					     main_feature->compute_mapping)))
+					     main_feature->data.compute_mapping)))
 		return -SENSORS_ERR_NO_ENTRY;
-	if (!(main_feature->mode & SENSORS_MODE_W))
+	if (!(main_feature->data.mode & SENSORS_MODE_W))
 		return -SENSORS_ERR_ACCESS_W;
 	for (chip = NULL;
 	     !expr && (chip = sensors_for_all_config_chips(name, chip));)
 		for (i = 0; !final_expr && (i < chip->computes_count); i++)
-			if (!strcasecmp(main_feature->name, chip->computes[i].name)) {
+			if (!strcasecmp(main_feature->data.name, chip->computes[i].name)) {
 				expr = chip->computes->to_proc;
 				final_expr = 1;
-			} else if (alt_feature && !strcasecmp(alt_feature->name,
+			} else if (alt_feature && !strcasecmp(alt_feature->data.name,
 					       chip->computes[i].name)) {
 				expr = chip->computes[i].to_proc;
 			}
@@ -334,24 +334,23 @@
 		if (!strcasecmp(sensors_chip_features_list[i].prefix, name.prefix)) {
 			feature_list = sensors_chip_features_list[i].feature;
 			if (!*nr1 && !*nr2) {	/* Return the first entry */
-				if (!feature_list[0].name)	/* The list may be empty */
+				if (!feature_list[0].data.name)	/* The list may be empty */
 					return NULL;
 				*nr1 = *nr2 = 1;
-				return (sensors_feature_data *)feature_list;
+				return &feature_list->data;
 			}
-			for ((*nr2)++; feature_list[*nr2 - 1].name; (*nr2)++)
-				if (feature_list[*nr2 - 1].logical_mapping ==
-				    feature_list[*nr1 - 1].number)
-					return (sensors_feature_data *)
-						(feature_list + *nr2 - 1);
+			for ((*nr2)++; feature_list[*nr2 - 1].data.name; (*nr2)++)
+				if (feature_list[*nr2 - 1].data.mapping ==
+				    feature_list[*nr1 - 1].data.number)
+					return &((feature_list + *nr2 - 1)->data);
 			for ((*nr1)++;
-			     feature_list[*nr1 - 1].name
-			     && (feature_list[*nr1 - 1].logical_mapping !=
+			     feature_list[*nr1 - 1].data.name
+			     && (feature_list[*nr1 - 1].data.mapping !=
 				 SENSORS_NO_MAPPING); (*nr1)++) ;
 			*nr2 = *nr1;
-			if (!feature_list[*nr1 - 1].name)
+			if (!feature_list[*nr1 - 1].data.name)
 				return NULL;
-			return (sensors_feature_data *)(feature_list + *nr1 - 1);
+			return &((feature_list + *nr1 - 1)->data);
 		}
 	return NULL;
 }
@@ -375,7 +374,7 @@
 		if (!(feature = sensors_lookup_feature_name(chipname.prefix,
 							    expr->data.var)))
 			return SENSORS_ERR_NO_ENTRY;
-		if (!(res = sensors_get_feature(chipname, feature->number, result)))
+		if (!(res = sensors_get_feature(chipname, feature->data.number, result)))
 			return res;
 		return 0;
 	}
@@ -439,7 +438,7 @@
 				err = SENSORS_ERR_NO_ENTRY;
 				continue;
 			}
-			feature_nr = feature->number;
+			feature_nr = feature->data.number;
 
 			/* Check whether we already set this feature */
 			for (j = 0; j < feature_count; j++)
Index: lib/sensors.h
===================================================================
--- lib/sensors.h	(revision 4285)
+++ lib/sensors.h	(working copy)
@@ -131,7 +131,7 @@
   int number;
   const char *name;
   int mapping;
-  int unused;
+  int compute_mapping;
   int mode;
 } sensors_feature_data;
 
Index: lib/proc.c
===================================================================
--- lib/proc.c	(revision 4285)
+++ lib/proc.c	(working copy)
@@ -308,7 +308,7 @@
 static int getsysname(const sensors_chip_feature *feature, char *sysname,
 	int *sysmag, char *altsysname)
 {
-	const char * name = feature->name;
+	const char * name = feature->data.name;
 	char last;
 	char check; /* used to verify end of string */
 	int num;
Index: lib/chips.c
===================================================================
--- lib/chips.c	(revision 4285)
+++ lib/chips.c	(working copy)
@@ -44,1204 +44,1158 @@
 
 static sensors_chip_feature lm78_features[] =
   { 
-    { SENSORS_LM78_IN0, "in0", NOMAP, NOMAP, 
-                        R, LM78_SYSCTL_IN0, VALUE(3), 2 },
-    { SENSORS_LM78_IN1, "in1", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN1, VALUE(3), 2 },
-    { SENSORS_LM78_IN2, "in2", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN2, VALUE(3), 2 },
-    { SENSORS_LM78_IN3, "in3", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN3, VALUE(3), 2 },
-    { SENSORS_LM78_IN4, "in4", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN4, VALUE(3), 2 },
-    { SENSORS_LM78_IN5, "in5", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN5, VALUE(3), 2 },
-    { SENSORS_LM78_IN6, "in6", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN6, VALUE(3), 2 },
-    { SENSORS_LM78_IN0_MIN, "in0_min", SENSORS_LM78_IN0, SENSORS_LM78_IN0,
-                            RW, LM78_SYSCTL_IN0, VALUE(1), 2 },
-    { SENSORS_LM78_IN1_MIN, "in1_min", SENSORS_LM78_IN1, SENSORS_LM78_IN1,
-                            RW, LM78_SYSCTL_IN1, VALUE(1), 2 },
-    { SENSORS_LM78_IN2_MIN, "in2_min", SENSORS_LM78_IN2, SENSORS_LM78_IN2,
-                            RW, LM78_SYSCTL_IN2, VALUE(1), 2 },
-    { SENSORS_LM78_IN3_MIN, "in3_min", SENSORS_LM78_IN3, SENSORS_LM78_IN3,
-                            RW, LM78_SYSCTL_IN3, VALUE(1), 2 },
-    { SENSORS_LM78_IN4_MIN, "in4_min", SENSORS_LM78_IN4, SENSORS_LM78_IN4,
-                            RW, LM78_SYSCTL_IN4, VALUE(1), 2 },
+    { { SENSORS_LM78_IN0, "in0", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN0, VALUE(3), 2 },
+    { { SENSORS_LM78_IN1, "in1", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN1, VALUE(3), 2 },
+    { { SENSORS_LM78_IN2, "in2", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN2, VALUE(3), 2 },
+    { { SENSORS_LM78_IN3, "in3", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN3, VALUE(3), 2 },
+    { { SENSORS_LM78_IN4, "in4", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN4, VALUE(3), 2 },
+    { { SENSORS_LM78_IN5, "in5", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN5, VALUE(3), 2 },
+    { { SENSORS_LM78_IN6, "in6", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN6, VALUE(3), 2 },
+    { { SENSORS_LM78_IN0_MIN, "in0_min", SENSORS_LM78_IN0, SENSORS_LM78_IN0, RW }, 
+                              LM78_SYSCTL_IN0, VALUE(1), 2 },
+    { { SENSORS_LM78_IN1_MIN, "in1_min", SENSORS_LM78_IN1, SENSORS_LM78_IN1, RW }, 
+                              LM78_SYSCTL_IN1, VALUE(1), 2 },
+    { { SENSORS_LM78_IN2_MIN, "in2_min", SENSORS_LM78_IN2, SENSORS_LM78_IN2, RW }, 
+                              LM78_SYSCTL_IN2, VALUE(1), 2 },
+    { { SENSORS_LM78_IN3_MIN, "in3_min", SENSORS_LM78_IN3, SENSORS_LM78_IN3, RW }, 
+                              LM78_SYSCTL_IN3, VALUE(1), 2 },
+    { { SENSORS_LM78_IN4_MIN, "in4_min", SENSORS_LM78_IN4, SENSORS_LM78_IN4, RW }, 
+                              LM78_SYSCTL_IN4, VALUE(1), 2 },
 /* swap 5 and 6 min/max because compute lines will be inverting */
-    { SENSORS_LM78_IN5_MIN, "in5_min", SENSORS_LM78_IN5, SENSORS_LM78_IN5,
-                            RW, LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
-    { SENSORS_LM78_IN6_MIN, "in6_min", SENSORS_LM78_IN6, SENSORS_LM78_IN6,
-                            RW, LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
-    { SENSORS_LM78_IN0_MAX, "in0_max", SENSORS_LM78_IN0, SENSORS_LM78_IN0,
-                            RW, LM78_SYSCTL_IN0, VALUE(2), 2 },
-    { SENSORS_LM78_IN1_MAX, "in1_max", SENSORS_LM78_IN1, SENSORS_LM78_IN1,
-                            RW, LM78_SYSCTL_IN1, VALUE(2), 2 },
-    { SENSORS_LM78_IN2_MAX, "in2_max", SENSORS_LM78_IN2, SENSORS_LM78_IN2,
-                            RW, LM78_SYSCTL_IN2, VALUE(2), 2 },
-    { SENSORS_LM78_IN3_MAX, "in3_max", SENSORS_LM78_IN3, SENSORS_LM78_IN3,
-                            RW, LM78_SYSCTL_IN3, VALUE(2), 2 },
-    { SENSORS_LM78_IN4_MAX, "in4_max", SENSORS_LM78_IN4, SENSORS_LM78_IN4,
-                            RW, LM78_SYSCTL_IN4, VALUE(2), 2 },
-    { SENSORS_LM78_IN5_MAX, "in5_max", SENSORS_LM78_IN5, SENSORS_LM78_IN5,
-                            RW, LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
-    { SENSORS_LM78_IN6_MAX, "in6_max", SENSORS_LM78_IN6, SENSORS_LM78_IN6,
-                            RW, LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
-    { SENSORS_LM78_FAN1, "fan1", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_LM78_FAN2, "fan2", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_LM78_FAN3, "fan3", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_FAN3, VALUE(2), 0 },
-    { SENSORS_LM78_FAN1_MIN, "fan1_min", SENSORS_LM78_FAN1, SENSORS_LM78_FAN1,
-                             RW, LM78_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_LM78_FAN2_MIN, "fan2_min", SENSORS_LM78_FAN2, SENSORS_LM78_FAN2,
-                             RW, LM78_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_LM78_FAN3_MIN, "fan3_min", SENSORS_LM78_FAN3, SENSORS_LM78_FAN3,
-                             RW, LM78_SYSCTL_FAN3, VALUE(1), 0 },
-    { SENSORS_LM78_TEMP, "temp", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_TEMP, VALUE(3), 1 },
-    { SENSORS_LM78_TEMP_HYST, "temp_hyst", SENSORS_LM78_TEMP,
-                              SENSORS_LM78_TEMP, RW, 
-                              LM78_SYSCTL_TEMP, VALUE(2), 1 },
-    { SENSORS_LM78_TEMP_OVER, "temp_over", SENSORS_LM78_TEMP,
-                              SENSORS_LM78_TEMP, RW, 
-                              LM78_SYSCTL_TEMP, VALUE(1), 1 },
-    { SENSORS_LM78_VID, "vid", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_VID, VALUE(1), 2 },
-    { SENSORS_LM78_FAN1_DIV, "fan1_div", SENSORS_LM78_FAN1, NOMAP,
-                             RW, LM78_SYSCTL_FAN_DIV, VALUE(1), 
-                             0 },
-    { SENSORS_LM78_FAN2_DIV, "fan2_div", SENSORS_LM78_FAN2, NOMAP,
-                             RW, LM78_SYSCTL_FAN_DIV, VALUE(2), 
-                             0 },
-    { SENSORS_LM78_FAN3_DIV, "fan3_div", SENSORS_LM78_FAN3, NOMAP,
-                              R, LM78_SYSCTL_FAN_DIV, VALUE(3), 
-                              0 },
-    { SENSORS_LM78_ALARMS, "alarms", NOMAP, NOMAP, 
-                           R, LM78_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_LM78_IN5_MIN, "in5_min", SENSORS_LM78_IN5, SENSORS_LM78_IN5, RW }, 
+                              LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
+    { { SENSORS_LM78_IN6_MIN, "in6_min", SENSORS_LM78_IN6, SENSORS_LM78_IN6, RW }, 
+                              LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
+    { { SENSORS_LM78_IN0_MAX, "in0_max", SENSORS_LM78_IN0, SENSORS_LM78_IN0, RW }, 
+                              LM78_SYSCTL_IN0, VALUE(2), 2 },
+    { { SENSORS_LM78_IN1_MAX, "in1_max", SENSORS_LM78_IN1, SENSORS_LM78_IN1, RW }, 
+                              LM78_SYSCTL_IN1, VALUE(2), 2 },
+    { { SENSORS_LM78_IN2_MAX, "in2_max", SENSORS_LM78_IN2, SENSORS_LM78_IN2, RW }, 
+                              LM78_SYSCTL_IN2, VALUE(2), 2 },
+    { { SENSORS_LM78_IN3_MAX, "in3_max", SENSORS_LM78_IN3, SENSORS_LM78_IN3, RW }, 
+                              LM78_SYSCTL_IN3, VALUE(2), 2 },
+    { { SENSORS_LM78_IN4_MAX, "in4_max", SENSORS_LM78_IN4, SENSORS_LM78_IN4, RW }, 
+                              LM78_SYSCTL_IN4, VALUE(2), 2 },
+    { { SENSORS_LM78_IN5_MAX, "in5_max", SENSORS_LM78_IN5, SENSORS_LM78_IN5, RW }, 
+                              LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
+    { { SENSORS_LM78_IN6_MAX, "in6_max", SENSORS_LM78_IN6, SENSORS_LM78_IN6, RW }, 
+                              LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
+    { { SENSORS_LM78_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_LM78_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_LM78_FAN3, "fan3", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_FAN3, VALUE(2), 0 },
+    { { SENSORS_LM78_FAN1_MIN, "fan1_min", SENSORS_LM78_FAN1, SENSORS_LM78_FAN1, 
+                               RW }, 
+                               LM78_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_LM78_FAN2_MIN, "fan2_min", SENSORS_LM78_FAN2, SENSORS_LM78_FAN2, 
+                               RW }, 
+                               LM78_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_LM78_FAN3_MIN, "fan3_min", SENSORS_LM78_FAN3, SENSORS_LM78_FAN3, 
+                               RW }, 
+                               LM78_SYSCTL_FAN3, VALUE(1), 0 },
+    { { SENSORS_LM78_TEMP, "temp", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_TEMP, VALUE(3), 1 },
+    { { SENSORS_LM78_TEMP_HYST, "temp_hyst", SENSORS_LM78_TEMP, 
+                                SENSORS_LM78_TEMP, RW }, 
+                                LM78_SYSCTL_TEMP, VALUE(2), 1 },
+    { { SENSORS_LM78_TEMP_OVER, "temp_over", SENSORS_LM78_TEMP, 
+                                SENSORS_LM78_TEMP, RW }, 
+                                LM78_SYSCTL_TEMP, VALUE(1), 1 },
+    { { SENSORS_LM78_VID, "vid", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_VID, VALUE(1), 2 },
+    { { SENSORS_LM78_FAN1_DIV, "fan1_div", SENSORS_LM78_FAN1, NOMAP, RW }, 
+                               LM78_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_LM78_FAN2_DIV, "fan2_div", SENSORS_LM78_FAN2, NOMAP, RW }, 
+                               LM78_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_LM78_FAN3_DIV, "fan3_div", SENSORS_LM78_FAN3, NOMAP, R }, 
+                               LM78_SYSCTL_FAN_DIV, VALUE(3), 0 },
+    { { SENSORS_LM78_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                             LM78_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature lm78j_features[] =
   { 
-    { SENSORS_LM78J_IN0, "in0", NOMAP, NOMAP, 
-                         R, LM78_SYSCTL_IN0, VALUE(3), 2 },
-    { SENSORS_LM78J_IN1, "in1", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_IN1, VALUE(3), 2 },
-    { SENSORS_LM78J_IN2, "in2", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_IN2, VALUE(3), 2 },
-    { SENSORS_LM78J_IN3, "in3", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_IN3, VALUE(3), 2 },
-    { SENSORS_LM78J_IN4, "in4", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_IN4, VALUE(3), 2 },
-    { SENSORS_LM78J_IN5, "in5", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_IN5, VALUE(3), 2 },
-    { SENSORS_LM78J_IN6, "in6", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_IN6, VALUE(3), 2 },
-    { SENSORS_LM78J_IN0_MIN, "in0_min", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0,
-                             RW, LM78_SYSCTL_IN0, VALUE(1), 2 },
-    { SENSORS_LM78J_IN1_MIN, "in1_min", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1,
-                             RW, LM78_SYSCTL_IN1, VALUE(1), 2 },
-    { SENSORS_LM78J_IN2_MIN, "in2_min", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2,
-                             RW, LM78_SYSCTL_IN2, VALUE(1), 2 },
-    { SENSORS_LM78J_IN3_MIN, "in3_min", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3,
-                             RW, LM78_SYSCTL_IN3, VALUE(1), 2 },
-    { SENSORS_LM78J_IN4_MIN, "in4_min", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4,
-                             RW, LM78_SYSCTL_IN4, VALUE(1), 2 },
+    { { SENSORS_LM78J_IN0, "in0", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN0, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN1, "in1", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN1, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN2, "in2", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN2, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN3, "in3", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN3, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN4, "in4", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN4, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN5, "in5", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN5, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN6, "in6", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_IN6, VALUE(3), 2 },
+    { { SENSORS_LM78J_IN0_MIN, "in0_min", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0, 
+                               RW }, 
+                               LM78_SYSCTL_IN0, VALUE(1), 2 },
+    { { SENSORS_LM78J_IN1_MIN, "in1_min", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1, 
+                               RW }, 
+                               LM78_SYSCTL_IN1, VALUE(1), 2 },
+    { { SENSORS_LM78J_IN2_MIN, "in2_min", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2, 
+                               RW }, 
+                               LM78_SYSCTL_IN2, VALUE(1), 2 },
+    { { SENSORS_LM78J_IN3_MIN, "in3_min", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3, 
+                               RW }, 
+                               LM78_SYSCTL_IN3, VALUE(1), 2 },
+    { { SENSORS_LM78J_IN4_MIN, "in4_min", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4, 
+                               RW }, 
+                               LM78_SYSCTL_IN4, VALUE(1), 2 },
 /* swap 5 and 6 min/max because compute lines will be inverting */
-    { SENSORS_LM78J_IN5_MIN, "in5_min", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5,
-                             RW, LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
-    { SENSORS_LM78J_IN6_MIN, "in6_min", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6,
-                             RW, LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
-    { SENSORS_LM78J_IN0_MAX, "in0_max", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0,
-                             RW, LM78_SYSCTL_IN0, VALUE(2), 2 },
-    { SENSORS_LM78J_IN1_MAX, "in1_max", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1,
-                             RW, LM78_SYSCTL_IN1, VALUE(2), 2 },
-    { SENSORS_LM78J_IN2_MAX, "in2_max", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2,
-                             RW, LM78_SYSCTL_IN2, VALUE(2), 2 },
-    { SENSORS_LM78J_IN3_MAX, "in3_max", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3,
-                             RW, LM78_SYSCTL_IN3, VALUE(2), 2 },
-    { SENSORS_LM78J_IN4_MAX, "in4_max", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4,
-                             RW, LM78_SYSCTL_IN4, VALUE(2), 2 },
-    { SENSORS_LM78J_IN5_MAX, "in5_max", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5,
-                             RW, LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
-    { SENSORS_LM78J_IN6_MAX, "in6_max", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6,
-                             RW, LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
-    { SENSORS_LM78J_FAN1, "fan1", NOMAP, NOMAP,
-                          R, LM78_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_LM78J_FAN2, "fan2", NOMAP, NOMAP,
-                          R, LM78_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_LM78J_FAN3, "fan3", NOMAP, NOMAP,
-                          R, LM78_SYSCTL_FAN3, VALUE(2), 0 },
-    { SENSORS_LM78J_FAN1_MIN, "fan1_min", SENSORS_LM78J_FAN1,
-                              SENSORS_LM78J_FAN1, RW, 
-                              LM78_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_LM78J_FAN2_MIN, "fan2_min", SENSORS_LM78J_FAN2,
-                              SENSORS_LM78J_FAN2, RW, 
-                              LM78_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_LM78J_FAN3_MIN, "fan3_min", SENSORS_LM78J_FAN3,
-                              SENSORS_LM78J_FAN3, RW, 
-                              LM78_SYSCTL_FAN3, VALUE(1), 0 },
-    { SENSORS_LM78J_TEMP, "temp", NOMAP, NOMAP,
-                          R, LM78_SYSCTL_TEMP, VALUE(3), 1 },
-    { SENSORS_LM78J_TEMP_HYST, "temp_hyst", SENSORS_LM78J_TEMP,
-                               SENSORS_LM78J_TEMP, RW, 
-                               LM78_SYSCTL_TEMP, VALUE(2), 1 },
-    { SENSORS_LM78J_TEMP_OVER, "temp_over", SENSORS_LM78J_TEMP,
-                               SENSORS_LM78J_TEMP, RW, 
-                               LM78_SYSCTL_TEMP, VALUE(1), 1 },
-    { SENSORS_LM78J_VID, "vid", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_VID, VALUE(1), 2 },
-    { SENSORS_LM78J_FAN1_DIV, "fan1_div", SENSORS_LM78J_FAN1,
-                              NOMAP, RW, 
-                              LM78_SYSCTL_FAN_DIV, VALUE(1), 0 },
-    { SENSORS_LM78J_FAN2_DIV, "fan2_div", SENSORS_LM78J_FAN2,
-                              NOMAP, RW,
-                              LM78_SYSCTL_FAN_DIV, VALUE(2), 0 },
-    { SENSORS_LM78J_FAN3_DIV, "fan3_div", SENSORS_LM78J_FAN3,
-                              NOMAP, R,
-                              LM78_SYSCTL_FAN_DIV, VALUE(3), 0 },
-    { SENSORS_LM78J_ALARMS, "alarms", NOMAP, NOMAP, 
-                            R, LM78_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_LM78J_IN5_MIN, "in5_min", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5, 
+                               RW }, 
+                               LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
+    { { SENSORS_LM78J_IN6_MIN, "in6_min", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6, 
+                               RW }, 
+                               LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
+    { { SENSORS_LM78J_IN0_MAX, "in0_max", SENSORS_LM78J_IN0, SENSORS_LM78J_IN0, 
+                               RW }, 
+                               LM78_SYSCTL_IN0, VALUE(2), 2 },
+    { { SENSORS_LM78J_IN1_MAX, "in1_max", SENSORS_LM78J_IN1, SENSORS_LM78J_IN1, 
+                               RW }, 
+                               LM78_SYSCTL_IN1, VALUE(2), 2 },
+    { { SENSORS_LM78J_IN2_MAX, "in2_max", SENSORS_LM78J_IN2, SENSORS_LM78J_IN2, 
+                               RW }, 
+                               LM78_SYSCTL_IN2, VALUE(2), 2 },
+    { { SENSORS_LM78J_IN3_MAX, "in3_max", SENSORS_LM78J_IN3, SENSORS_LM78J_IN3, 
+                               RW }, 
+                               LM78_SYSCTL_IN3, VALUE(2), 2 },
+    { { SENSORS_LM78J_IN4_MAX, "in4_max", SENSORS_LM78J_IN4, SENSORS_LM78J_IN4, 
+                               RW }, 
+                               LM78_SYSCTL_IN4, VALUE(2), 2 },
+    { { SENSORS_LM78J_IN5_MAX, "in5_max", SENSORS_LM78J_IN5, SENSORS_LM78J_IN5, 
+                               RW }, 
+                               LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
+    { { SENSORS_LM78J_IN6_MAX, "in6_max", SENSORS_LM78J_IN6, SENSORS_LM78J_IN6, 
+                               RW }, 
+                               LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
+    { { SENSORS_LM78J_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                            LM78_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_LM78J_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                            LM78_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_LM78J_FAN3, "fan3", NOMAP, NOMAP, R }, 
+                            LM78_SYSCTL_FAN3, VALUE(2), 0 },
+    { { SENSORS_LM78J_FAN1_MIN, "fan1_min", SENSORS_LM78J_FAN1, 
+                                SENSORS_LM78J_FAN1, RW }, 
+                                LM78_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_LM78J_FAN2_MIN, "fan2_min", SENSORS_LM78J_FAN2, 
+                                SENSORS_LM78J_FAN2, RW }, 
+                                LM78_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_LM78J_FAN3_MIN, "fan3_min", SENSORS_LM78J_FAN3, 
+                                SENSORS_LM78J_FAN3, RW }, 
+                                LM78_SYSCTL_FAN3, VALUE(1), 0 },
+    { { SENSORS_LM78J_TEMP, "temp", NOMAP, NOMAP, R }, 
+                            LM78_SYSCTL_TEMP, VALUE(3), 1 },
+    { { SENSORS_LM78J_TEMP_HYST, "temp_hyst", SENSORS_LM78J_TEMP, 
+                                 SENSORS_LM78J_TEMP, RW }, 
+                                 LM78_SYSCTL_TEMP, VALUE(2), 1 },
+    { { SENSORS_LM78J_TEMP_OVER, "temp_over", SENSORS_LM78J_TEMP, 
+                                 SENSORS_LM78J_TEMP, RW }, 
+                                 LM78_SYSCTL_TEMP, VALUE(1), 1 },
+    { { SENSORS_LM78J_VID, "vid", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_VID, VALUE(1), 2 },
+    { { SENSORS_LM78J_FAN1_DIV, "fan1_div", SENSORS_LM78J_FAN1, NOMAP, RW }, 
+                                LM78_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_LM78J_FAN2_DIV, "fan2_div", SENSORS_LM78J_FAN2, NOMAP, RW }, 
+                                LM78_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_LM78J_FAN3_DIV, "fan3_div", SENSORS_LM78J_FAN3, NOMAP, R }, 
+                                LM78_SYSCTL_FAN_DIV, VALUE(3), 0 },
+    { { SENSORS_LM78J_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                              LM78_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature lm79_features[] =
   { 
-    { SENSORS_LM79_IN0, "in0", NOMAP, NOMAP, 
-                        R, LM78_SYSCTL_IN0, VALUE(3), 2 },
-    { SENSORS_LM79_IN1, "in1", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN1, VALUE(3), 2 },
-    { SENSORS_LM79_IN2, "in2", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN2, VALUE(3), 2 },
-    { SENSORS_LM79_IN3, "in3", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN3, VALUE(3), 2 },
-    { SENSORS_LM79_IN4, "in4", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN4, VALUE(3), 2 },
-    { SENSORS_LM79_IN5, "in5", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN5, VALUE(3), 2 },
-    { SENSORS_LM79_IN6, "in6", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_IN6, VALUE(3), 2 },
-    { SENSORS_LM79_IN0_MIN, "in0_min", SENSORS_LM79_IN0, SENSORS_LM79_IN0,
-                            RW, LM78_SYSCTL_IN0, VALUE(1), 2 },
-    { SENSORS_LM79_IN1_MIN, "in1_min", SENSORS_LM79_IN1, SENSORS_LM79_IN1,
-                            RW, LM78_SYSCTL_IN1, VALUE(1), 2 },
-    { SENSORS_LM79_IN2_MIN, "in2_min", SENSORS_LM79_IN2, SENSORS_LM79_IN2,
-                            RW, LM78_SYSCTL_IN2, VALUE(1), 2 },
-    { SENSORS_LM79_IN3_MIN, "in3_min", SENSORS_LM79_IN3, SENSORS_LM79_IN3,
-                            RW, LM78_SYSCTL_IN3, VALUE(1), 2 },
-    { SENSORS_LM79_IN4_MIN, "in4_min", SENSORS_LM79_IN4, SENSORS_LM79_IN4,
-                            RW, LM78_SYSCTL_IN4, VALUE(1), 2 },
+    { { SENSORS_LM79_IN0, "in0", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN0, VALUE(3), 2 },
+    { { SENSORS_LM79_IN1, "in1", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN1, VALUE(3), 2 },
+    { { SENSORS_LM79_IN2, "in2", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN2, VALUE(3), 2 },
+    { { SENSORS_LM79_IN3, "in3", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN3, VALUE(3), 2 },
+    { { SENSORS_LM79_IN4, "in4", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN4, VALUE(3), 2 },
+    { { SENSORS_LM79_IN5, "in5", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN5, VALUE(3), 2 },
+    { { SENSORS_LM79_IN6, "in6", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_IN6, VALUE(3), 2 },
+    { { SENSORS_LM79_IN0_MIN, "in0_min", SENSORS_LM79_IN0, SENSORS_LM79_IN0, RW }, 
+                              LM78_SYSCTL_IN0, VALUE(1), 2 },
+    { { SENSORS_LM79_IN1_MIN, "in1_min", SENSORS_LM79_IN1, SENSORS_LM79_IN1, RW }, 
+                              LM78_SYSCTL_IN1, VALUE(1), 2 },
+    { { SENSORS_LM79_IN2_MIN, "in2_min", SENSORS_LM79_IN2, SENSORS_LM79_IN2, RW }, 
+                              LM78_SYSCTL_IN2, VALUE(1), 2 },
+    { { SENSORS_LM79_IN3_MIN, "in3_min", SENSORS_LM79_IN3, SENSORS_LM79_IN3, RW }, 
+                              LM78_SYSCTL_IN3, VALUE(1), 2 },
+    { { SENSORS_LM79_IN4_MIN, "in4_min", SENSORS_LM79_IN4, SENSORS_LM79_IN4, RW }, 
+                              LM78_SYSCTL_IN4, VALUE(1), 2 },
 /* swap 5 and 6 min/max because compute lines will be inverting */
-    { SENSORS_LM79_IN5_MIN, "in5_min", SENSORS_LM79_IN5, SENSORS_LM79_IN5,
-                            RW, LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
-    { SENSORS_LM79_IN6_MIN, "in6_min", SENSORS_LM79_IN6, SENSORS_LM79_IN6,
-                            RW, LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
-    { SENSORS_LM79_IN0_MAX, "in0_max", SENSORS_LM79_IN0, SENSORS_LM79_IN0,
-                            RW, LM78_SYSCTL_IN0, VALUE(2), 2 },
-    { SENSORS_LM79_IN1_MAX, "in1_max", SENSORS_LM79_IN1, SENSORS_LM79_IN1,
-                            RW, LM78_SYSCTL_IN1, VALUE(2), 2 },
-    { SENSORS_LM79_IN2_MAX, "in2_max", SENSORS_LM79_IN2, SENSORS_LM79_IN2,
-                            RW, LM78_SYSCTL_IN2, VALUE(2), 2 },
-    { SENSORS_LM79_IN3_MAX, "in3_max", SENSORS_LM79_IN3, SENSORS_LM79_IN3,
-                            RW, LM78_SYSCTL_IN3, VALUE(2), 2 },
-    { SENSORS_LM79_IN4_MAX, "in4_max", SENSORS_LM79_IN4, SENSORS_LM79_IN4,
-                            RW, LM78_SYSCTL_IN4, VALUE(2), 2 },
-    { SENSORS_LM79_IN5_MAX, "in5_max", SENSORS_LM79_IN5, SENSORS_LM79_IN5,
-                            RW, LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
-    { SENSORS_LM79_IN6_MAX, "in6_max", SENSORS_LM79_IN6, SENSORS_LM79_IN6,
-                            RW, LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
-    { SENSORS_LM79_FAN1, "fan1", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_LM79_FAN2, "fan2", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_LM79_FAN3, "fan3", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_FAN3, VALUE(2), 0 },
-    { SENSORS_LM79_FAN1_MIN, "fan1_min", SENSORS_LM79_FAN1, SENSORS_LM79_FAN1,
-                             RW, LM78_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_LM79_FAN2_MIN, "fan2_min", SENSORS_LM79_FAN2, SENSORS_LM79_FAN2,
-                             RW, LM78_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_LM79_FAN3_MIN, "fan3_min", SENSORS_LM79_FAN3, SENSORS_LM79_FAN3,
-                             RW, LM78_SYSCTL_FAN3, VALUE(1), 0 },
-    { SENSORS_LM79_TEMP, "temp", NOMAP, NOMAP,
-                         R, LM78_SYSCTL_TEMP, VALUE(3), 1 },
-    { SENSORS_LM79_TEMP_HYST, "temp_hyst", SENSORS_LM79_TEMP,
-                              SENSORS_LM79_TEMP, RW, 
-                              LM78_SYSCTL_TEMP, VALUE(2), 1 },
-    { SENSORS_LM79_TEMP_OVER, "temp_over", SENSORS_LM79_TEMP,
-                              SENSORS_LM79_TEMP, RW, 
-                              LM78_SYSCTL_TEMP, VALUE(1), 1 },
-    { SENSORS_LM79_VID, "vid", NOMAP, NOMAP,
-                        R, LM78_SYSCTL_VID, VALUE(1), 2 },
-    { SENSORS_LM79_FAN1_DIV, "fan1_div", SENSORS_LM79_FAN1, NOMAP,
-                             RW, LM78_SYSCTL_FAN_DIV, VALUE(1), 
-                             0 },
-    { SENSORS_LM79_FAN2_DIV, "fan2_div", SENSORS_LM79_FAN2, NOMAP,
-                             RW, LM78_SYSCTL_FAN_DIV, VALUE(2), 
-                             0 },
-    { SENSORS_LM79_FAN3_DIV, "fan3_div", SENSORS_LM79_FAN3, NOMAP,
-                              R, LM78_SYSCTL_FAN_DIV, VALUE(3), 
-                              0 },
-    { SENSORS_LM79_ALARMS, "alarms", NOMAP, NOMAP, 
-                           R, LM78_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_LM79_IN5_MIN, "in5_min", SENSORS_LM79_IN5, SENSORS_LM79_IN5, RW }, 
+                              LM78_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
+    { { SENSORS_LM79_IN6_MIN, "in6_min", SENSORS_LM79_IN6, SENSORS_LM79_IN6, RW }, 
+                              LM78_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
+    { { SENSORS_LM79_IN0_MAX, "in0_max", SENSORS_LM79_IN0, SENSORS_LM79_IN0, RW }, 
+                              LM78_SYSCTL_IN0, VALUE(2), 2 },
+    { { SENSORS_LM79_IN1_MAX, "in1_max", SENSORS_LM79_IN1, SENSORS_LM79_IN1, RW }, 
+                              LM78_SYSCTL_IN1, VALUE(2), 2 },
+    { { SENSORS_LM79_IN2_MAX, "in2_max", SENSORS_LM79_IN2, SENSORS_LM79_IN2, RW }, 
+                              LM78_SYSCTL_IN2, VALUE(2), 2 },
+    { { SENSORS_LM79_IN3_MAX, "in3_max", SENSORS_LM79_IN3, SENSORS_LM79_IN3, RW }, 
+                              LM78_SYSCTL_IN3, VALUE(2), 2 },
+    { { SENSORS_LM79_IN4_MAX, "in4_max", SENSORS_LM79_IN4, SENSORS_LM79_IN4, RW }, 
+                              LM78_SYSCTL_IN4, VALUE(2), 2 },
+    { { SENSORS_LM79_IN5_MAX, "in5_max", SENSORS_LM79_IN5, SENSORS_LM79_IN5, RW }, 
+                              LM78_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
+    { { SENSORS_LM79_IN6_MAX, "in6_max", SENSORS_LM79_IN6, SENSORS_LM79_IN6, RW }, 
+                              LM78_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
+    { { SENSORS_LM79_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_LM79_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_LM79_FAN3, "fan3", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_FAN3, VALUE(2), 0 },
+    { { SENSORS_LM79_FAN1_MIN, "fan1_min", SENSORS_LM79_FAN1, SENSORS_LM79_FAN1, 
+                               RW }, 
+                               LM78_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_LM79_FAN2_MIN, "fan2_min", SENSORS_LM79_FAN2, SENSORS_LM79_FAN2, 
+                               RW }, 
+                               LM78_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_LM79_FAN3_MIN, "fan3_min", SENSORS_LM79_FAN3, SENSORS_LM79_FAN3, 
+                               RW }, 
+                               LM78_SYSCTL_FAN3, VALUE(1), 0 },
+    { { SENSORS_LM79_TEMP, "temp", NOMAP, NOMAP, R }, 
+                           LM78_SYSCTL_TEMP, VALUE(3), 1 },
+    { { SENSORS_LM79_TEMP_HYST, "temp_hyst", SENSORS_LM79_TEMP, 
+                                SENSORS_LM79_TEMP, RW }, 
+                                LM78_SYSCTL_TEMP, VALUE(2), 1 },
+    { { SENSORS_LM79_TEMP_OVER, "temp_over", SENSORS_LM79_TEMP, 
+                                SENSORS_LM79_TEMP, RW }, 
+                                LM78_SYSCTL_TEMP, VALUE(1), 1 },
+    { { SENSORS_LM79_VID, "vid", NOMAP, NOMAP, R }, 
+                          LM78_SYSCTL_VID, VALUE(1), 2 },
+    { { SENSORS_LM79_FAN1_DIV, "fan1_div", SENSORS_LM79_FAN1, NOMAP, RW }, 
+                               LM78_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_LM79_FAN2_DIV, "fan2_div", SENSORS_LM79_FAN2, NOMAP, RW }, 
+                               LM78_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_LM79_FAN3_DIV, "fan3_div", SENSORS_LM79_FAN3, NOMAP, R }, 
+                               LM78_SYSCTL_FAN_DIV, VALUE(3), 0 },
+    { { SENSORS_LM79_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                             LM78_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature lm75_features[] =
   {
-    { SENSORS_LM75_TEMP, "temp", NOMAP, NOMAP,
-                         R, LM75_SYSCTL_TEMP, VALUE(3), 1 },
-    { SENSORS_LM75_TEMP_HYST, "temp_hyst", SENSORS_LM75_TEMP,
-                              SENSORS_LM75_TEMP, RW, 
-                              LM75_SYSCTL_TEMP, VALUE(2), 1 },
-    { SENSORS_LM75_TEMP_OVER, "temp_over", SENSORS_LM75_TEMP,
-                              SENSORS_LM75_TEMP, RW, 
-                              LM75_SYSCTL_TEMP, VALUE(1), 1 },
-    { 0 }
+    { { SENSORS_LM75_TEMP, "temp", NOMAP, NOMAP, R }, 
+                           LM75_SYSCTL_TEMP, VALUE(3), 1 },
+    { { SENSORS_LM75_TEMP_HYST, "temp_hyst", SENSORS_LM75_TEMP, 
+                                SENSORS_LM75_TEMP, RW }, 
+                                LM75_SYSCTL_TEMP, VALUE(2), 1 },
+    { { SENSORS_LM75_TEMP_OVER, "temp_over", SENSORS_LM75_TEMP, 
+                                SENSORS_LM75_TEMP, RW }, 
+                                LM75_SYSCTL_TEMP, VALUE(1), 1 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature adm1021_features[] =
   {
-    { SENSORS_ADM1021_TEMP, "temp", NOMAP, NOMAP,
-                              R, ADM1021_SYSCTL_TEMP, VALUE(3), 
-                              0 },
-    { SENSORS_ADM1021_TEMP_HYST, "temp_low", SENSORS_ADM1021_TEMP,
-                              SENSORS_ADM1021_TEMP, RW, 
-                              ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
-    { SENSORS_ADM1021_TEMP_OVER, "temp_over", SENSORS_ADM1021_TEMP,
-                              SENSORS_ADM1021_TEMP, RW,
-                              ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
-    { SENSORS_ADM1021_REMOTE_TEMP, "remote_temp", NOMAP, 
-                              NOMAP, R, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 },
-    { SENSORS_ADM1021_REMOTE_TEMP_HYST, "remote_temp_low", 
-                              SENSORS_ADM1021_REMOTE_TEMP,
-                              SENSORS_ADM1021_REMOTE_TEMP, RW, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 0 },
-    { SENSORS_ADM1021_REMOTE_TEMP_OVER, "remote_temp_over", 
-                              SENSORS_ADM1021_REMOTE_TEMP,
-                              SENSORS_ADM1021_REMOTE_TEMP, RW,
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 0 },
-    { SENSORS_ADM1021_ALARMS, "alarms", NOMAP,
-                              NOMAP, R,
-                              ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
-    { SENSORS_ADM1021_DIE_CODE, "die_code", NOMAP,
-                              NOMAP, R,
-                              ADM1021_SYSCTL_DIE_CODE, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_ADM1021_TEMP, "temp", NOMAP, NOMAP, R }, 
+                              ADM1021_SYSCTL_TEMP, VALUE(3), 0 },
+    { { SENSORS_ADM1021_TEMP_HYST, "temp_low", SENSORS_ADM1021_TEMP, 
+                                   SENSORS_ADM1021_TEMP, RW }, 
+                                   ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
+    { { SENSORS_ADM1021_TEMP_OVER, "temp_over", SENSORS_ADM1021_TEMP, 
+                                   SENSORS_ADM1021_TEMP, RW }, 
+                                   ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
+    { { SENSORS_ADM1021_REMOTE_TEMP, "remote_temp", NOMAP, NOMAP, R }, 
+                                     ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 },
+    { { SENSORS_ADM1021_REMOTE_TEMP_HYST, "remote_temp_low", 
+                                          SENSORS_ADM1021_REMOTE_TEMP, 
+                                          SENSORS_ADM1021_REMOTE_TEMP, RW }, 
+                                          ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 
+                                          0 },
+    { { SENSORS_ADM1021_REMOTE_TEMP_OVER, "remote_temp_over", 
+                                          SENSORS_ADM1021_REMOTE_TEMP, 
+                                          SENSORS_ADM1021_REMOTE_TEMP, RW }, 
+                                          ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 
+                                          0 },
+    { { SENSORS_ADM1021_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                                ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { SENSORS_ADM1021_DIE_CODE, "die_code", NOMAP, NOMAP, R }, 
+                                  ADM1021_SYSCTL_DIE_CODE, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature adm1023_features[] =
   {
-    { SENSORS_ADM1021_TEMP, "temp", NOMAP, NOMAP,
-                              R, ADM1021_SYSCTL_TEMP, VALUE(3), 
-                              0 },
-    { SENSORS_ADM1021_TEMP_HYST, "temp_low", SENSORS_ADM1021_TEMP,
-                              SENSORS_ADM1021_TEMP, RW, 
-                              ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
-    { SENSORS_ADM1021_TEMP_OVER, "temp_over", SENSORS_ADM1021_TEMP,
-                              SENSORS_ADM1021_TEMP, RW,
-                              ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
-    { SENSORS_ADM1021_REMOTE_TEMP, "remote_temp", NOMAP, 
-                              NOMAP, R, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(4), 3 },
-    { SENSORS_ADM1021_REMOTE_TEMP_HYST, "remote_temp_low", 
-                              SENSORS_ADM1021_REMOTE_TEMP,
-                              SENSORS_ADM1021_REMOTE_TEMP, RW, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 3 },
-    { SENSORS_ADM1021_REMOTE_TEMP_OVER, "remote_temp_over", 
-                              SENSORS_ADM1021_REMOTE_TEMP,
-                              SENSORS_ADM1021_REMOTE_TEMP, RW,
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 3 },
-    { SENSORS_ADM1021_ALARMS, "alarms", NOMAP,
-                              NOMAP, R,
-                              ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_ADM1021_TEMP, "temp", NOMAP, NOMAP, R }, 
+                              ADM1021_SYSCTL_TEMP, VALUE(3), 0 },
+    { { SENSORS_ADM1021_TEMP_HYST, "temp_low", SENSORS_ADM1021_TEMP, 
+                                   SENSORS_ADM1021_TEMP, RW }, 
+                                   ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
+    { { SENSORS_ADM1021_TEMP_OVER, "temp_over", SENSORS_ADM1021_TEMP, 
+                                   SENSORS_ADM1021_TEMP, RW }, 
+                                   ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
+    { { SENSORS_ADM1021_REMOTE_TEMP, "remote_temp", NOMAP, NOMAP, R }, 
+                                     ADM1021_SYSCTL_REMOTE_TEMP, VALUE(4), 3 },
+    { { SENSORS_ADM1021_REMOTE_TEMP_HYST, "remote_temp_low", 
+                                          SENSORS_ADM1021_REMOTE_TEMP, 
+                                          SENSORS_ADM1021_REMOTE_TEMP, RW }, 
+                                          ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 
+                                          3 },
+    { { SENSORS_ADM1021_REMOTE_TEMP_OVER, "remote_temp_over", 
+                                          SENSORS_ADM1021_REMOTE_TEMP, 
+                                          SENSORS_ADM1021_REMOTE_TEMP, RW }, 
+                                          ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 
+                                          3 },
+    { { SENSORS_ADM1021_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                                ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature adm1029_features[] =
   {
-       { SENSORS_ADM1029_TEMP1, "temp1",
-                               NOMAP, NOMAP,
-                               R, NOSYSCTL, VALUE(3), 3 },
-       { SENSORS_ADM1029_TEMP1_MAX, "temp1_max",
-                               SENSORS_ADM1029_TEMP1,
-                               SENSORS_ADM1029_TEMP1,
-                               RW, NOSYSCTL, VALUE(1), 3 },
-       { SENSORS_ADM1029_TEMP1_MIN, "temp1_min",
-                               SENSORS_ADM1029_TEMP1,
-                               SENSORS_ADM1029_TEMP1,
-                               RW, NOSYSCTL, VALUE(2), 3 },
+       { { SENSORS_ADM1029_TEMP1, "temp1", NOMAP, NOMAP, R },
+		NOSYSCTL, VALUE(3), 3 },
+       { { SENSORS_ADM1029_TEMP1_MAX, "temp1_max",
+                SENSORS_ADM1029_TEMP1, SENSORS_ADM1029_TEMP1, RW },
+		NOSYSCTL, VALUE(1), 3 },
+       { { SENSORS_ADM1029_TEMP1_MIN, "temp1_min",
+                SENSORS_ADM1029_TEMP1, SENSORS_ADM1029_TEMP1, RW },
+		NOSYSCTL, VALUE(2), 3 },
 
-       { SENSORS_ADM1029_TEMP2, "temp2",
-                               NOMAP, NOMAP,
-                               R, NOSYSCTL, VALUE(3), 3 },
-       { SENSORS_ADM1029_TEMP2_MAX, "temp2_max",
-                               SENSORS_ADM1029_TEMP2,
-                               SENSORS_ADM1029_TEMP2,
-                               RW, NOSYSCTL, VALUE(1), 3 },
-       { SENSORS_ADM1029_TEMP2_MIN, "temp2_min",
-                               SENSORS_ADM1029_TEMP2,
-                               SENSORS_ADM1029_TEMP2,
-                               RW, NOSYSCTL, VALUE(2), 3 },
+       { { SENSORS_ADM1029_TEMP2, "temp2", NOMAP, NOMAP, R },
+		NOSYSCTL, VALUE(3), 3 },
+       { { SENSORS_ADM1029_TEMP2_MAX, "temp2_max",
+                SENSORS_ADM1029_TEMP2, SENSORS_ADM1029_TEMP2, RW },
+		NOSYSCTL, VALUE(1), 3 },
+       { { SENSORS_ADM1029_TEMP2_MIN, "temp2_min",
+                SENSORS_ADM1029_TEMP2, SENSORS_ADM1029_TEMP2, RW },
+		NOSYSCTL, VALUE(2), 3 },
 
-       { SENSORS_ADM1029_TEMP3, "temp3",
-                               NOMAP, NOMAP,
-                               R, NOSYSCTL, VALUE(3), 3 },
-       { SENSORS_ADM1029_TEMP3_MAX, "temp3_max",
-                               SENSORS_ADM1029_TEMP3,
-                               SENSORS_ADM1029_TEMP3,
-                               RW, NOSYSCTL, VALUE(1), 3 },
-       { SENSORS_ADM1029_TEMP3_MIN, "temp3_min",
-                               SENSORS_ADM1029_TEMP3,
-                               SENSORS_ADM1029_TEMP3,
-                               RW, NOSYSCTL, VALUE(2), 3 },
+       { { SENSORS_ADM1029_TEMP3, "temp3", NOMAP, NOMAP, R },
+		NOSYSCTL, VALUE(3), 3 },
+       { { SENSORS_ADM1029_TEMP3_MAX, "temp3_max",
+                SENSORS_ADM1029_TEMP3, SENSORS_ADM1029_TEMP3, RW },
+		NOSYSCTL, VALUE(1), 3 },
+       { { SENSORS_ADM1029_TEMP3_MIN, "temp3_min",
+                SENSORS_ADM1029_TEMP3, SENSORS_ADM1029_TEMP3, RW },
+		NOSYSCTL, VALUE(2), 3 },
 
-       { SENSORS_ADM1029_FAN1, "fan1",
-                               NOMAP, NOMAP,
-                               R, NOSYSCTL, VALUE(2), 0 },
-       { SENSORS_ADM1029_FAN1_MIN, "fan1_min",
-                               SENSORS_ADM1029_FAN1,
-                               SENSORS_ADM1029_FAN1,
-                               RW, NOSYSCTL, VALUE(1), 0 },
-       { SENSORS_ADM1029_FAN1_DIV, "fan1_div",
-                               SENSORS_ADM1029_FAN1,
-                               NOMAP,
-                               RW, NOSYSCTL, VALUE(1), 0 },
+       { { SENSORS_ADM1029_FAN1, "fan1", NOMAP, NOMAP, R },
+		NOSYSCTL, VALUE(2), 0 },
+       { { SENSORS_ADM1029_FAN1_MIN, "fan1_min",
+                SENSORS_ADM1029_FAN1, SENSORS_ADM1029_FAN1, RW },
+		NOSYSCTL, VALUE(1), 0 },
+       { { SENSORS_ADM1029_FAN1_DIV, "fan1_div",
+                SENSORS_ADM1029_FAN1, NOMAP, RW },
+		NOSYSCTL, VALUE(1), 0 },
 
-       { SENSORS_ADM1029_FAN2, "fan2",
-                               NOMAP, NOMAP,
-                               R, NOSYSCTL, VALUE(2), 0 },
-       { SENSORS_ADM1029_FAN2_MIN, "fan2_min",
-                               SENSORS_ADM1029_FAN2,
-                               SENSORS_ADM1029_FAN2,
-                               RW, NOSYSCTL, VALUE(1), 0 },
-       { SENSORS_ADM1029_FAN2_DIV, "fan2_div",
-                               SENSORS_ADM1029_FAN2,
-                               NOMAP,
-                               RW, NOSYSCTL, VALUE(2), 0 },
-       { 0 }
+       { { SENSORS_ADM1029_FAN2, "fan2", NOMAP, NOMAP, R },
+		NOSYSCTL, VALUE(2), 0 },
+       { { SENSORS_ADM1029_FAN2_MIN, "fan2_min",
+                SENSORS_ADM1029_FAN2, SENSORS_ADM1029_FAN2, RW },
+		NOSYSCTL, VALUE(1), 0 },
+       { { SENSORS_ADM1029_FAN2_DIV, "fan2_div",
+                SENSORS_ADM1029_FAN2, NOMAP, RW },
+		NOSYSCTL, VALUE(2), 0 },
+       { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature adm1030_features[] =
   {
-    { SENSORS_ADM1031_TEMP1, "temp1",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_TEMP1, VALUE(4), 3 },
-    { SENSORS_ADM1031_TEMP1_MAX, "temp1_max",
-                              SENSORS_ADM1031_TEMP1, SENSORS_ADM1031_TEMP1,
-                              RW, ADM1031_SYSCTL_TEMP1, VALUE(1), 3 },
-    { SENSORS_ADM1031_TEMP1_MIN, "temp1_min",
-                              SENSORS_ADM1031_TEMP1, SENSORS_ADM1031_TEMP1,
-                              RW, ADM1031_SYSCTL_TEMP1, VALUE(2), 3 },
-    { SENSORS_ADM1031_TEMP1_CRIT, "temp1_crit", SENSORS_ADM1031_TEMP1,
-                              SENSORS_ADM1031_TEMP1,
-                              RW, ADM1031_SYSCTL_TEMP1, VALUE(3), 3 },
+    { { SENSORS_ADM1031_TEMP1, "temp1", NOMAP, NOMAP, R }, 
+                               ADM1031_SYSCTL_TEMP1, VALUE(4), 3 },
+    { { SENSORS_ADM1031_TEMP1_MAX, "temp1_max", SENSORS_ADM1031_TEMP1, 
+                                   SENSORS_ADM1031_TEMP1, RW }, 
+                                   ADM1031_SYSCTL_TEMP1, VALUE(1), 3 },
+    { { SENSORS_ADM1031_TEMP1_MIN, "temp1_min", SENSORS_ADM1031_TEMP1, 
+                                   SENSORS_ADM1031_TEMP1, RW }, 
+                                   ADM1031_SYSCTL_TEMP1, VALUE(2), 3 },
+    { { SENSORS_ADM1031_TEMP1_CRIT, "temp1_crit", SENSORS_ADM1031_TEMP1, 
+                                    SENSORS_ADM1031_TEMP1, RW }, 
+                                    ADM1031_SYSCTL_TEMP1, VALUE(3), 3 },
 
-    { SENSORS_ADM1031_TEMP2, "temp2",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_TEMP2, VALUE(4), 3 },
-    { SENSORS_ADM1031_TEMP2_MAX, "temp2_max",
-                              SENSORS_ADM1031_TEMP2, SENSORS_ADM1031_TEMP2,
-                              RW, ADM1031_SYSCTL_TEMP2, VALUE(1), 3 },
-    { SENSORS_ADM1031_TEMP2_MIN, "temp2_min",
-                              SENSORS_ADM1031_TEMP2, SENSORS_ADM1031_TEMP2,
-                              RW, ADM1031_SYSCTL_TEMP2, VALUE(2), 3 },
-    { SENSORS_ADM1031_TEMP2_CRIT, "temp2_crit",
-                              SENSORS_ADM1031_TEMP2, SENSORS_ADM1031_TEMP2,
-                              RW, ADM1031_SYSCTL_TEMP2, VALUE(3), 3 },
+    { { SENSORS_ADM1031_TEMP2, "temp2", NOMAP, NOMAP, R }, 
+                               ADM1031_SYSCTL_TEMP2, VALUE(4), 3 },
+    { { SENSORS_ADM1031_TEMP2_MAX, "temp2_max", SENSORS_ADM1031_TEMP2, 
+                                   SENSORS_ADM1031_TEMP2, RW }, 
+                                   ADM1031_SYSCTL_TEMP2, VALUE(1), 3 },
+    { { SENSORS_ADM1031_TEMP2_MIN, "temp2_min", SENSORS_ADM1031_TEMP2, 
+                                   SENSORS_ADM1031_TEMP2, RW }, 
+                                   ADM1031_SYSCTL_TEMP2, VALUE(2), 3 },
+    { { SENSORS_ADM1031_TEMP2_CRIT, "temp2_crit", SENSORS_ADM1031_TEMP2, 
+                                    SENSORS_ADM1031_TEMP2, RW }, 
+                                    ADM1031_SYSCTL_TEMP2, VALUE(3), 3 },
 
-    { SENSORS_ADM1031_FAN1, "fan1",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_ADM1031_FAN1_MIN, "fan1_min",
-                              SENSORS_ADM1031_FAN1, SENSORS_ADM1031_FAN1, RW, 
-                              ADM1031_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_ADM1031_FAN1_DIV, "fan1_div",
-                              SENSORS_ADM1031_FAN1, NOMAP,
-                              RW, ADM1031_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_ADM1031_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                              ADM1031_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_ADM1031_FAN1_MIN, "fan1_min", SENSORS_ADM1031_FAN1, 
+                                  SENSORS_ADM1031_FAN1, RW }, 
+                                  ADM1031_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_ADM1031_FAN1_DIV, "fan1_div", SENSORS_ADM1031_FAN1, NOMAP, RW }, 
+                                  ADM1031_SYSCTL_FAN_DIV, VALUE(1), 0 },
 
-    { SENSORS_ADM1031_ALARMS, "alarms",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_ADM1031_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                                ADM1031_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature adm1031_features[] =
   {
-    { SENSORS_ADM1031_TEMP1, "temp1",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_TEMP1, VALUE(4), 3 },
-    { SENSORS_ADM1031_TEMP1_MAX, "temp1_max",
-                              SENSORS_ADM1031_TEMP1, SENSORS_ADM1031_TEMP1,
-                              RW, ADM1031_SYSCTL_TEMP1, VALUE(1), 3 },
-    { SENSORS_ADM1031_TEMP1_MIN, "temp1_min",
-                              SENSORS_ADM1031_TEMP1, SENSORS_ADM1031_TEMP1,
-                              RW, ADM1031_SYSCTL_TEMP1, VALUE(2), 3 },
-    { SENSORS_ADM1031_TEMP1_CRIT, "temp1_crit",
-                              SENSORS_ADM1031_TEMP1, SENSORS_ADM1031_TEMP1,
-                              RW, ADM1031_SYSCTL_TEMP1, VALUE(3), 3 },
+    { { SENSORS_ADM1031_TEMP1, "temp1", NOMAP, NOMAP, R }, 
+                               ADM1031_SYSCTL_TEMP1, VALUE(4), 3 },
+    { { SENSORS_ADM1031_TEMP1_MAX, "temp1_max", SENSORS_ADM1031_TEMP1, 
+                                   SENSORS_ADM1031_TEMP1, RW }, 
+                                   ADM1031_SYSCTL_TEMP1, VALUE(1), 3 },
+    { { SENSORS_ADM1031_TEMP1_MIN, "temp1_min", SENSORS_ADM1031_TEMP1, 
+                                   SENSORS_ADM1031_TEMP1, RW }, 
+                                   ADM1031_SYSCTL_TEMP1, VALUE(2), 3 },
+    { { SENSORS_ADM1031_TEMP1_CRIT, "temp1_crit", SENSORS_ADM1031_TEMP1, 
+                                    SENSORS_ADM1031_TEMP1, RW }, 
+                                    ADM1031_SYSCTL_TEMP1, VALUE(3), 3 },
 
-    { SENSORS_ADM1031_TEMP2, "temp2",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_TEMP2, VALUE(4), 3 },
-    { SENSORS_ADM1031_TEMP2_MAX, "temp2_max",
-                              SENSORS_ADM1031_TEMP2, SENSORS_ADM1031_TEMP2,
-                              RW, ADM1031_SYSCTL_TEMP2, VALUE(1), 3 },
-    { SENSORS_ADM1031_TEMP2_MIN, "temp2_min",
-                              SENSORS_ADM1031_TEMP2, SENSORS_ADM1031_TEMP2,
-                              RW, ADM1031_SYSCTL_TEMP2, VALUE(2), 3 },
-    { SENSORS_ADM1031_TEMP2_CRIT, "temp2_crit",
-                              SENSORS_ADM1031_TEMP2, SENSORS_ADM1031_TEMP2,
-                              RW, ADM1031_SYSCTL_TEMP2, VALUE(3), 3 },
+    { { SENSORS_ADM1031_TEMP2, "temp2", NOMAP, NOMAP, R }, 
+                               ADM1031_SYSCTL_TEMP2, VALUE(4), 3 },
+    { { SENSORS_ADM1031_TEMP2_MAX, "temp2_max", SENSORS_ADM1031_TEMP2, 
+                                   SENSORS_ADM1031_TEMP2, RW }, 
+                                   ADM1031_SYSCTL_TEMP2, VALUE(1), 3 },
+    { { SENSORS_ADM1031_TEMP2_MIN, "temp2_min", SENSORS_ADM1031_TEMP2, 
+                                   SENSORS_ADM1031_TEMP2, RW }, 
+                                   ADM1031_SYSCTL_TEMP2, VALUE(2), 3 },
+    { { SENSORS_ADM1031_TEMP2_CRIT, "temp2_crit", SENSORS_ADM1031_TEMP2, 
+                                    SENSORS_ADM1031_TEMP2, RW }, 
+                                    ADM1031_SYSCTL_TEMP2, VALUE(3), 3 },
 
-    { SENSORS_ADM1031_TEMP3, "temp3",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_TEMP3, VALUE(4), 3 },
-    { SENSORS_ADM1031_TEMP3_MAX, "temp3_max",
-                              SENSORS_ADM1031_TEMP3, SENSORS_ADM1031_TEMP3,
-                              RW, ADM1031_SYSCTL_TEMP3, VALUE(1), 3 },
-    { SENSORS_ADM1031_TEMP3_MIN, "temp3_min",
-                              SENSORS_ADM1031_TEMP3, SENSORS_ADM1031_TEMP3,
-                              RW, ADM1031_SYSCTL_TEMP3, VALUE(2), 3 },
-    { SENSORS_ADM1031_TEMP3_CRIT, "temp3_crit",
-                              SENSORS_ADM1031_TEMP3, SENSORS_ADM1031_TEMP3,
-                              RW, ADM1031_SYSCTL_TEMP3, VALUE(3), 3 },
+    { { SENSORS_ADM1031_TEMP3, "temp3", NOMAP, NOMAP, R }, 
+                               ADM1031_SYSCTL_TEMP3, VALUE(4), 3 },
+    { { SENSORS_ADM1031_TEMP3_MAX, "temp3_max", SENSORS_ADM1031_TEMP3, 
+                                   SENSORS_ADM1031_TEMP3, RW }, 
+                                   ADM1031_SYSCTL_TEMP3, VALUE(1), 3 },
+    { { SENSORS_ADM1031_TEMP3_MIN, "temp3_min", SENSORS_ADM1031_TEMP3, 
+                                   SENSORS_ADM1031_TEMP3, RW }, 
+                                   ADM1031_SYSCTL_TEMP3, VALUE(2), 3 },
+    { { SENSORS_ADM1031_TEMP3_CRIT, "temp3_crit", SENSORS_ADM1031_TEMP3, 
+                                    SENSORS_ADM1031_TEMP3, RW }, 
+                                    ADM1031_SYSCTL_TEMP3, VALUE(3), 3 },
 
-    { SENSORS_ADM1031_FAN1, "fan1",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_ADM1031_FAN1_MIN, "fan1_min",
-                              SENSORS_ADM1031_FAN1, SENSORS_ADM1031_FAN1,
-                              RW, ADM1031_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_ADM1031_FAN1_DIV, "fan1_div",
-                              SENSORS_ADM1031_FAN1, NOMAP,
-                              RW, ADM1031_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_ADM1031_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                              ADM1031_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_ADM1031_FAN1_MIN, "fan1_min", SENSORS_ADM1031_FAN1, 
+                                  SENSORS_ADM1031_FAN1, RW }, 
+                                  ADM1031_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_ADM1031_FAN1_DIV, "fan1_div", SENSORS_ADM1031_FAN1, NOMAP, RW }, 
+                                  ADM1031_SYSCTL_FAN_DIV, VALUE(1), 0 },
 
-    { SENSORS_ADM1031_FAN2, "fan2",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_ADM1031_FAN2_MIN, "fan2_min",
-                              SENSORS_ADM1031_FAN2, SENSORS_ADM1031_FAN2,
-                              RW, ADM1031_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_ADM1031_FAN2_DIV, "fan2_div",
-                              SENSORS_ADM1031_FAN2, NOMAP,
-                              RW, ADM1031_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_ADM1031_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                              ADM1031_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_ADM1031_FAN2_MIN, "fan2_min", SENSORS_ADM1031_FAN2, 
+                                  SENSORS_ADM1031_FAN2, RW }, 
+                                  ADM1031_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_ADM1031_FAN2_DIV, "fan2_div", SENSORS_ADM1031_FAN2, NOMAP, RW }, 
+                                  ADM1031_SYSCTL_FAN_DIV, VALUE(2), 0 },
 
-    { SENSORS_ADM1031_ALARMS, "alarms",
-                              NOMAP, NOMAP,
-                              R, ADM1031_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_ADM1031_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                                ADM1031_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature max1617_features[] =
   {
-    { SENSORS_MAX1617_TEMP, "temp", NOMAP, NOMAP,
-                              R, ADM1021_SYSCTL_TEMP, VALUE(3), 
-                              0 },
-    { SENSORS_MAX1617_TEMP_HYST, "temp_low", SENSORS_MAX1617_TEMP,
-                              SENSORS_MAX1617_TEMP, RW, 
-                              ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
-    { SENSORS_MAX1617_TEMP_OVER, "temp_over", SENSORS_MAX1617_TEMP,
-                              SENSORS_MAX1617_TEMP, RW,
-                              ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
-    { SENSORS_MAX1617_REMOTE_TEMP, "remote_temp", NOMAP, 
-                              NOMAP, R, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 },
-    { SENSORS_MAX1617_REMOTE_TEMP_HYST, "remote_temp_low", 
-                              SENSORS_MAX1617_REMOTE_TEMP,
-                              SENSORS_MAX1617_REMOTE_TEMP, RW, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 0 },
-    { SENSORS_MAX1617_REMOTE_TEMP_OVER, "remote_temp_over", 
-                              SENSORS_MAX1617_REMOTE_TEMP,
-                              SENSORS_MAX1617_REMOTE_TEMP, RW,
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 0 },
-    { SENSORS_MAX1617_ALARMS, "alarms", NOMAP,
-                              NOMAP, R,
-                              ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_MAX1617_TEMP, "temp", NOMAP, NOMAP, R }, 
+                              ADM1021_SYSCTL_TEMP, VALUE(3), 0 },
+    { { SENSORS_MAX1617_TEMP_HYST, "temp_low", SENSORS_MAX1617_TEMP, 
+                                   SENSORS_MAX1617_TEMP, RW }, 
+                                   ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
+    { { SENSORS_MAX1617_TEMP_OVER, "temp_over", SENSORS_MAX1617_TEMP, 
+                                   SENSORS_MAX1617_TEMP, RW }, 
+                                   ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
+    { { SENSORS_MAX1617_REMOTE_TEMP, "remote_temp", NOMAP, NOMAP, R }, 
+                                     ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 },
+    { { SENSORS_MAX1617_REMOTE_TEMP_HYST, "remote_temp_low", 
+                                          SENSORS_MAX1617_REMOTE_TEMP, 
+                                          SENSORS_MAX1617_REMOTE_TEMP, RW }, 
+                                          ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 
+                                          0 },
+    { { SENSORS_MAX1617_REMOTE_TEMP_OVER, "remote_temp_over", 
+                                          SENSORS_MAX1617_REMOTE_TEMP, 
+                                          SENSORS_MAX1617_REMOTE_TEMP, RW }, 
+                                          ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 
+                                          0 },
+    { { SENSORS_MAX1617_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                                ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature max1617a_features[] =
   {
-    { SENSORS_MAX1617A_TEMP, "temp", NOMAP, NOMAP,
-                              R, ADM1021_SYSCTL_TEMP, VALUE(3), 
-                              0 },
-    { SENSORS_MAX1617A_TEMP_HYST, "temp_low", SENSORS_MAX1617A_TEMP,
-                              SENSORS_MAX1617A_TEMP, RW, 
-                              ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
-    { SENSORS_MAX1617A_TEMP_OVER, "temp_over", SENSORS_MAX1617A_TEMP,
-                              SENSORS_MAX1617A_TEMP, RW,
-                              ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
-    { SENSORS_MAX1617A_REMOTE_TEMP, "remote_temp", NOMAP, 
-                              NOMAP, R, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 },
-    { SENSORS_MAX1617A_REMOTE_TEMP_HYST, "remote_temp_low", 
-                              SENSORS_MAX1617A_REMOTE_TEMP,
-                              SENSORS_MAX1617A_REMOTE_TEMP, RW, 
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 0 },
-    { SENSORS_MAX1617A_REMOTE_TEMP_OVER, "remote_temp_over", 
-                              SENSORS_MAX1617A_REMOTE_TEMP,
-                              SENSORS_MAX1617A_REMOTE_TEMP, RW,
-                              ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 0 },
-    { SENSORS_MAX1617A_ALARMS, "alarms", NOMAP,
-                              NOMAP, R,
-                              ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_MAX1617A_TEMP, "temp", NOMAP, NOMAP, R }, 
+                               ADM1021_SYSCTL_TEMP, VALUE(3), 0 },
+    { { SENSORS_MAX1617A_TEMP_HYST, "temp_low", SENSORS_MAX1617A_TEMP, 
+                                    SENSORS_MAX1617A_TEMP, RW }, 
+                                    ADM1021_SYSCTL_TEMP, VALUE(2), 0 },
+    { { SENSORS_MAX1617A_TEMP_OVER, "temp_over", SENSORS_MAX1617A_TEMP, 
+                                    SENSORS_MAX1617A_TEMP, RW }, 
+                                    ADM1021_SYSCTL_TEMP, VALUE(1), 0 },
+    { { SENSORS_MAX1617A_REMOTE_TEMP, "remote_temp", NOMAP, NOMAP, R }, 
+                                      ADM1021_SYSCTL_REMOTE_TEMP, VALUE(3), 0 },
+    { { SENSORS_MAX1617A_REMOTE_TEMP_HYST, "remote_temp_low", 
+                                           SENSORS_MAX1617A_REMOTE_TEMP, 
+                                           SENSORS_MAX1617A_REMOTE_TEMP, RW }, 
+                                           ADM1021_SYSCTL_REMOTE_TEMP, VALUE(2), 
+                                           0 },
+    { { SENSORS_MAX1617A_REMOTE_TEMP_OVER, "remote_temp_over", 
+                                           SENSORS_MAX1617A_REMOTE_TEMP, 
+                                           SENSORS_MAX1617A_REMOTE_TEMP, RW }, 
+                                           ADM1021_SYSCTL_REMOTE_TEMP, VALUE(1), 
+                                           0 },
+    { { SENSORS_MAX1617A_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                                 ADM1021_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature gl518_features[] =
   {
-    { SENSORS_GL518_VDD, "vdd", NOMAP,NOMAP,
-                            R, GL518_SYSCTL_VDD, VALUE(3), 2, "in0_input", 3 },
-    { SENSORS_GL518_VIN1, "vin1", NOMAP,NOMAP,
-                             R, GL518_SYSCTL_VIN1, VALUE(3), 
-                             2 },
-    { SENSORS_GL518_VIN2, "vin2", NOMAP,NOMAP,
-                             R, GL518_SYSCTL_VIN2, VALUE(3), 
-                             2 },
-    { SENSORS_GL518_VIN3, "vin3", NOMAP,NOMAP,
-                             R, GL518_SYSCTL_VIN3, VALUE(3), 2 },
-    { SENSORS_GL518_VDD_MIN, "vdd_min", SENSORS_GL518_VDD,
-                                SENSORS_GL518_VDD, RW,
-                                GL518_SYSCTL_VDD, VALUE(1), 2 , "in0_min", 3 },
-    { SENSORS_GL518_VIN1_MIN, "vin1_min", SENSORS_GL518_VIN1, 
-                                 SENSORS_GL518_VIN1, RW,
-                                 GL518_SYSCTL_VIN1, VALUE(1), 2 },
-    { SENSORS_GL518_VIN2_MIN, "vin2_min", SENSORS_GL518_VIN2, 
-                                 SENSORS_GL518_VIN2, RW,
-                                 GL518_SYSCTL_VIN2, VALUE(1), 2 },
-    { SENSORS_GL518_VIN3_MIN, "vin3_min", SENSORS_GL518_VIN3, 
-                                 SENSORS_GL518_VIN3, RW,
-                                 GL518_SYSCTL_VIN3, VALUE(1), 2 },
-    { SENSORS_GL518_VDD_MAX, "vdd_max", SENSORS_GL518_VDD,
-                                SENSORS_GL518_VDD, RW,
-                                GL518_SYSCTL_VDD, VALUE(2), 2 , "in0_max", 3 },
-    { SENSORS_GL518_VIN1_MAX, "vin1_max", SENSORS_GL518_VIN1, 
-                                 SENSORS_GL518_VIN1, RW,
-                                 GL518_SYSCTL_VIN1, VALUE(2), 2 },
-    { SENSORS_GL518_VIN2_MAX, "vin2_max", SENSORS_GL518_VIN2, 
-                                 SENSORS_GL518_VIN2, RW,
-                                 GL518_SYSCTL_VIN2, VALUE(2), 2 },
-    { SENSORS_GL518_VIN3_MAX, "vin3_max", SENSORS_GL518_VIN3, 
-                                 SENSORS_GL518_VIN3, RW,
-                                 GL518_SYSCTL_VIN3, VALUE(2), 2 },
-    { SENSORS_GL518_FAN1, "fan1", NOMAP, NOMAP,
-                             R, GL518_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_GL518_FAN2, "fan2", NOMAP, NOMAP,
-                             R, GL518_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_GL518_FAN1_MIN, "fan1_min", SENSORS_GL518_FAN1, 
-                                 SENSORS_GL518_FAN1, RW,
-                                 GL518_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_GL518_FAN2_MIN, "fan2_min", SENSORS_GL518_FAN2, 
-                                 SENSORS_GL518_FAN2, RW,
-                                 GL518_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_GL518_TEMP, "temp", NOMAP, NOMAP,
-                             R, GL518_SYSCTL_TEMP, VALUE(3), 1 },
-    { SENSORS_GL518_TEMP_HYST, "temp_hyst", SENSORS_GL518_TEMP, 
-                                  SENSORS_GL518_TEMP, RW,
-                                  GL518_SYSCTL_TEMP, VALUE(2), 1 },
-    { SENSORS_GL518_TEMP_OVER, "temp_over", SENSORS_GL518_TEMP, 
-                                  SENSORS_GL518_TEMP, RW,
-                                  GL518_SYSCTL_TEMP, VALUE(1), 1 },
-    { SENSORS_GL518_FAN1_DIV, "fan1_div", SENSORS_GL518_FAN1, 
-                                 NOMAP, RW,
-                                 GL518_SYSCTL_FAN_DIV, VALUE(1), 0 },
-    { SENSORS_GL518_FAN2_DIV, "fan2_div", SENSORS_GL518_FAN2, 
-                                 NOMAP, RW,
-                                 GL518_SYSCTL_FAN_DIV, VALUE(2), 0 },
-    { SENSORS_GL518_ALARMS, "alarms", NOMAP,
-                               NOMAP, R,
-                               GL518_SYSCTL_ALARMS, VALUE(1), 0 },
-    { SENSORS_GL518_BEEP_ENABLE, "beep_enable", SENSORS_GL518_ALARMS,
-                               NOMAP, RW,
-                               GL518_SYSCTL_BEEP, VALUE(1), 0 },
-    { SENSORS_GL518_BEEPS, "beeps", SENSORS_GL518_ALARMS,
-                               SENSORS_GL518_ALARMS, RW,
-                               GL518_SYSCTL_BEEP, VALUE(2), 0 },
-    { SENSORS_GL518_FAN1OFF, "fan1_off", SENSORS_GL518_FAN1,
-                               NOMAP, RW,
-                               GL518_SYSCTL_FAN1OFF, VALUE(1), 0, "fan1_auto", 0 },
-    { SENSORS_GL518_FAN1PIN, "fan1_off_pin", SENSORS_GL518_FAN1OFF,
-                               NOMAP, RW,
+    { { SENSORS_GL518_VDD, "vdd", NOMAP, NOMAP, R }, 
+                           GL518_SYSCTL_VDD, VALUE(3), 2, "in0_input", 3 },
+    { { SENSORS_GL518_VIN1, "vin1", NOMAP, NOMAP, R }, 
+                            GL518_SYSCTL_VIN1, VALUE(3), 2 },
+    { { SENSORS_GL518_VIN2, "vin2", NOMAP, NOMAP, R }, 
+                            GL518_SYSCTL_VIN2, VALUE(3), 2 },
+    { { SENSORS_GL518_VIN3, "vin3", NOMAP, NOMAP, R }, 
+                            GL518_SYSCTL_VIN3, VALUE(3), 2 },
+    { { SENSORS_GL518_VDD_MIN, "vdd_min", SENSORS_GL518_VDD, SENSORS_GL518_VDD, 
+                               RW }, 
+                               GL518_SYSCTL_VDD, VALUE(1), 2 , "in0_min", 3 },
+    { { SENSORS_GL518_VIN1_MIN, "vin1_min", SENSORS_GL518_VIN1, 
+                                SENSORS_GL518_VIN1, RW }, 
+                                GL518_SYSCTL_VIN1, VALUE(1), 2 },
+    { { SENSORS_GL518_VIN2_MIN, "vin2_min", SENSORS_GL518_VIN2, 
+                                SENSORS_GL518_VIN2, RW }, 
+                                GL518_SYSCTL_VIN2, VALUE(1), 2 },
+    { { SENSORS_GL518_VIN3_MIN, "vin3_min", SENSORS_GL518_VIN3, 
+                                SENSORS_GL518_VIN3, RW }, 
+                                GL518_SYSCTL_VIN3, VALUE(1), 2 },
+    { { SENSORS_GL518_VDD_MAX, "vdd_max", SENSORS_GL518_VDD, SENSORS_GL518_VDD, 
+                               RW }, 
+                               GL518_SYSCTL_VDD, VALUE(2), 2 , "in0_max", 3 },
+    { { SENSORS_GL518_VIN1_MAX, "vin1_max", SENSORS_GL518_VIN1, 
+                                SENSORS_GL518_VIN1, RW }, 
+                                GL518_SYSCTL_VIN1, VALUE(2), 2 },
+    { { SENSORS_GL518_VIN2_MAX, "vin2_max", SENSORS_GL518_VIN2, 
+                                SENSORS_GL518_VIN2, RW }, 
+                                GL518_SYSCTL_VIN2, VALUE(2), 2 },
+    { { SENSORS_GL518_VIN3_MAX, "vin3_max", SENSORS_GL518_VIN3, 
+                                SENSORS_GL518_VIN3, RW }, 
+                                GL518_SYSCTL_VIN3, VALUE(2), 2 },
+    { { SENSORS_GL518_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                            GL518_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_GL518_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                            GL518_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_GL518_FAN1_MIN, "fan1_min", SENSORS_GL518_FAN1, 
+                                SENSORS_GL518_FAN1, RW }, 
+                                GL518_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_GL518_FAN2_MIN, "fan2_min", SENSORS_GL518_FAN2, 
+                                SENSORS_GL518_FAN2, RW }, 
+                                GL518_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_GL518_TEMP, "temp", NOMAP, NOMAP, R }, 
+                            GL518_SYSCTL_TEMP, VALUE(3), 1 },
+    { { SENSORS_GL518_TEMP_HYST, "temp_hyst", SENSORS_GL518_TEMP, 
+                                 SENSORS_GL518_TEMP, RW }, 
+                                 GL518_SYSCTL_TEMP, VALUE(2), 1 },
+    { { SENSORS_GL518_TEMP_OVER, "temp_over", SENSORS_GL518_TEMP, 
+                                 SENSORS_GL518_TEMP, RW }, 
+                                 GL518_SYSCTL_TEMP, VALUE(1), 1 },
+    { { SENSORS_GL518_FAN1_DIV, "fan1_div", SENSORS_GL518_FAN1, NOMAP, RW }, 
+                                GL518_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_GL518_FAN2_DIV, "fan2_div", SENSORS_GL518_FAN2, NOMAP, RW }, 
+                                GL518_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_GL518_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                              GL518_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { SENSORS_GL518_BEEP_ENABLE, "beep_enable", SENSORS_GL518_ALARMS, NOMAP, 
+                                   RW }, 
+                                   GL518_SYSCTL_BEEP, VALUE(1), 0 },
+    { { SENSORS_GL518_BEEPS, "beeps", SENSORS_GL518_ALARMS, SENSORS_GL518_ALARMS, 
+                             RW }, 
+                             GL518_SYSCTL_BEEP, VALUE(2), 0 },
+    { { SENSORS_GL518_FAN1OFF, "fan1_off", SENSORS_GL518_FAN1, NOMAP, RW }, 
+                               GL518_SYSCTL_FAN1OFF, VALUE(1), 0, "fan1_auto", 
+                               0 },
+    { { SENSORS_GL518_FAN1PIN, "fan1_off_pin", SENSORS_GL518_FAN1OFF, NOMAP, RW }, 
                                GL518_SYSCTL_FAN1OFF, VALUE(2), 0 },
-    { SENSORS_GL518_ITERATE, "iterate", NOMAP,
-                               NOMAP, RW,
+    { { SENSORS_GL518_ITERATE, "iterate", NOMAP, NOMAP, RW }, 
                                GL518_SYSCTL_ITERATE, VALUE(1), 0 },
-    { 0 }
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature gl520_features[] =
   {
-    { SENSORS_GL520_VDD, "vdd", NOMAP,NOMAP,
-                            R, GL520_SYSCTL_VDD, VALUE(3), 2, "in0_input", 3 },
-    { SENSORS_GL520_VIN1, "vin1", NOMAP,NOMAP,
-                             R, GL520_SYSCTL_VIN1, VALUE(3), 
-                             2 },
-    { SENSORS_GL520_VIN2, "vin2", NOMAP,NOMAP,
-                             R, GL520_SYSCTL_VIN2, VALUE(3), 
-                             2 },
-    { SENSORS_GL520_VIN3, "vin3", NOMAP,NOMAP,
-                             R, GL520_SYSCTL_VIN3, VALUE(3), 2 },
-    { SENSORS_GL520_VIN4, "vin4", NOMAP,NOMAP,
-                             R, GL520_SYSCTL_VIN4, VALUE(3), 2 },
-    { SENSORS_GL520_VDD_MIN, "vdd_min", SENSORS_GL520_VDD,
-                                SENSORS_GL520_VDD, RW,
-                                GL520_SYSCTL_VDD, VALUE(1), 2, "in0_min", 3 },
-    { SENSORS_GL520_VIN1_MIN, "vin1_min", SENSORS_GL520_VIN1, 
-                                 SENSORS_GL520_VIN1, RW,
-                                 GL520_SYSCTL_VIN1, VALUE(1), 2 },
-    { SENSORS_GL520_VIN2_MIN, "vin2_min", SENSORS_GL520_VIN2, 
-                                 SENSORS_GL520_VIN2, RW,
-                                 GL520_SYSCTL_VIN2, VALUE(1), 2 },
-    { SENSORS_GL520_VIN3_MIN, "vin3_min", SENSORS_GL520_VIN3, 
-                                 SENSORS_GL520_VIN3, RW,
-                                 GL520_SYSCTL_VIN3, VALUE(1), 2 },
-    { SENSORS_GL520_VIN4_MIN, "vin4_min", SENSORS_GL520_VIN4, 
-                                 SENSORS_GL520_VIN4, RW,
-                                 GL520_SYSCTL_VIN4, VALUE(1), 2 },
-    { SENSORS_GL520_VDD_MAX, "vdd_max", SENSORS_GL520_VDD,
-                                SENSORS_GL520_VDD, RW,
-                                GL520_SYSCTL_VDD, VALUE(2), 2, "in0_max", 3 },
-    { SENSORS_GL520_VIN1_MAX, "vin1_max", SENSORS_GL520_VIN1, 
-                                 SENSORS_GL520_VIN1, RW,
-                                 GL520_SYSCTL_VIN1, VALUE(2), 2 },
-    { SENSORS_GL520_VIN2_MAX, "vin2_max", SENSORS_GL520_VIN2, 
-                                 SENSORS_GL520_VIN2, RW,
-                                 GL520_SYSCTL_VIN2, VALUE(2), 2 },
-    { SENSORS_GL520_VIN3_MAX, "vin3_max", SENSORS_GL520_VIN3, 
-                                 SENSORS_GL520_VIN3, RW,
-                                 GL520_SYSCTL_VIN3, VALUE(2), 2 },
-    { SENSORS_GL520_VIN4_MAX, "vin4_max", SENSORS_GL520_VIN4, 
-                                 SENSORS_GL520_VIN4, RW,
-                                 GL520_SYSCTL_VIN4, VALUE(2), 2 },
-    { SENSORS_GL520_FAN1, "fan1", NOMAP, NOMAP,
-                             R, GL520_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_GL520_FAN2, "fan2", NOMAP, NOMAP,
-                             R, GL520_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_GL520_FAN1_MIN, "fan1_min", SENSORS_GL520_FAN1, 
-                                 SENSORS_GL520_FAN1, RW,
-                                 GL520_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_GL520_FAN2_MIN, "fan2_min", SENSORS_GL520_FAN2, 
-                                 SENSORS_GL520_FAN2, RW,
-                                 GL520_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_GL520_TEMP1, "temp1", NOMAP, NOMAP,
-                             R, GL520_SYSCTL_TEMP1, VALUE(3), 1 },
-    { SENSORS_GL520_TEMP1_HYST, "temp1_hyst", SENSORS_GL520_TEMP1, 
-                                  SENSORS_GL520_TEMP1, RW,
+    { { SENSORS_GL520_VDD, "vdd", NOMAP, NOMAP, R }, 
+                           GL520_SYSCTL_VDD, VALUE(3), 2, "in0_input", 3 },
+    { { SENSORS_GL520_VIN1, "vin1", NOMAP, NOMAP, R }, 
+                            GL520_SYSCTL_VIN1, VALUE(3), 2 },
+    { { SENSORS_GL520_VIN2, "vin2", NOMAP, NOMAP, R }, 
+                            GL520_SYSCTL_VIN2, VALUE(3), 2 },
+    { { SENSORS_GL520_VIN3, "vin3", NOMAP, NOMAP, R }, 
+                            GL520_SYSCTL_VIN3, VALUE(3), 2 },
+    { { SENSORS_GL520_VIN4, "vin4", NOMAP, NOMAP, R }, 
+                            GL520_SYSCTL_VIN4, VALUE(3), 2 },
+    { { SENSORS_GL520_VDD_MIN, "vdd_min", SENSORS_GL520_VDD, SENSORS_GL520_VDD, 
+                               RW }, 
+                               GL520_SYSCTL_VDD, VALUE(1), 2, "in0_min", 3 },
+    { { SENSORS_GL520_VIN1_MIN, "vin1_min", SENSORS_GL520_VIN1, 
+                                SENSORS_GL520_VIN1, RW }, 
+                                GL520_SYSCTL_VIN1, VALUE(1), 2 },
+    { { SENSORS_GL520_VIN2_MIN, "vin2_min", SENSORS_GL520_VIN2, 
+                                SENSORS_GL520_VIN2, RW }, 
+                                GL520_SYSCTL_VIN2, VALUE(1), 2 },
+    { { SENSORS_GL520_VIN3_MIN, "vin3_min", SENSORS_GL520_VIN3, 
+                                SENSORS_GL520_VIN3, RW }, 
+                                GL520_SYSCTL_VIN3, VALUE(1), 2 },
+    { { SENSORS_GL520_VIN4_MIN, "vin4_min", SENSORS_GL520_VIN4, 
+                                SENSORS_GL520_VIN4, RW }, 
+                                GL520_SYSCTL_VIN4, VALUE(1), 2 },
+    { { SENSORS_GL520_VDD_MAX, "vdd_max", SENSORS_GL520_VDD, SENSORS_GL520_VDD, 
+                               RW }, 
+                               GL520_SYSCTL_VDD, VALUE(2), 2, "in0_max", 3 },
+    { { SENSORS_GL520_VIN1_MAX, "vin1_max", SENSORS_GL520_VIN1, 
+                                SENSORS_GL520_VIN1, RW }, 
+                                GL520_SYSCTL_VIN1, VALUE(2), 2 },
+    { { SENSORS_GL520_VIN2_MAX, "vin2_max", SENSORS_GL520_VIN2, 
+                                SENSORS_GL520_VIN2, RW }, 
+                                GL520_SYSCTL_VIN2, VALUE(2), 2 },
+    { { SENSORS_GL520_VIN3_MAX, "vin3_max", SENSORS_GL520_VIN3, 
+                                SENSORS_GL520_VIN3, RW }, 
+                                GL520_SYSCTL_VIN3, VALUE(2), 2 },
+    { { SENSORS_GL520_VIN4_MAX, "vin4_max", SENSORS_GL520_VIN4, 
+                                SENSORS_GL520_VIN4, RW }, 
+                                GL520_SYSCTL_VIN4, VALUE(2), 2 },
+    { { SENSORS_GL520_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                            GL520_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_GL520_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                            GL520_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_GL520_FAN1_MIN, "fan1_min", SENSORS_GL520_FAN1, 
+                                SENSORS_GL520_FAN1, RW }, 
+                                GL520_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_GL520_FAN2_MIN, "fan2_min", SENSORS_GL520_FAN2, 
+                                SENSORS_GL520_FAN2, RW }, 
+                                GL520_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_GL520_TEMP1, "temp1", NOMAP, NOMAP, R }, 
+                             GL520_SYSCTL_TEMP1, VALUE(3), 1 },
+    { { SENSORS_GL520_TEMP1_HYST, "temp1_hyst", SENSORS_GL520_TEMP1, 
+                                  SENSORS_GL520_TEMP1, RW }, 
                                   GL520_SYSCTL_TEMP1, VALUE(2), 1 },
-    { SENSORS_GL520_TEMP1_OVER, "temp1_over", SENSORS_GL520_TEMP1, 
-                                  SENSORS_GL520_TEMP1, RW,
+    { { SENSORS_GL520_TEMP1_OVER, "temp1_over", SENSORS_GL520_TEMP1, 
+                                  SENSORS_GL520_TEMP1, RW }, 
                                   GL520_SYSCTL_TEMP1, VALUE(1), 1 },
-    { SENSORS_GL520_TEMP2, "temp2", NOMAP, NOMAP,
-                             R, GL520_SYSCTL_TEMP2, VALUE(3), 1 },
-    { SENSORS_GL520_TEMP2_HYST, "temp2_hyst", SENSORS_GL520_TEMP2, 
-                                  SENSORS_GL520_TEMP2, RW,
+    { { SENSORS_GL520_TEMP2, "temp2", NOMAP, NOMAP, R }, 
+                             GL520_SYSCTL_TEMP2, VALUE(3), 1 },
+    { { SENSORS_GL520_TEMP2_HYST, "temp2_hyst", SENSORS_GL520_TEMP2, 
+                                  SENSORS_GL520_TEMP2, RW }, 
                                   GL520_SYSCTL_TEMP2, VALUE(2), 1 },
-    { SENSORS_GL520_TEMP2_OVER, "temp2_over", SENSORS_GL520_TEMP2, 
-                                  SENSORS_GL520_TEMP2, RW,
+    { { SENSORS_GL520_TEMP2_OVER, "temp2_over", SENSORS_GL520_TEMP2, 
+                                  SENSORS_GL520_TEMP2, RW }, 
                                   GL520_SYSCTL_TEMP2, VALUE(1), 1 },
-    { SENSORS_GL520_VID, "vid", NOMAP, NOMAP,
-                              R, GL520_SYSCTL_VID, VALUE(1), 2 },
-    { SENSORS_GL520_FAN1_DIV, "fan1_div", SENSORS_GL520_FAN1, 
-                                 NOMAP, RW,
-                                 GL520_SYSCTL_FAN_DIV, VALUE(1), 0 },
-    { SENSORS_GL520_FAN2_DIV, "fan2_div", SENSORS_GL520_FAN2, 
-                                 NOMAP, RW,
-                                 GL520_SYSCTL_FAN_DIV, VALUE(2), 0 },
-    { SENSORS_GL520_ALARMS, "alarms", NOMAP,
-                               NOMAP, R,
-                               GL520_SYSCTL_ALARMS, VALUE(1), 0 },
-    { SENSORS_GL520_BEEP_ENABLE, "beep_enable", SENSORS_GL520_ALARMS,
-                               NOMAP, RW,
-                               GL520_SYSCTL_BEEP, VALUE(1), 0 },
-    { SENSORS_GL520_BEEPS, "beeps", SENSORS_GL520_ALARMS,
-                               SENSORS_GL520_ALARMS, RW,
-                               GL520_SYSCTL_BEEP, VALUE(2), 0 },
-    { SENSORS_GL520_FAN1OFF, "fan1_off", SENSORS_GL520_FAN1,
-                               NOMAP, RW,
+    { { SENSORS_GL520_VID, "vid", NOMAP, NOMAP, R }, 
+                           GL520_SYSCTL_VID, VALUE(1), 2 },
+    { { SENSORS_GL520_FAN1_DIV, "fan1_div", SENSORS_GL520_FAN1, NOMAP, RW }, 
+                                GL520_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_GL520_FAN2_DIV, "fan2_div", SENSORS_GL520_FAN2, NOMAP, RW }, 
+                                GL520_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_GL520_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                              GL520_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { SENSORS_GL520_BEEP_ENABLE, "beep_enable", SENSORS_GL520_ALARMS, NOMAP, 
+                                   RW }, 
+                                   GL520_SYSCTL_BEEP, VALUE(1), 0 },
+    { { SENSORS_GL520_BEEPS, "beeps", SENSORS_GL520_ALARMS, SENSORS_GL520_ALARMS, 
+                             RW }, 
+                             GL520_SYSCTL_BEEP, VALUE(2), 0 },
+    { { SENSORS_GL520_FAN1OFF, "fan1_off", SENSORS_GL520_FAN1, NOMAP, RW }, 
                                GL520_SYSCTL_FAN1OFF, VALUE(1), 0 },
-    { SENSORS_GL520_TWOTEMPS, "two_temps", NOMAP,
-                               NOMAP, RW,
-                               GL520_SYSCTL_CONFIG, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_GL520_TWOTEMPS, "two_temps", NOMAP, NOMAP, RW }, 
+                                GL520_SYSCTL_CONFIG, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 static sensors_chip_feature lm80_features[] =
   { 
-    { SENSORS_LM80_IN0, "in0", NOMAP, NOMAP, 
-                        R, LM80_SYSCTL_IN0, VALUE(3), 2 },
-    { SENSORS_LM80_IN1, "in1", NOMAP, NOMAP,
-                        R, LM80_SYSCTL_IN1, VALUE(3), 2 },
-    { SENSORS_LM80_IN2, "in2", NOMAP, NOMAP,
-                        R, LM80_SYSCTL_IN2, VALUE(3), 2 },
-    { SENSORS_LM80_IN3, "in3", NOMAP, NOMAP,
-                        R, LM80_SYSCTL_IN3, VALUE(3), 2 },
-    { SENSORS_LM80_IN4, "in4", NOMAP, NOMAP,
-                        R, LM80_SYSCTL_IN4, VALUE(3), 2 },
-    { SENSORS_LM80_IN5, "in5", NOMAP, NOMAP,
-                        R, LM80_SYSCTL_IN5, VALUE(3), 2 },
-    { SENSORS_LM80_IN6, "in6", NOMAP, NOMAP,
-                        R, LM80_SYSCTL_IN6, VALUE(3), 2 },
-    { SENSORS_LM80_IN0_MIN, "in0_min", SENSORS_LM80_IN0, SENSORS_LM80_IN0,
-                            RW, LM80_SYSCTL_IN0, VALUE(1), 2 },
-    { SENSORS_LM80_IN1_MIN, "in1_min", SENSORS_LM80_IN1, SENSORS_LM80_IN1,
-                            RW, LM80_SYSCTL_IN1, VALUE(1), 2 },
-    { SENSORS_LM80_IN2_MIN, "in2_min", SENSORS_LM80_IN2, SENSORS_LM80_IN2,
-                            RW, LM80_SYSCTL_IN2, VALUE(1), 2 },
-    { SENSORS_LM80_IN3_MIN, "in3_min", SENSORS_LM80_IN3, SENSORS_LM80_IN3,
-                            RW, LM80_SYSCTL_IN3, VALUE(1), 2 },
-    { SENSORS_LM80_IN4_MIN, "in4_min", SENSORS_LM80_IN4, SENSORS_LM80_IN4,
-                            RW, LM80_SYSCTL_IN4, VALUE(1), 2 },
-    { SENSORS_LM80_IN5_MIN, "in5_min", SENSORS_LM80_IN5, SENSORS_LM80_IN5,
-                            RW, LM80_SYSCTL_IN5, VALUE(1), 2 },
-    { SENSORS_LM80_IN6_MIN, "in6_min", SENSORS_LM80_IN6, SENSORS_LM80_IN6,
-                            RW, LM80_SYSCTL_IN6, VALUE(1), 2 },
-    { SENSORS_LM80_IN0_MAX, "in0_max", SENSORS_LM80_IN0, SENSORS_LM80_IN0,
-                            RW, LM80_SYSCTL_IN0, VALUE(2), 2 },
-    { SENSORS_LM80_IN1_MAX, "in1_max", SENSORS_LM80_IN1, SENSORS_LM80_IN1,
-                            RW, LM80_SYSCTL_IN1, VALUE(2), 2 },
-    { SENSORS_LM80_IN2_MAX, "in2_max", SENSORS_LM80_IN2, SENSORS_LM80_IN2,
-                            RW, LM80_SYSCTL_IN2, VALUE(2), 2 },
-    { SENSORS_LM80_IN3_MAX, "in3_max", SENSORS_LM80_IN3, SENSORS_LM80_IN3,
-                            RW, LM80_SYSCTL_IN3, VALUE(2), 2 },
-    { SENSORS_LM80_IN4_MAX, "in4_max", SENSORS_LM80_IN4, SENSORS_LM80_IN4,
-                            RW, LM80_SYSCTL_IN4, VALUE(2), 2 },
-    { SENSORS_LM80_IN5_MAX, "in5_max", SENSORS_LM80_IN5, SENSORS_LM80_IN5,
-                            RW, LM80_SYSCTL_IN5, VALUE(2), 2 },
-    { SENSORS_LM80_IN6_MAX, "in6_max", SENSORS_LM80_IN6, SENSORS_LM80_IN6,
-                            RW, LM80_SYSCTL_IN6, VALUE(2), 2 },
-    { SENSORS_LM80_FAN1, "fan1", NOMAP, NOMAP,
-                         R, LM80_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_LM80_FAN2, "fan2", NOMAP, NOMAP,
-                         R, LM80_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_LM80_FAN1_MIN, "fan1_min", SENSORS_LM80_FAN1, NOMAP,
-                             RW, LM80_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_LM80_FAN2_MIN, "fan2_min", SENSORS_LM80_FAN2, NOMAP,
-                             RW, LM80_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_LM80_TEMP, "temp", NOMAP, NOMAP,
-                         R, LM80_SYSCTL_TEMP, VALUE(5), 2 },
-    { SENSORS_LM80_TEMP_HOT_HYST, "temp_hot_hyst", SENSORS_LM80_TEMP,
-                              SENSORS_LM80_TEMP, RW, 
-                              LM80_SYSCTL_TEMP, VALUE(2), 2, "temp1_max_hyst", 3 },
-    { SENSORS_LM80_TEMP_HOT_MAX, "temp_hot_max", SENSORS_LM80_TEMP,
-                              SENSORS_LM80_TEMP, RW, 
-                              LM80_SYSCTL_TEMP, VALUE(1), 2, "temp1_max", 3 },
-    { SENSORS_LM80_TEMP_OS_HYST, "temp_os_hyst", SENSORS_LM80_TEMP,
-                              SENSORS_LM80_TEMP, RW, 
-                              LM80_SYSCTL_TEMP, VALUE(4), 2, "temp1_crit_hyst", 3 },
-    { SENSORS_LM80_TEMP_OS_MAX, "temp_os_max", SENSORS_LM80_TEMP,
-                              SENSORS_LM80_TEMP, RW, 
-                              LM80_SYSCTL_TEMP, VALUE(3), 2, "temp1_crit", 3 },
-    { SENSORS_LM80_FAN1_DIV, "fan1_div", SENSORS_LM80_FAN1, NOMAP,
-                             RW, LM80_SYSCTL_FAN_DIV, VALUE(1), 
-                             0 },
-    { SENSORS_LM80_FAN2_DIV, "fan2_div", SENSORS_LM80_FAN2, NOMAP,
-                             RW, LM80_SYSCTL_FAN_DIV, VALUE(2), 
-                             0 },
-    { SENSORS_LM80_ALARMS, "alarms", NOMAP, NOMAP, 
-                           R, LM80_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_LM80_IN0, "in0", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN0, VALUE(3), 2 },
+    { { SENSORS_LM80_IN1, "in1", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN1, VALUE(3), 2 },
+    { { SENSORS_LM80_IN2, "in2", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN2, VALUE(3), 2 },
+    { { SENSORS_LM80_IN3, "in3", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN3, VALUE(3), 2 },
+    { { SENSORS_LM80_IN4, "in4", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN4, VALUE(3), 2 },
+    { { SENSORS_LM80_IN5, "in5", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN5, VALUE(3), 2 },
+    { { SENSORS_LM80_IN6, "in6", NOMAP, NOMAP, R }, 
+                          LM80_SYSCTL_IN6, VALUE(3), 2 },
+    { { SENSORS_LM80_IN0_MIN, "in0_min", SENSORS_LM80_IN0, SENSORS_LM80_IN0, RW }, 
+                              LM80_SYSCTL_IN0, VALUE(1), 2 },
+    { { SENSORS_LM80_IN1_MIN, "in1_min", SENSORS_LM80_IN1, SENSORS_LM80_IN1, RW }, 
+                              LM80_SYSCTL_IN1, VALUE(1), 2 },
+    { { SENSORS_LM80_IN2_MIN, "in2_min", SENSORS_LM80_IN2, SENSORS_LM80_IN2, RW }, 
+                              LM80_SYSCTL_IN2, VALUE(1), 2 },
+    { { SENSORS_LM80_IN3_MIN, "in3_min", SENSORS_LM80_IN3, SENSORS_LM80_IN3, RW }, 
+                              LM80_SYSCTL_IN3, VALUE(1), 2 },
+    { { SENSORS_LM80_IN4_MIN, "in4_min", SENSORS_LM80_IN4, SENSORS_LM80_IN4, RW }, 
+                              LM80_SYSCTL_IN4, VALUE(1), 2 },
+    { { SENSORS_LM80_IN5_MIN, "in5_min", SENSORS_LM80_IN5, SENSORS_LM80_IN5, RW }, 
+                              LM80_SYSCTL_IN5, VALUE(1), 2 },
+    { { SENSORS_LM80_IN6_MIN, "in6_min", SENSORS_LM80_IN6, SENSORS_LM80_IN6, RW }, 
+                              LM80_SYSCTL_IN6, VALUE(1), 2 },
+    { { SENSORS_LM80_IN0_MAX, "in0_max", SENSORS_LM80_IN0, SENSORS_LM80_IN0, RW }, 
+                              LM80_SYSCTL_IN0, VALUE(2), 2 },
+    { { SENSORS_LM80_IN1_MAX, "in1_max", SENSORS_LM80_IN1, SENSORS_LM80_IN1, RW }, 
+                              LM80_SYSCTL_IN1, VALUE(2), 2 },
+    { { SENSORS_LM80_IN2_MAX, "in2_max", SENSORS_LM80_IN2, SENSORS_LM80_IN2, RW }, 
+                              LM80_SYSCTL_IN2, VALUE(2), 2 },
+    { { SENSORS_LM80_IN3_MAX, "in3_max", SENSORS_LM80_IN3, SENSORS_LM80_IN3, RW }, 
+                              LM80_SYSCTL_IN3, VALUE(2), 2 },
+    { { SENSORS_LM80_IN4_MAX, "in4_max", SENSORS_LM80_IN4, SENSORS_LM80_IN4, RW }, 
+                              LM80_SYSCTL_IN4, VALUE(2), 2 },
+    { { SENSORS_LM80_IN5_MAX, "in5_max", SENSORS_LM80_IN5, SENSORS_LM80_IN5, RW }, 
+                              LM80_SYSCTL_IN5, VALUE(2), 2 },
+    { { SENSORS_LM80_IN6_MAX, "in6_max", SENSORS_LM80_IN6, SENSORS_LM80_IN6, RW }, 
+                              LM80_SYSCTL_IN6, VALUE(2), 2 },
+    { { SENSORS_LM80_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                           LM80_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_LM80_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                           LM80_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_LM80_FAN1_MIN, "fan1_min", SENSORS_LM80_FAN1, NOMAP, RW }, 
+                               LM80_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_LM80_FAN2_MIN, "fan2_min", SENSORS_LM80_FAN2, NOMAP, RW }, 
+                               LM80_SYSCTL_FAN2, VALUE(1), 0 },
+    { { SENSORS_LM80_TEMP, "temp", NOMAP, NOMAP, R }, 
+                           LM80_SYSCTL_TEMP, VALUE(5), 2 },
+    { { SENSORS_LM80_TEMP_HOT_HYST, "temp_hot_hyst", SENSORS_LM80_TEMP, 
+                                    SENSORS_LM80_TEMP, RW }, 
+                                    LM80_SYSCTL_TEMP, VALUE(2), 2, 
+                                    "temp1_max_hyst", 3 },
+    { { SENSORS_LM80_TEMP_HOT_MAX, "temp_hot_max", SENSORS_LM80_TEMP, 
+                                   SENSORS_LM80_TEMP, RW }, 
+                                   LM80_SYSCTL_TEMP, VALUE(1), 2, "temp1_max", 
+                                   3 },
+    { { SENSORS_LM80_TEMP_OS_HYST, "temp_os_hyst", SENSORS_LM80_TEMP, 
+                                   SENSORS_LM80_TEMP, RW }, 
+                                   LM80_SYSCTL_TEMP, VALUE(4), 2, 
+                                   "temp1_crit_hyst", 3 },
+    { { SENSORS_LM80_TEMP_OS_MAX, "temp_os_max", SENSORS_LM80_TEMP, 
+                                  SENSORS_LM80_TEMP, RW }, 
+                                  LM80_SYSCTL_TEMP, VALUE(3), 2, "temp1_crit", 
+                                  3 },
+    { { SENSORS_LM80_FAN1_DIV, "fan1_div", SENSORS_LM80_FAN1, NOMAP, RW }, 
+                               LM80_SYSCTL_FAN_DIV, VALUE(1), 0 },
+    { { SENSORS_LM80_FAN2_DIV, "fan2_div", SENSORS_LM80_FAN2, NOMAP, RW }, 
+                               LM80_SYSCTL_FAN_DIV, VALUE(2), 0 },
+    { { SENSORS_LM80_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                             LM80_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature lm83_features[] =
   {
-    { SENSORS_LM83_LOCAL_TEMP, "temp1", NOMAP, NOMAP,
-                         R, LM83_SYSCTL_LOCAL_TEMP, VALUE(2), 0 },
-    { SENSORS_LM83_LOCAL_HIGH, "temp1_high", SENSORS_LM83_LOCAL_TEMP,
-                              SENSORS_LM83_LOCAL_TEMP, RW, 
-                              LM83_SYSCTL_LOCAL_TEMP, VALUE(1), 0 },
-    { SENSORS_LM83_REMOTE1_TEMP, "temp2", NOMAP, NOMAP,
-                         R, LM83_SYSCTL_REMOTE1_TEMP, VALUE(2), 0 },
-    { SENSORS_LM83_REMOTE1_HIGH, "temp2_high", SENSORS_LM83_REMOTE1_TEMP,
-                              SENSORS_LM83_REMOTE1_TEMP, RW, 
-                              LM83_SYSCTL_REMOTE1_TEMP, VALUE(1), 0 },
-    { SENSORS_LM83_REMOTE2_TEMP, "temp3", NOMAP, NOMAP,
-                         R, LM83_SYSCTL_REMOTE2_TEMP, VALUE(2), 0 },
-    { SENSORS_LM83_REMOTE2_HIGH, "temp3_high", SENSORS_LM83_REMOTE2_TEMP,
-                              SENSORS_LM83_REMOTE2_TEMP, RW, 
-                              LM83_SYSCTL_REMOTE2_TEMP, VALUE(1), 0 },
-    { SENSORS_LM83_REMOTE3_TEMP, "temp4", NOMAP, NOMAP,
-                         R, LM83_SYSCTL_REMOTE3_TEMP, VALUE(2), 0 },
-    { SENSORS_LM83_REMOTE3_HIGH, "temp4_high", SENSORS_LM83_REMOTE3_TEMP,
-                              SENSORS_LM83_REMOTE3_TEMP, RW, 
-                              LM83_SYSCTL_REMOTE3_TEMP, VALUE(1), 0 },
-    { SENSORS_LM83_TCRIT, "tcrit", NOMAP, NOMAP,
-                         RW, LM83_SYSCTL_TCRIT, VALUE(1), 0,
-                         "temp3_crit", 3, "temp_crit" },
-    { SENSORS_LM83_ALARMS, "alarms", NOMAP, NOMAP,
-                         R, LM83_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_LM83_LOCAL_TEMP, "temp1", NOMAP, NOMAP, R }, 
+                                 LM83_SYSCTL_LOCAL_TEMP, VALUE(2), 0 },
+    { { SENSORS_LM83_LOCAL_HIGH, "temp1_high", SENSORS_LM83_LOCAL_TEMP, 
+                                 SENSORS_LM83_LOCAL_TEMP, RW }, 
+                                 LM83_SYSCTL_LOCAL_TEMP, VALUE(1), 0 },
+    { { SENSORS_LM83_REMOTE1_TEMP, "temp2", NOMAP, NOMAP, R }, 
+                                   LM83_SYSCTL_REMOTE1_TEMP, VALUE(2), 0 },
+    { { SENSORS_LM83_REMOTE1_HIGH, "temp2_high", SENSORS_LM83_REMOTE1_TEMP, 
+                                   SENSORS_LM83_REMOTE1_TEMP, RW }, 
+                                   LM83_SYSCTL_REMOTE1_TEMP, VALUE(1), 0 },
+    { { SENSORS_LM83_REMOTE2_TEMP, "temp3", NOMAP, NOMAP, R }, 
+                                   LM83_SYSCTL_REMOTE2_TEMP, VALUE(2), 0 },
+    { { SENSORS_LM83_REMOTE2_HIGH, "temp3_high", SENSORS_LM83_REMOTE2_TEMP, 
+                                   SENSORS_LM83_REMOTE2_TEMP, RW }, 
+                                   LM83_SYSCTL_REMOTE2_TEMP, VALUE(1), 0 },
+    { { SENSORS_LM83_REMOTE3_TEMP, "temp4", NOMAP, NOMAP, R }, 
+                                   LM83_SYSCTL_REMOTE3_TEMP, VALUE(2), 0 },
+    { { SENSORS_LM83_REMOTE3_HIGH, "temp4_high", SENSORS_LM83_REMOTE3_TEMP, 
+                                   SENSORS_LM83_REMOTE3_TEMP, RW }, 
+                                   LM83_SYSCTL_REMOTE3_TEMP, VALUE(1), 0 },
+    { { SENSORS_LM83_TCRIT, "tcrit", NOMAP, NOMAP, RW }, 
+                            LM83_SYSCTL_TCRIT, VALUE(1), 0, "temp3_crit", 3, 
+                            "temp_crit" },
+    { { SENSORS_LM83_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                             LM83_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature lm90_features[] =
   {
-    { SENSORS_LM90_LOCAL_TEMP, "temp1",
-      NOMAP, NOMAP,
-      R, LM90_SYSCTL_LOCAL_TEMP, VALUE(3), 0 },
-    { SENSORS_LM90_LOCAL_HIGH, "temp1_high",
-      SENSORS_LM90_LOCAL_TEMP, SENSORS_LM90_LOCAL_TEMP,
-      RW, LM90_SYSCTL_LOCAL_TEMP, VALUE(1), 0 },
-    { SENSORS_LM90_LOCAL_LOW, "temp1_low",
-      SENSORS_LM90_LOCAL_TEMP, SENSORS_LM90_LOCAL_TEMP,
-      RW, LM90_SYSCTL_LOCAL_TEMP, VALUE(2), 0 },
-    { SENSORS_LM90_REMOTE_TEMP, "temp2",
-      NOMAP, NOMAP,
-      R, LM90_SYSCTL_REMOTE_TEMP, VALUE(3), 1 },
-    { SENSORS_LM90_REMOTE_HIGH, "temp2_high",
-      SENSORS_LM90_REMOTE_TEMP, SENSORS_LM90_REMOTE_TEMP,
-      RW, LM90_SYSCTL_REMOTE_TEMP, VALUE(1), 1 },
-    { SENSORS_LM90_REMOTE_LOW, "temp2_low",
-      SENSORS_LM90_REMOTE_TEMP, SENSORS_LM90_REMOTE_TEMP,
-      RW, LM90_SYSCTL_REMOTE_TEMP, VALUE(2), 1 },
-    { SENSORS_LM90_LOCAL_TCRIT, "tcrit1",
-      SENSORS_LM90_LOCAL_TEMP, SENSORS_LM90_LOCAL_TEMP,
-      RW, LM90_SYSCTL_LOCAL_TCRIT, VALUE(1), 0, "temp1_crit", 3 },
-    { SENSORS_LM90_REMOTE_TCRIT, "tcrit2",
-      SENSORS_LM90_REMOTE_TEMP, SENSORS_LM90_REMOTE_TEMP,
-      RW, LM90_SYSCTL_REMOTE_TCRIT, VALUE(1), 0, "temp2_crit", 3 },
-    { SENSORS_LM90_LOCAL_TCRIT_HYST, "hyst1",
-      SENSORS_LM90_LOCAL_TEMP, SENSORS_LM90_LOCAL_TEMP,
-      RW, LM90_SYSCTL_LOCAL_HYST, VALUE(1), 0, "temp1_crit_hyst", 3 },
-    { SENSORS_LM90_REMOTE_TCRIT_HYST, "hyst2",
-      SENSORS_LM90_REMOTE_TEMP, SENSORS_LM90_REMOTE_TEMP,
-      R, LM90_SYSCTL_REMOTE_HYST, VALUE(1), 0, "temp2_crit_hyst", 3 },
-    { SENSORS_LM90_ALARMS, "alarms",
-      NOMAP, NOMAP,
-      R, LM90_SYSCTL_ALARMS, VALUE(1), 0 },
-    { 0 }
+    { { SENSORS_LM90_LOCAL_TEMP, "temp1", NOMAP, NOMAP, R }, 
+                                 LM90_SYSCTL_LOCAL_TEMP, VALUE(3), 0 },
+    { { SENSORS_LM90_LOCAL_HIGH, "temp1_high", SENSORS_LM90_LOCAL_TEMP, 
+                                 SENSORS_LM90_LOCAL_TEMP, RW }, 
+                                 LM90_SYSCTL_LOCAL_TEMP, VALUE(1), 0 },
+    { { SENSORS_LM90_LOCAL_LOW, "temp1_low", SENSORS_LM90_LOCAL_TEMP, 
+                                SENSORS_LM90_LOCAL_TEMP, RW }, 
+                                LM90_SYSCTL_LOCAL_TEMP, VALUE(2), 0 },
+    { { SENSORS_LM90_REMOTE_TEMP, "temp2", NOMAP, NOMAP, R }, 
+                                  LM90_SYSCTL_REMOTE_TEMP, VALUE(3), 1 },
+    { { SENSORS_LM90_REMOTE_HIGH, "temp2_high", SENSORS_LM90_REMOTE_TEMP, 
+                                  SENSORS_LM90_REMOTE_TEMP, RW }, 
+                                  LM90_SYSCTL_REMOTE_TEMP, VALUE(1), 1 },
+    { { SENSORS_LM90_REMOTE_LOW, "temp2_low", SENSORS_LM90_REMOTE_TEMP, 
+                                 SENSORS_LM90_REMOTE_TEMP, RW }, 
+                                 LM90_SYSCTL_REMOTE_TEMP, VALUE(2), 1 },
+    { { SENSORS_LM90_LOCAL_TCRIT, "tcrit1", SENSORS_LM90_LOCAL_TEMP, 
+                                  SENSORS_LM90_LOCAL_TEMP, RW }, 
+                                  LM90_SYSCTL_LOCAL_TCRIT, VALUE(1), 0, 
+                                  "temp1_crit", 3 },
+    { { SENSORS_LM90_REMOTE_TCRIT, "tcrit2", SENSORS_LM90_REMOTE_TEMP, 
+                                   SENSORS_LM90_REMOTE_TEMP, RW }, 
+                                   LM90_SYSCTL_REMOTE_TCRIT, VALUE(1), 0, 
+                                   "temp2_crit", 3 },
+    { { SENSORS_LM90_LOCAL_TCRIT_HYST, "hyst1", SENSORS_LM90_LOCAL_TEMP, 
+                                       SENSORS_LM90_LOCAL_TEMP, RW }, 
+                                       LM90_SYSCTL_LOCAL_HYST, VALUE(1), 0, 
+                                       "temp1_crit_hyst", 3 },
+    { { SENSORS_LM90_REMOTE_TCRIT_HYST, "hyst2", SENSORS_LM90_REMOTE_TEMP, 
+                                        SENSORS_LM90_REMOTE_TEMP, R }, 
+                                        LM90_SYSCTL_REMOTE_HYST, VALUE(1), 0, 
+                                        "temp2_crit_hyst", 3 },
+    { { SENSORS_LM90_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                             LM90_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature lm63_features[] =
   {
-    { SENSORS_LM63_LOCAL_TEMP, "temp1",
-      NOMAP, NOMAP,
-      R, LM63_SYSCTL_TEMP1, VALUE(2), 0 },
-    { SENSORS_LM63_LOCAL_HIGH, "temp1_high",
-      SENSORS_LM63_LOCAL_TEMP, SENSORS_LM63_LOCAL_TEMP,
-      RW, LM63_SYSCTL_TEMP1, VALUE(1), 0 },
-    { SENSORS_LM63_REMOTE_TEMP, "temp2",
-      NOMAP, NOMAP,
-      R, LM63_SYSCTL_TEMP2, VALUE(3), 3 },
-    { SENSORS_LM63_REMOTE_HIGH, "temp2_high",
-      SENSORS_LM63_REMOTE_TEMP, SENSORS_LM63_REMOTE_TEMP,
-      RW, LM63_SYSCTL_TEMP2, VALUE(1), 3 },
-    { SENSORS_LM63_REMOTE_LOW, "temp2_low",
-      SENSORS_LM63_REMOTE_TEMP, SENSORS_LM63_REMOTE_TEMP,
-      RW, LM63_SYSCTL_TEMP2, VALUE(2), 3 },
-    { SENSORS_LM63_REMOTE_TCRIT, "temp2_crit",
-      SENSORS_LM63_REMOTE_TEMP, SENSORS_LM63_REMOTE_TEMP,
-      R, LM63_SYSCTL_TEMP2_TCRIT, VALUE(1), 0 },
-    { SENSORS_LM63_REMOTE_TCRIT_HYST, "temp2_crit_hyst",
-      SENSORS_LM63_REMOTE_TEMP, SENSORS_LM63_REMOTE_TEMP,
-      RW, LM63_SYSCTL_TEMP2_TCRIT_HYST, VALUE(1), 0, "temp2_crit_hyst", 3 },
-    { SENSORS_LM63_ALARMS, "alarms",
-      NOMAP, NOMAP,
-      R, LM63_SYSCTL_ALARMS, VALUE(1), 0 },
-    { SENSORS_LM63_FAN_LOW, "fan1_min",
-      SENSORS_LM63_FAN, SENSORS_LM63_FAN,
-      RW, LM63_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_LM63_FAN, "fan1",
-      NOMAP, NOMAP,
-      R, LM63_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_LM63_PWM, "pwm1",
-      NOMAP, NOMAP,
-      RW, LM63_SYSCTL_PWM1, VALUE(1), 0 },
-    { SENSORS_LM63_PWM_ENABLE, "pwm1_enable",
-      SENSORS_LM63_PWM, NOMAP,
-      RW, LM63_SYSCTL_PWM1, VALUE(2), 0 },
-    { 0 }
+    { { SENSORS_LM63_LOCAL_TEMP, "temp1", NOMAP, NOMAP, R }, 
+                                 LM63_SYSCTL_TEMP1, VALUE(2), 0 },
+    { { SENSORS_LM63_LOCAL_HIGH, "temp1_high", SENSORS_LM63_LOCAL_TEMP, 
+                                 SENSORS_LM63_LOCAL_TEMP, RW }, 
+                                 LM63_SYSCTL_TEMP1, VALUE(1), 0 },
+    { { SENSORS_LM63_REMOTE_TEMP, "temp2", NOMAP, NOMAP, R }, 
+                                  LM63_SYSCTL_TEMP2, VALUE(3), 3 },
+    { { SENSORS_LM63_REMOTE_HIGH, "temp2_high", SENSORS_LM63_REMOTE_TEMP, 
+                                  SENSORS_LM63_REMOTE_TEMP, RW }, 
+                                  LM63_SYSCTL_TEMP2, VALUE(1), 3 },
+    { { SENSORS_LM63_REMOTE_LOW, "temp2_low", SENSORS_LM63_REMOTE_TEMP, 
+                                 SENSORS_LM63_REMOTE_TEMP, RW }, 
+                                 LM63_SYSCTL_TEMP2, VALUE(2), 3 },
+    { { SENSORS_LM63_REMOTE_TCRIT, "temp2_crit", SENSORS_LM63_REMOTE_TEMP, 
+                                   SENSORS_LM63_REMOTE_TEMP, R }, 
+                                   LM63_SYSCTL_TEMP2_TCRIT, VALUE(1), 0 },
+    { { SENSORS_LM63_REMOTE_TCRIT_HYST, "temp2_crit_hyst", 
+                                        SENSORS_LM63_REMOTE_TEMP, 
+                                        SENSORS_LM63_REMOTE_TEMP, RW }, 
+                                        LM63_SYSCTL_TEMP2_TCRIT_HYST, VALUE(1), 
+                                        0, "temp2_crit_hyst", 3 },
+    { { SENSORS_LM63_ALARMS, "alarms", NOMAP, NOMAP, R }, 
+                             LM63_SYSCTL_ALARMS, VALUE(1), 0 },
+    { { SENSORS_LM63_FAN_LOW, "fan1_min", SENSORS_LM63_FAN, SENSORS_LM63_FAN, RW }, 
+                              LM63_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_LM63_FAN, "fan1", NOMAP, NOMAP, R }, 
+                          LM63_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_LM63_PWM, "pwm1", NOMAP, NOMAP, RW }, 
+                          LM63_SYSCTL_PWM1, VALUE(1), 0 },
+    { { SENSORS_LM63_PWM_ENABLE, "pwm1_enable", SENSORS_LM63_PWM, NOMAP, RW }, 
+                                 LM63_SYSCTL_PWM1, VALUE(2), 0 },
+    { { 0 }, 0 }
   };
 
 
 static sensors_chip_feature w83781d_features[] =
   { 
-    { SENSORS_W83781D_IN0, "in0", NOMAP, NOMAP, 
-                        R, W83781D_SYSCTL_IN0, VALUE(3), 2 },
-    { SENSORS_W83781D_IN1, "in1", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_IN1, VALUE(3), 2 },
-    { SENSORS_W83781D_IN2, "in2", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_IN2, VALUE(3), 2 },
-    { SENSORS_W83781D_IN3, "in3", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_IN3, VALUE(3), 2 },
-    { SENSORS_W83781D_IN4, "in4", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_IN4, VALUE(3), 2 },
-    { SENSORS_W83781D_IN5, "in5", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_IN5, VALUE(3), 2 },
-    { SENSORS_W83781D_IN6, "in6", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_IN6, VALUE(3), 2 },
-    { SENSORS_W83781D_IN0_MIN, "in0_min", SENSORS_W83781D_IN0, 
-                        SENSORS_W83781D_IN0, RW, 
-                        W83781D_SYSCTL_IN0, VALUE(1), 2 },
-    { SENSORS_W83781D_IN1_MIN, "in1_min", SENSORS_W83781D_IN1, 
-                        SENSORS_W83781D_IN1, RW, 
-                        W83781D_SYSCTL_IN1, VALUE(1), 2 },
-    { SENSORS_W83781D_IN2_MIN, "in2_min", SENSORS_W83781D_IN2, 
-                        SENSORS_W83781D_IN2, RW, 
-                        W83781D_SYSCTL_IN2, VALUE(1), 2 },
-    { SENSORS_W83781D_IN3_MIN, "in3_min", SENSORS_W83781D_IN3, 
-                        SENSORS_W83781D_IN3, RW, 
-                        W83781D_SYSCTL_IN3, VALUE(1), 2 },
-    { SENSORS_W83781D_IN4_MIN, "in4_min", SENSORS_W83781D_IN4, 
-                        SENSORS_W83781D_IN4, RW, 
-                        W83781D_SYSCTL_IN4, VALUE(1), 2 },
+    { { SENSORS_W83781D_IN0, "in0", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN0, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN1, "in1", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN1, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN2, "in2", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN2, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN3, "in3", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN3, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN4, "in4", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN4, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN5, "in5", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN5, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN6, "in6", NOMAP, NOMAP, R }, 
+                             W83781D_SYSCTL_IN6, VALUE(3), 2 },
+    { { SENSORS_W83781D_IN0_MIN, "in0_min", SENSORS_W83781D_IN0, 
+                                 SENSORS_W83781D_IN0, RW }, 
+                                 W83781D_SYSCTL_IN0, VALUE(1), 2 },
+    { { SENSORS_W83781D_IN1_MIN, "in1_min", SENSORS_W83781D_IN1, 
+                                 SENSORS_W83781D_IN1, RW }, 
+                                 W83781D_SYSCTL_IN1, VALUE(1), 2 },
+    { { SENSORS_W83781D_IN2_MIN, "in2_min", SENSORS_W83781D_IN2, 
+                                 SENSORS_W83781D_IN2, RW }, 
+                                 W83781D_SYSCTL_IN2, VALUE(1), 2 },
+    { { SENSORS_W83781D_IN3_MIN, "in3_min", SENSORS_W83781D_IN3, 
+                                 SENSORS_W83781D_IN3, RW }, 
+                                 W83781D_SYSCTL_IN3, VALUE(1), 2 },
+    { { SENSORS_W83781D_IN4_MIN, "in4_min", SENSORS_W83781D_IN4, 
+                                 SENSORS_W83781D_IN4, RW }, 
+                                 W83781D_SYSCTL_IN4, VALUE(1), 2 },
 /* swap 5 and 6 min/max because compute lines will be inverting */
-    { SENSORS_W83781D_IN5_MIN, "in5_min", SENSORS_W83781D_IN5, 
-                        SENSORS_W83781D_IN5, RW, 
-                        W83781D_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
-    { SENSORS_W83781D_IN6_MIN, "in6_min", SENSORS_W83781D_IN6, 
-                        SENSORS_W83781D_IN6, RW, 
-                        W83781D_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
-    { SENSORS_W83781D_IN0_MAX, "in0_max", SENSORS_W83781D_IN0, 
-                        SENSORS_W83781D_IN0, RW,
-                        W83781D_SYSCTL_IN0, VALUE(2), 2 },
-    { SENSORS_W83781D_IN1_MAX, "in1_max", SENSORS_W83781D_IN1, 
-                        SENSORS_W83781D_IN1, RW, 
-                        W83781D_SYSCTL_IN1, VALUE(2), 2 },
-    { SENSORS_W83781D_IN2_MAX, "in2_max", SENSORS_W83781D_IN2, 
-                        SENSORS_W83781D_IN2, RW, 
-                        W83781D_SYSCTL_IN2, VALUE(2), 2 },
-    { SENSORS_W83781D_IN3_MAX, "in3_max", SENSORS_W83781D_IN3, 
-                        SENSORS_W83781D_IN3, RW, 
-                        W83781D_SYSCTL_IN3, VALUE(2), 2 },
-    { SENSORS_W83781D_IN4_MAX, "in4_max", SENSORS_W83781D_IN4, 
-                        SENSORS_W83781D_IN4, RW,
-                        W83781D_SYSCTL_IN4, VALUE(2), 2 },
-    { SENSORS_W83781D_IN5_MAX, "in5_max", SENSORS_W83781D_IN5, 
-                        SENSORS_W83781D_IN5, RW, 
-                        W83781D_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
-    { SENSORS_W83781D_IN6_MAX, "in6_max", SENSORS_W83781D_IN6, 
-                        SENSORS_W83781D_IN6, RW, 
-                        W83781D_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
-    { SENSORS_W83781D_FAN1, "fan1", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_FAN1, VALUE(2), 0 },
-    { SENSORS_W83781D_FAN2, "fan2", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_FAN2, VALUE(2), 0 },
-    { SENSORS_W83781D_FAN3, "fan3", NOMAP, NOMAP,
-                        R, W83781D_SYSCTL_FAN3, VALUE(2), 0 },
-    { SENSORS_W83781D_FAN1_MIN, "fan1_min", SENSORS_W83781D_FAN1,
-                        SENSORS_W83781D_FAN1, RW, 
-                        W83781D_SYSCTL_FAN1, VALUE(1), 0 },
-    { SENSORS_W83781D_FAN2_MIN, "fan2_min", SENSORS_W83781D_FAN2, 
-                        SENSORS_W83781D_FAN2, RW, 
-                        W83781D_SYSCTL_FAN2, VALUE(1), 0 },
-    { SENSORS_W83781D_FAN3_MIN, "fan3_min", SENSORS_W83781D_FAN3, 
-                        SENSORS_W83781D_FAN3, RW, 
-                        W83781D_SYSCTL_FAN3, VALUE(1), 0 },
-    { SENSORS_W83781D_TEMP1, "temp1", NOMAP, NOMAP,
-                         R, W83781D_SYSCTL_TEMP1, VALUE(3), 1 },
-    { SENSORS_W83781D_TEMP1_HYST, "temp1_hyst", SENSORS_W83781D_TEMP1,
-                         SENSORS_W83781D_TEMP1, RW, 
-                         W83781D_SYSCTL_TEMP1, VALUE(2), 1 },
-    { SENSORS_W83781D_TEMP1_OVER, "temp1_over", SENSORS_W83781D_TEMP1,
-                         SENSORS_W83781D_TEMP1, RW, 
-                         W83781D_SYSCTL_TEMP1, VALUE(1), 1 },
-    { SENSORS_W83781D_TEMP2, "temp2", NOMAP, NOMAP,
-                         R, W83781D_SYSCTL_TEMP2, VALUE(3), 1 },
-    { SENSORS_W83781D_TEMP2_HYST, "temp2_hyst", SENSORS_W83781D_TEMP2,
-                         SENSORS_W83781D_TEMP2, RW, 
-                         W83781D_SYSCTL_TEMP2, VALUE(2), 1 },
-    { SENSORS_W83781D_TEMP2_OVER, "temp2_over", SENSORS_W83781D_TEMP2,
-                         SENSORS_W83781D_TEMP2, RW, 
-                         W83781D_SYSCTL_TEMP2, VALUE(1), 1 },
-    { SENSORS_W83781D_TEMP3, "temp3", NOMAP, NOMAP,
-                         R, W83781D_SYSCTL_TEMP3, VALUE(3), 1 },
-    { SENSORS_W83781D_TEMP3_HYST, "temp3_hyst", SENSORS_W83781D_TEMP3,
-                         SENSORS_W83781D_TEMP3, RW, 
-                         W83781D_SYSCTL_TEMP3, VALUE(2), 1 },
-    { SENSORS_W83781D_TEMP3_OVER, "temp3_over", SENSORS_W83781D_TEMP3,
-                         SENSORS_W83781D_TEMP3, RW, 
-                         W83781D_SYSCTL_TEMP3, VALUE(1), 1 },
-    { SENSORS_W83781D_VID, "vid", NOMAP, NOMAP,
-                         R, W83781D_SYSCTL_VID, VALUE(1), 3 },
-    { SENSORS_W83781D_VRM, "vrm", NOMAP, NOMAP,
-                         RW, W83781D_SYSCTL_VRM, VALUE(1), 1 },
-    { SENSORS_W83781D_FAN1_DIV, "fan1_div", SENSORS_W83781D_FAN1, 
-                         NOMAP, RW, 
-                         W83781D_SYSCTL_FAN_DIV, VALUE(1), 0 },
-    { SENSORS_W83781D_FAN2_DIV, "fan2_div", SENSORS_W83781D_FAN2, 
-                         NOMAP, RW, 
-                         W83781D_SYSCTL_FAN_DIV, VALUE(2), 0 },
-    { SENSORS_W83781D_FAN3_DIV, "fan3_div", SENSORS_W83781D_FAN3, 
-                         NOMAP, RW, 
-                         W83781D_SYSCTL_FAN_DIV, VALUE(3), 0 },
-    { SENSORS_W83781D_ALARMS, "alarms", NOMAP, NOMAP, 
-                         R, W83781D_SYSCTL_ALARMS, VALUE(1), 0 },
-    { SENSORS_W83781D_BEEP_ENABLE, "beep_enable", SENSORS_W83781D_ALARMS,
-                         NOMAP, RW,
-                         W83781D_SYSCTL_BEEP, VALUE(1), 0 },
-    { SENSORS_W83781D_BEEPS, "beeps", SENSORS_W83781D_ALARMS,
-                         SENSORS_W83781D_ALARMS, RW,
-                         W83781D_SYSCTL_BEEP, VALUE(2), 0 },
-    { 0 }
+    { { SENSORS_W83781D_IN5_MIN, "in5_min", SENSORS_W83781D_IN5, 
+                                 SENSORS_W83781D_IN5, RW }, 
+                                 W83781D_SYSCTL_IN5, VALUE(2), 2, "in5_max", 3 },
+    { { SENSORS_W83781D_IN6_MIN, "in6_min", SENSORS_W83781D_IN6, 
+                                 SENSORS_W83781D_IN6, RW }, 
+                                 W83781D_SYSCTL_IN6, VALUE(2), 2, "in6_max", 3 },
+    { { SENSORS_W83781D_IN0_MAX, "in0_max", SENSORS_W83781D_IN0, 
+                                 SENSORS_W83781D_IN0, RW }, 
+                                 W83781D_SYSCTL_IN0, VALUE(2), 2 },
+    { { SENSORS_W83781D_IN1_MAX, "in1_max", SENSORS_W83781D_IN1, 
+                                 SENSORS_W83781D_IN1, RW }, 
+                                 W83781D_SYSCTL_IN1, VALUE(2), 2 },
+    { { SENSORS_W83781D_IN2_MAX, "in2_max", SENSORS_W83781D_IN2, 
+                                 SENSORS_W83781D_IN2, RW }, 
+                                 W83781D_SYSCTL_IN2, VALUE(2), 2 },
+    { { SENSORS_W83781D_IN3_MAX, "in3_max", SENSORS_W83781D_IN3, 
+                                 SENSORS_W83781D_IN3, RW }, 
+                                 W83781D_SYSCTL_IN3, VALUE(2), 2 },
+    { { SENSORS_W83781D_IN4_MAX, "in4_max", SENSORS_W83781D_IN4, 
+                                 SENSORS_W83781D_IN4, RW }, 
+                                 W83781D_SYSCTL_IN4, VALUE(2), 2 },
+    { { SENSORS_W83781D_IN5_MAX, "in5_max", SENSORS_W83781D_IN5, 
+                                 SENSORS_W83781D_IN5, RW }, 
+                                 W83781D_SYSCTL_IN5, VALUE(1), 2, "in5_min", 3 },
+    { { SENSORS_W83781D_IN6_MAX, "in6_max", SENSORS_W83781D_IN6, 
+                                 SENSORS_W83781D_IN6, RW }, 
+                                 W83781D_SYSCTL_IN6, VALUE(1), 2, "in6_min", 3 },
+    { { SENSORS_W83781D_FAN1, "fan1", NOMAP, NOMAP, R }, 
+                              W83781D_SYSCTL_FAN1, VALUE(2), 0 },
+    { { SENSORS_W83781D_FAN2, "fan2", NOMAP, NOMAP, R }, 
+                              W83781D_SYSCTL_FAN2, VALUE(2), 0 },
+    { { SENSORS_W83781D_FAN3, "fan3", NOMAP, NOMAP, R }, 
+                              W83781D_SYSCTL_FAN3, VALUE(2), 0 },
+    { { SENSORS_W83781D_FAN1_MIN, "fan1_min", SENSORS_W83781D_FAN1, 
+                                  SENSORS_W83781D_FAN1, RW }, 
+                                  W83781D_SYSCTL_FAN1, VALUE(1), 0 },
+    { { SENSORS_W83