eeepc-laptop: fix wlan rfkill state change during init
authorAlan Jenkins <alan-jenkins@tuffmail.co.uk>
Mon, 27 Apr 2009 07:23:37 +0000 (09:23 +0200)
committerLen Brown <len.brown@intel.com>
Thu, 14 May 2009 15:14:42 +0000 (11:14 -0400)
When an rfkill device is registered, the rfkill core will change its
state to the system default. So we need to prepare for state changes
*before* we register it. That means installing the eeepc-specific ACPI
callback which handles the hotplug of the wireless network adaptor.

This problem doesn't occur during normal operation.  You have to

1) Boot with wireless enabled. eeepc-laptop should load automatically.
2) modprobe -r eeepc-laptop
3) modprobe eeepc-laptop

On boot, the default rfkill state will be set to enabled.
With the current core code, step 2) will disable the wireless.
Therefore in step 3), the wireless will change state during registration,
from disabled to enabled.  But without this fix, the PCI device for the
wireless adaptor will not appear.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Acked-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Corentin Chary <corentincj@iksaif.net>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/platform/x86/eeepc-laptop.c

index 6f54fd1757cd873e24a2dc2e690923a9f061db21..e21f7cd72e4ed6bddf7adb50f4951d825a22ae84 100644 (file)
@@ -649,6 +649,9 @@ static int eeepc_hotk_add(struct acpi_device *device)
        if (ACPI_FAILURE(status))
                printk(EEEPC_ERR "Error installing notify handler\n");
 
+       eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6");
+       eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7");
+
        if (get_acpi(CM_ASL_WLAN) != -1) {
                ehotk->eeepc_wlan_rfkill = rfkill_allocate(&device->dev,
                                                           RFKILL_TYPE_WLAN);
@@ -704,9 +707,6 @@ static int eeepc_hotk_add(struct acpi_device *device)
                        goto bluetooth_fail;
        }
 
-       eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6");
-       eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7");
-
        return 0;
 
  bluetooth_fail: