Skip to contentSkip to conversation

decode-dimms: Add support for at24 kernel driver

PATCH New Jean Delvare 1 participant 1 message Mar 8, 2010 I2C subsystem host drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 decode-dimms: Add support for at24 kernel driver

Add support for at24 kernel driver, in addition to the legacy eeprom kernel driver.

---
 eeprom/decode-dimms |   47 +++++++++++++++++++++++++++++++++++++----------
 1 file changed, 37 insertions(+), 10 deletions(-)
eeprom/decode-dimms +37 -10
@@ -1707,24 +1707,51 @@ printh('Memory Serial Presence Detect De
 Jean Delvare, Trent Piepho and others');
 
 
+# From a sysfs device path and an attribute name, return the attribute
+# value, or undef (stolen from sensors-detect)
+sub sysfs_device_attribute
+{
+	my ($device, $attr) = @_;
+	my $value;
+
+	open(local *FILE, "$device/$attr") or return "";
+	$value = <FILE>;
+	close(FILE);
+	return unless defined $value;
+
+	chomp($value);
+	return $value;
+}
+
 sub get_dimm_list
 {
-	my ($dir, $file, @files);
+	my (@dirs, $dir, $file, @files);
 
 	if ($use_sysfs) {
-		$dir = '/sys/bus/i2c/drivers/eeprom';
+		@dirs = ('/sys/bus/i2c/drivers/eeprom', '/sys/bus/i2c/drivers/at24');
 	} else {
-		$dir = '/proc/sys/dev/sensors';
+		@dirs = ('/proc/sys/dev/sensors');
 	}
 
-	if (opendir(local *DIR, $dir)) {
-		while (defined($file = readdir(DIR))) {
-			next if $use_sysfs && $file !~ /^\d+-[\da-f]+$/i;
-			next if !$use_sysfs && $file !~ /^eeprom-/;
-			push @files, { eeprom => "$file",
-				       file => "$dir/$file" };
+	foreach $dir (@dirs) {
+		if (opendir(local *DIR, $dir)) {
+			while (defined($file = readdir(DIR))) {
+				if ($use_sysfs) {
+					next if $file !~ /^\d+-[\da-f]+$/i;
+					next if ! -d "$dir/$file";
+					my $attr = sysfs_device_attribute("$dir/$file", "name");
+					next unless defined $attr && ($attr eq "eeprom" || $attr eq "spd");
+				} else {
+					next if $file !~ /^eeprom-/;
+				}
+				push @files, { eeprom => "$file",
+					       file => "$dir/$file" };
+			}
+			close(DIR);
 		}
-		close(DIR);
+	}
+
+	if (@files) {
 		return sort { $a->{file} cmp $b->{file} } @files;
 	} elsif (! -d '/sys/module/eeprom') {
 		print "No EEPROM found, are you sure the eeprom module is loaded?\n";
Signature · 1 line
Jean Delvare