decode-dimms: Add support for at24 kernel driver
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