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(-)

--- i2c-tools.orig/eeprom/decode-dimms  2009-06-09 13:14:35.000000000 +0200
+++ i2c-tools/eeprom/decode-dimms       2010-03-08 09:00:05.000000000 +0100
@@ -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";


-- 
Jean Delvare
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to