Browse Source

Behave properly when i2c-stub is already loaded.

git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@5292 7894878c-1315-0410-8ee3-d5d059ff63e0
tags/v3.0.2
Jean Delvare 17 years ago
parent
commit
cc17bf04ca
  1. 1
      CHANGES
  2. 50
      stub/i2c-stub-from-dump

1
CHANGES

@ -22,6 +22,7 @@ SVN
Better error message on missing adapter functionality
i2c-stub-from-dump: Add support for partial dumps
Report if only garbage is found in dump file
Behave properly when i2c-stub is already loaded
3.0.1 (2008-04-04)
Drop the trailing .pl from all perl script names

50
stub/i2c-stub-from-dump

@ -58,6 +58,45 @@ sub get_i2c_stub_bus_number
}
close(FH);
return $nr;
}
# Load the required kernel drivers if needed
sub load_kernel_drivers
{
local $_;
my $addr = oct shift;
my $nr;
# Maybe everything is already loaded
$nr = get_i2c_stub_bus_number();
if (defined $nr) {
if (kernel_version_at_least(2, 6, 19)) {
# Check if the chip address we need is there
open(CHIP_ADDR, "/sys/module/i2c_stub/parameters/chip_addr");
$_ = <CHIP_ADDR>;
chomp;
my @stub_addr = split ',';
close(CHIP_ADDR);
foreach (@stub_addr) {
return $nr if $addr == $_;
}
printf STDERR "i2c-stub already loaded without support for address 0x%02x\n", $addr;
exit 2;
}
return $nr;
}
system("/sbin/modprobe", "i2c-dev") == 0 || exit 1;
if (kernel_version_at_least(2, 6, 19)) {
system("/sbin/modprobe", "i2c-stub", "chip_addr=$addr") == 0 || exit 1;
} else {
system("/sbin/modprobe", "i2c-stub") == 0 || exit 1;
}
sleep(1); # udev may take some time to create the device node
$nr = get_i2c_stub_bus_number();
if (!defined($nr)) {
print STDERR "Please load i2c-stub first\n";
exit 2;
@ -123,16 +162,7 @@ if ($addr !~ m/^0x[0-7][0-9a-f]$/i) {
initialize_kernel_version();
# Load the required kernel drivers if needed
system("/sbin/modprobe", "i2c-dev") == 0 || exit 1;
if (kernel_version_at_least(2, 6, 19)) {
system("/sbin/modprobe", "i2c-stub", "chip_addr=$addr") == 0 || exit 1;
} else {
system("/sbin/modprobe", "i2c-stub") == 0 || exit 1;
}
sleep(1); # udev may take some time to create the device node
$bus_nr = get_i2c_stub_bus_number();
$bus_nr = load_kernel_drivers($addr);
$bytes = $words = 0;
# We don't want to see the output of 256 i2cset

Loading…
Cancel
Save