Changeset 5292

Show
Ignore:
Timestamp:
06/28/08 11:23:13 (5 months ago)
Author:
khali
Message:

Behave properly when i2c-stub is already loaded.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • i2c-tools/trunk/CHANGES

    r5287 r5292  
    2323  i2c-stub-from-dump: Add support for partial dumps 
    2424                      Report if only garbage is found in dump file 
     25                      Behave properly when i2c-stub is already loaded 
    2526 
    26273.0.1 (2008-04-04) 
  • i2c-tools/trunk/stub/i2c-stub-from-dump

    r5280 r5292  
    5959        close(FH); 
    6060 
     61        return $nr; 
     62} 
     63 
     64# Load the required kernel drivers if needed 
     65sub 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(); 
    61100        if (!defined($nr)) { 
    62101                print STDERR "Please load i2c-stub first\n"; 
     
    124163initialize_kernel_version(); 
    125164 
    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); 
    136166$bytes = $words = 0; 
    137167