diff options
Diffstat (limited to 'perl-install/standalone/service_harddrake')
-rwxr-xr-x | perl-install/standalone/service_harddrake | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/perl-install/standalone/service_harddrake b/perl-install/standalone/service_harddrake index 6c24699ef..725c8062a 100755 --- a/perl-install/standalone/service_harddrake +++ b/perl-install/standalone/service_harddrake @@ -34,15 +34,23 @@ $last_boot_config .= '_X11' if $invert_do_it; my $modules_conf = modules::any_conf->read; -# autoreconfigure the mouse on major kernel change: -my $prev_kernel = { getVarsFromSh("$hw_sysconfdir/kernel") }->{KERNEL}; +my $isLaptop = detect_devices::isLaptop(); my $curr_kernel = c::kernel_version(); $curr_kernel =~ s/(^\d+\.\d+).*/$1/; -setVarsInSh("$hw_sysconfdir/kernel", { KERNEL => $curr_kernel }); -if ($curr_kernel ne $prev_kernel) { + +my %previous_kernel_config = getVarsFromSh("$hw_sysconfdir/kernel"); +setVarsInSh("$hw_sysconfdir/kernel", { KERNEL => $curr_kernel, IS_LAPTOP => bool2text($isLaptop) }); + +# autoreconfigure the mouse on major kernel change: +if ($curr_kernel ne $previous_kernel_config{KERNEL}) { log::explanations("Autoconfiguring mouse since we switched between 2.4.x and 2.6.x kernels"); harddrake::autoconf::mouse_conf($modules_conf); } +# autoreconfigure laptop-dependent services when switching from laptop to desktop, and vice versa +if (!exists $previous_kernel_config{IS_LAPTOP} || $force || $isLaptop ne to_bool($previous_kernel_config{IS_LAPTOP})) { + log::explanations("Autoconfiguring laptop tools since we switched between laptop and desktop systems"); + harddrake::autoconf::laptop($isLaptop); +} if (find { $_->{driver} =~ /Card:NVIDIA/ } detect_devices::probeall()) { if (find { -e join('', "/lib/modules/", c::kernel_version(), "/kernel/drivers/$_") } map { ("video/$_", "char/$_", "char/drm/$_") } qw(NVdriver nvidia.o nvidia.o.gz nvidia.ko nvidia.ko.gz)) { @@ -111,10 +119,14 @@ foreach my $hw_class (@harddrake::data::tree) { log::explanations("removed $Ident: " . harddrake::data::custom_id($oldconfig->{$_}, $item)) foreach @was_removed; log::explanations("added $Ident: " . harddrake::data::custom_id($ID{$_}, $item)) foreach @added; - modules::load_and_configure($modules_conf, 'ohci1394') if $Ident eq 'FIREWIRE_CONTROLLER' && any { $_->{driver} eq 'ohci1394' } @added; + if ($Ident eq 'FIREWIRE_CONTROLLER' && any { $_->{driver} eq 'ohci1394' } @ID{@added}) { + modules::load_and_configure($modules_conf, 'ohci1394'); + $modules_conf->write; + } + @added || @was_removed or next; - next if $Ident eq 'MOUSE' && $curr_kernel ne $prev_kernel; + next if $Ident eq 'MOUSE' && $curr_kernel ne $previous_kernel_config{KERNEL}; my @configurator_pool; if (harddrake::data::is_removable($Ident)) { @@ -160,6 +172,8 @@ foreach my $hw_class (@harddrake::data::tree) { $modules_conf->write; modules::load(difference2(\@new_drivers, \@old_drivers)); next; + } elsif ($Ident eq "BLUETOOTH") { + harddrake::autoconf::bluetooth(scalar keys %ID); } elsif ($Ident eq "PCMCIA_CONTROLLER") { harddrake::autoconf::pcmcia(keys %ID ? first(values(%ID))->{driver} : ''); } elsif ($Ident eq "USB_CONTROLLER") { |