| | 61 | return $nr; |
|---|
| | 62 | } |
|---|
| | 63 | |
|---|
| | 64 | # Load the required kernel drivers if needed |
|---|
| | 65 | sub load_kernel_drivers |
|---|
| | 66 | { |
|---|
| | 67 | local $_; |
|---|
| | 68 | my $addr = oct shift; |
|---|
| | 69 | my $nr; |
|---|
| | 70 | |
|---|
| | 71 | # Maybe everything is already loaded |
|---|
| | 72 | $nr = get_i2c_stub_bus_number(); |
|---|
| | 73 | if (defined $nr) { |
|---|
| | 74 | if (kernel_version_at_least(2, 6, 19)) { |
|---|
| | 75 | # Check if the chip address we need is there |
|---|
| | 76 | open(CHIP_ADDR, "/sys/module/i2c_stub/parameters/chip_addr"); |
|---|
| | 77 | $_ = <CHIP_ADDR>; |
|---|
| | 78 | chomp; |
|---|
| | 79 | my @stub_addr = split ','; |
|---|
| | 80 | close(CHIP_ADDR); |
|---|
| | 81 | |
|---|
| | 82 | foreach (@stub_addr) { |
|---|
| | 83 | return $nr if $addr == $_; |
|---|
| | 84 | } |
|---|
| | 85 | printf STDERR "i2c-stub already loaded without support for address 0x%02x\n", $addr; |
|---|
| | 86 | exit 2; |
|---|
| | 87 | } |
|---|
| | 88 | return $nr; |
|---|
| | 89 | } |
|---|
| | 90 | |
|---|
| | 91 | system("/sbin/modprobe", "i2c-dev") == 0 || exit 1; |
|---|
| | 92 | if (kernel_version_at_least(2, 6, 19)) { |
|---|
| | 93 | system("/sbin/modprobe", "i2c-stub", "chip_addr=$addr") == 0 || exit 1; |
|---|
| | 94 | } else { |
|---|
| | 95 | system("/sbin/modprobe", "i2c-stub") == 0 || exit 1; |
|---|
| | 96 | } |
|---|
| | 97 | sleep(1); # udev may take some time to create the device node |
|---|
| | 98 | |
|---|
| | 99 | $nr = get_i2c_stub_bus_number(); |
|---|
| 126 | | # Load the required kernel drivers if needed |
|---|
| 127 | | system("/sbin/modprobe", "i2c-dev") == 0 || exit 1; |
|---|
| 128 | | if (kernel_version_at_least(2, 6, 19)) { |
|---|
| 129 | | system("/sbin/modprobe", "i2c-stub", "chip_addr=$addr") == 0 || exit 1; |
|---|
| 130 | | } else { |
|---|
| 131 | | system("/sbin/modprobe", "i2c-stub") == 0 || exit 1; |
|---|
| 132 | | } |
|---|
| 133 | | sleep(1); # udev may take some time to create the device node |
|---|
| 134 | | |
|---|
| 135 | | $bus_nr = get_i2c_stub_bus_number(); |
|---|
| | 165 | $bus_nr = load_kernel_drivers($addr); |
|---|