Index: lm-sensors/branches/lm-sensors-3.0.0/lib/access.c
===================================================================
--- lm-sensors/branches/lm-sensors-3.0.0/lib/access.c	(revision 4830)
+++ lm-sensors/branches/lm-sensors-3.0.0/lib/access.c	(revision 4831)
@@ -344,7 +344,6 @@
 }
 
-/* nr-1 is the last feature returned */
-const sensors_feature_data *sensors_get_all_features(const sensors_chip_name *name,
-						     int *nr)
+static const sensors_feature_data *
+sensors_get_all_features(const sensors_chip_name *name, int *nr)
 {
 	sensors_feature_data *feature_list;
@@ -362,4 +361,34 @@
 		}
 	return NULL;
+}
+
+const sensors_feature_data *
+sensors_get_features(const sensors_chip_name *name, int *nr)
+{
+	const sensors_feature_data *feature;
+
+	while ((feature = sensors_get_all_features(name, nr))) {
+		if (feature->mapping == SENSORS_NO_MAPPING)
+			return feature;
+	}
+	return NULL;	/* end of list */
+}
+
+const sensors_feature_data *
+sensors_get_all_subfeatures(const sensors_chip_name *name, int feature, int *nr)
+{
+	const sensors_feature_data *subfeature;
+
+	/* Seek directly to the first subfeature */
+	if (*nr < feature)
+		*nr = feature;
+
+	subfeature = sensors_get_all_features(name, nr);
+	if (!subfeature)
+		return NULL;	/* end of list */
+	if (subfeature->number == feature ||
+	    subfeature->mapping == feature)
+		return subfeature;
+	return NULL;		/* end of subfeature list */
 }
 
