summaryrefslogtreecommitdiff
path: root/stub
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2008-01-05 09:44:29 +0000
committerJean Delvare <jdelvare@suse.de>2008-01-05 09:44:29 +0000
commit49481878a2318770713b424159d7e66113c5414c (patch)
treee6faa8d7136db6b0be1d6836c96b861ac5a08526 /stub
parent35cef6eb2ca0629235b2d413b952ae2bb2e56631 (diff)
downloadi2c-tools-git-49481878a2318770713b424159d7e66113c5414c.tar.gz
Add support for kernel < 2.6.19, where the i2c-stub module didn't yet have
a chip_addr parameter. git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@5091 7894878c-1315-0410-8ee3-d5d059ff63e0
Diffstat (limited to 'stub')
-rwxr-xr-xstub/i2c-stub-from-dump29
1 files changed, 28 insertions, 1 deletions
diff --git a/stub/i2c-stub-from-dump b/stub/i2c-stub-from-dump
index 4c14faf..1d76b43 100755
--- a/stub/i2c-stub-from-dump
+++ b/stub/i2c-stub-from-dump
@@ -24,6 +24,27 @@
use strict;
use vars qw($bus_nr $addr $count);
+# Kernel version detection code by Mark M. Hoffman,
+# copied from sensors-detect.
+use vars qw(@kernel_version);
+
+sub initialize_kernel_version
+{
+ `uname -r` =~ /(\d+)\.(\d+)\.(\d+)(.*)/;
+ @kernel_version = ($1, $2, $3, $4);
+}
+
+sub kernel_version_at_least
+{
+ my ($vers, $plvl, $slvl) = @_;
+ return 1 if ($kernel_version[0] > $vers ||
+ ($kernel_version[0] == $vers &&
+ ($kernel_version[1] > $plvl ||
+ ($kernel_version[1] == $plvl &&
+ ($kernel_version[2] >= $slvl)))));
+ return 0;
+}
+
# Find out the i2c bus number of i2c-stub
sub get_i2c_stub_bus_number
{
@@ -62,9 +83,15 @@ if ($addr !~ m/^0x[0-7][0-9a-f]$/i) {
exit 1;
}
+initialize_kernel_version();
+
# Load the required kernel drivers if needed
system("/sbin/modprobe", "i2c-dev") == 0 || exit 1;
-system("/sbin/modprobe", "i2c-stub", "chip_addr=$addr") == 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();