diff options
-rw-r--r-- | drivers/platform/x86/classmate-laptop.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c index d2b7720c0e6f..3dabd00b1d5a 100644 --- a/drivers/platform/x86/classmate-laptop.c +++ b/drivers/platform/x86/classmate-laptop.c | |||
@@ -522,18 +522,20 @@ static int cmpc_rfkill_block(void *data, bool blocked) | |||
522 | acpi_status status; | 522 | acpi_status status; |
523 | acpi_handle handle; | 523 | acpi_handle handle; |
524 | unsigned long long state; | 524 | unsigned long long state; |
525 | bool is_blocked; | ||
525 | 526 | ||
526 | handle = data; | 527 | handle = data; |
527 | status = cmpc_get_rfkill_wlan(handle, &state); | 528 | status = cmpc_get_rfkill_wlan(handle, &state); |
528 | if (ACPI_FAILURE(status)) | 529 | if (ACPI_FAILURE(status)) |
529 | return -ENODEV; | 530 | return -ENODEV; |
530 | if (blocked) | 531 | /* Check if we really need to call cmpc_set_rfkill_wlan */ |
531 | state &= ~1; | 532 | is_blocked = state & 1 ? false : true; |
532 | else | 533 | if (is_blocked != blocked) { |
533 | state |= 1; | 534 | state = blocked ? 0 : 1; |
534 | status = cmpc_set_rfkill_wlan(handle, state); | 535 | status = cmpc_set_rfkill_wlan(handle, state); |
535 | if (ACPI_FAILURE(status)) | 536 | if (ACPI_FAILURE(status)) |
536 | return -ENODEV; | 537 | return -ENODEV; |
538 | } | ||
537 | return 0; | 539 | return 0; |
538 | } | 540 | } |
539 | 541 | ||