diff options
author | Jean Delvare <jdelvare@suse.de> | 2008-01-05 09:44:29 +0000 |
---|---|---|
committer | Jean Delvare <jdelvare@suse.de> | 2008-01-05 09:44:29 +0000 |
commit | 49481878a2318770713b424159d7e66113c5414c (patch) | |
tree | e6faa8d7136db6b0be1d6836c96b861ac5a08526 /stub | |
parent | 35cef6eb2ca0629235b2d413b952ae2bb2e56631 (diff) | |
download | i2c-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-x | stub/i2c-stub-from-dump | 29 |
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(); |