Index: lm-sensors/branches/lm-sensors-3.0.0/prog/sensors/chips.c
===================================================================
--- lm-sensors/branches/lm-sensors-3.0.0/prog/sensors/chips.c	(revision 4822)
+++ lm-sensors/branches/lm-sensors-3.0.0/prog/sensors/chips.c	(revision 4831)
@@ -31,28 +31,32 @@
 void print_chip_raw(const sensors_chip_name *name)
 {
-	int a;
-	const sensors_feature_data *data;
+	int a, b;
+	const sensors_feature_data *feature, *sub;
 	char *label;
 	double val;
 
 	a = 0;
-	while ((data = sensors_get_all_features(name, &a))) {
-		if (!(label = sensors_get_label(name, data->number))) {
-			printf("ERROR: Can't get feature `%s' label!\n",
-			       data->name);
-			continue;
-		}
-		if (data->flags & SENSORS_MODE_R) {
-			if (sensors_get_value(name, data->number, &val))
-				printf("ERROR: Can't get feature `%s' data!\n",
-				       data->name);
-			else if (data->mapping != SENSORS_NO_MAPPING)
-				printf("  %s: %.2f\n", label, val);
-			else
-				printf("%s: %.2f (%s)\n", label, val,
-				       data->name);
-		} else
-			printf("(%s)\n", label);
-		free(label);
+	while ((feature = sensors_get_features(name, &a))) {
+		b = 0;
+		while ((sub = sensors_get_all_subfeatures(name, feature->number,
+						      &b))) {
+			if (!(label = sensors_get_label(name, sub->number))) {
+				printf("ERROR: Can't get feature `%s' label!\n",
+				       sub->name);
+				continue;
+			}
+			if (sub->flags & SENSORS_MODE_R) {
+				if (sensors_get_value(name, sub->number, &val))
+					printf("ERROR: Can't get feature `%s' "
+					       "data!\n", sub->name);
+				else if (sub->mapping != SENSORS_NO_MAPPING)
+					printf("  %s: %.2f\n", label, val);
+				else
+					printf("%s: %.2f (%s)\n", label, val,
+					       sub->name);
+			} else
+				printf("(%s)\n", label);
+			free(label);
+		}
 	}
 }
@@ -71,12 +75,12 @@
 static void sensors_get_available_features(const sensors_chip_name *name,
 					   const sensors_feature_data *feature,
-					   int i, short *has_features,
+					   short *has_features,
 					   double *feature_vals, int size,
 					   int first_val)
 {
 	const sensors_feature_data *iter;
-
-	while ((iter = sensors_get_all_features(name, &i)) &&
-	       iter->mapping == feature->number) {
+	int i = 0;
+
+	while ((iter = sensors_get_all_subfeatures(name, feature->number, &i))) {
 		int indx, err;
 
@@ -105,7 +109,5 @@
 
 	i = 0;
-	while ((iter = sensors_get_all_features(name, &i))) {
-		if (iter->mapping != SENSORS_NO_MAPPING)
-			continue;
+	while ((iter = sensors_get_features(name, &i))) {
 		if ((label = sensors_get_label(name, iter->number)) &&
 		    strlen(label) > max_size)
@@ -142,5 +144,5 @@
 #define TEMP_FEATURE_VAL(x)	feature_vals[x - SENSORS_FEATURE_TEMP - 1]
 static void print_chip_temp(const sensors_chip_name *name,
-			    const sensors_feature_data *feature, int i,
+			    const sensors_feature_data *feature,
 			    int label_size)
 {
@@ -164,5 +166,5 @@
 	}
 
-	sensors_get_available_features(name, feature, i, has_features,
+	sensors_get_available_features(name, feature, has_features,
 				       feature_vals, size,
 				       SENSORS_FEATURE_TEMP);
@@ -280,5 +282,5 @@
 #define IN_FEATURE_VAL(x)	feature_vals[x - SENSORS_FEATURE_IN - 1]
 static void print_chip_in(const sensors_chip_name *name,
-			  const sensors_feature_data *feature, int i,
+			  const sensors_feature_data *feature,
 			  int label_size)
 {
@@ -300,5 +302,5 @@
 	}
 
-	sensors_get_available_features(name, feature, i, has_features,
+	sensors_get_available_features(name, feature, has_features,
 				       feature_vals, size, SENSORS_FEATURE_IN);
 
@@ -345,5 +347,5 @@
 #define FAN_FEATURE_VAL(x)	feature_vals[x - SENSORS_FEATURE_FAN - 1]
 static void print_chip_fan(const sensors_chip_name *name,
-			   const sensors_feature_data *feature, int i,
+			   const sensors_feature_data *feature,
 			   int label_size)
 {
@@ -368,5 +370,5 @@
 	free(label);
 
-	sensors_get_available_features(name, feature, i, has_features,
+	sensors_get_available_features(name, feature, has_features,
 				       feature_vals, size, SENSORS_FEATURE_FAN);
 
@@ -433,17 +435,14 @@
 
 	i = 0;
-	while ((feature = sensors_get_all_features(name, &i))) {
-		if (feature->mapping != SENSORS_NO_MAPPING)
-			continue;
-
+	while ((feature = sensors_get_features(name, &i))) {
 		switch (feature->type) {
 		case SENSORS_FEATURE_TEMP:
-			print_chip_temp(name, feature, i, label_size);
+			print_chip_temp(name, feature, label_size);
 			break;
 		case SENSORS_FEATURE_IN:
-			print_chip_in(name, feature, i, label_size);
+			print_chip_in(name, feature, label_size);
 			break;
 		case SENSORS_FEATURE_FAN:
-			print_chip_fan(name, feature, i, label_size);
+			print_chip_fan(name, feature, label_size);
 			break;
 		case SENSORS_FEATURE_VID:
