|
@@ -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;
|
|
|
}
|
|
|
|