eeprom driver
Jean Delvare
delvare at ensicaen.ismra.fr
Sun Feb 17 23:54:40 CET 2002
I enhanced my decode-vaio.pl script today. Here is the new version (0.3).
I give you the whole script instead of a diff because there are so many
changes that the diff is hardly readable and is bigger that the script
itself.
See the changes list inside the script for details.
--
/~~ Jean "Khali" Delvare
-----\_ mail: delvare at ensicaen.ismra.fr
--------\ http://www.ensicaen.ismra.fr/~delvare/
---=ISMRA/- ____________________________________________________
-------------- next part --------------
#!/usr/bin/perl -w
#
# Copyright 2002 Jean Delvare <khali at linux-fr.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Version 0.1 2002-02-06 Jean Delvare <khali at linux-fr.org>
# Version 0.2 2002-02-16 Jean Delvare <khali at linux-fr.org>
# Fixed to work with the new, simplified /proc interface names of the eeprom driver
# (lm_sensors 2.6.3 and greater.)
# Shifted data display by 4 columns left.
# Version 0.3 2002-02-17 Jean Delvare <khali at linux-fr.org>
# Added UUID field at 0x10 (added decode_uuid.)
# Merged decode_string and decode_string32.
# Added unknown field at 0x20.
# Moved header and footer to BEGIN and END, respectivly.
# Reformated history to match those of the other decode scripts.
# Deleted decode_char (made useless by decode_string.)
# Reordered field display, changed some labels.
# Added old /proc interface check.
#
# EEPROM data decoding for Sony Vaio laptops.
#
# Two assumptions: lm_sensors-2.6.3 or greater installed,
# and Perl is at /usr/bin/perl
#
# Please note that this is a guess-only work. Sony support refused to help
# me, so if someone can provide information, please contact me. I used my
# PCG-GR214EP as a base, but I can't promise that this script will work with
# other models. Any feedback appreciated anyway.
#
use strict;
sub print_item
{
my ($label,$value) = @_;
printf("\%16s : \%s\n",$label,$value);
}
sub decode_string
{
my ($bus,$addr,$base,$offset,$length) = @_;
my $line='';
my $remains=$length+$offset;
while($remains>0)
{
my $filename="/proc/sys/dev/sensors/eeprom-i2c-$bus-$addr/".sprintf('%02x',$base);
open(FH,$filename) || die "Can't open $filename";
$line.=<FH>;
close(FH);
$remains-=16;
$base+=16;
}
my @bytes=split(/[ \n]/,$line);
@bytes=@bytes[$offset..$offset+$length-1];
my $string='';
my $item;
while(defined($item=shift(@bytes)) && ($item!=0))
{
$string.=chr($item);
}
return($string);
}
sub decode_uuid
{
my ($bus,$addr,$base) = @_;
my $filename="/proc/sys/dev/sensors/eeprom-i2c-$bus-$addr/".sprintf('%02x',$base);
open(FH,$filename) || die "Can't open $filename";
my $line=<FH>;
close(FH);
my @bytes=split(/[ \n]/,$line);
my $string='';
my $item;
for(my $i=0;$i<16;$i++)
{
$string.=sprintf('%02x',shift(@bytes));
if(($i==3)||($i==5)||($i==7)||($i==9))
{
$string.='-';
}
}
return($string);
}
sub vaio_decode
{
my ($bus,$addr) = @_;
print_item('Machine Name',decode_string($bus,$addr,128,0,32));
print_item('Serial Number',decode_string($bus,$addr,192,0,32));
print_item('UUID',decode_uuid($bus,$addr,16));
print_item('Revision',decode_string($bus,$addr,160,0,10));
print_item('Model Number','PCG-'.decode_string($bus,$addr,160,10,4));
print_item('?',decode_string($bus,$addr,32,0,16));
print_item('?',decode_string($bus,$addr,224,0,32));
}
BEGIN
{
print("Sony Vaio EEPROM Decoder\n");
print("Written by Jean Delvare. Copyright 2002.\n");
print("Version 0.3\n\n");
}
END
{
print("\n");
}
if ( -r '/proc/sys/dev/sensors/eeprom-i2c-0-57')
{
if ( -r '/proc/sys/dev/sensors/eeprom-i2c-0-57/data0-15')
{
print("Deprecated old interface found. Please upgrade to lm_sensors 2.6.3 or greater.");
}
else
{
vaio_decode('0','57');
}
}
else
{
print("Vaio EEPROM not found. Please make sure that the eeprom module is loaded.\n");
print("If you believe this is an error, please contact me <khali\@linux-fr.org>\n");
print("so that we may see how to fix the problem.\n");
}
More information about the lm-sensors
mailing list