aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/platform/x86/classmate-laptop.c16
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