]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/platform/x86/classmate-laptop.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / platform / x86 / classmate-laptop.c
index 341cbfef93eee6d4e973be27ca989c279f8d9b4a..911135425224b4e8aab137d9b696500c794aaa71 100644 (file)
@@ -522,18 +522,20 @@ static int cmpc_rfkill_block(void *data, bool blocked)
        acpi_status status;
        acpi_handle handle;
        unsigned long long state;
+       bool is_blocked;
 
        handle = data;
        status = cmpc_get_rfkill_wlan(handle, &state);
        if (ACPI_FAILURE(status))
                return -ENODEV;
-       if (blocked)
-               state &= ~1;
-       else
-               state |= 1;
-       status = cmpc_set_rfkill_wlan(handle, state);
-       if (ACPI_FAILURE(status))
-               return -ENODEV;
+       /* Check if we really need to call cmpc_set_rfkill_wlan */
+       is_blocked = state & 1 ? false : true;
+       if (is_blocked != blocked) {
+               state = blocked ? 0 : 1;
+               status = cmpc_set_rfkill_wlan(handle, state);
+               if (ACPI_FAILURE(status))
+                       return -ENODEV;
+       }
        return 0;
 }
 
@@ -653,8 +655,9 @@ static void cmpc_keys_handler(struct acpi_device *dev, u32 event)
 
        if ((event & 0x0F) < ARRAY_SIZE(cmpc_keys_codes))
                code = cmpc_keys_codes[event & 0x0F];
-       inputdev = dev_get_drvdata(&dev->dev);;
+       inputdev = dev_get_drvdata(&dev->dev);
        input_report_key(inputdev, code, !(event & 0x10));
+       input_sync(inputdev);
 }
 
 static void cmpc_keys_idev_init(struct input_dev *inputdev)