Commit bc7ab495 authored by Daniel Drake's avatar Daniel Drake Committed by Matthew Garrett

xo1-rfkill: only act when blocked state is changed

The XO-1 rfkill driver should only send EC commands when changing
between blocked/unblocked state.

The rfkill switch is asked to be unblocked on every resume (even when
the card was never blocked before) and sending a EC_WLAN_LEAVE_RESET
command here upsets the resume sequence of the libertas driver. Adding
the check to avoid the spurious EC_WLAN_LEAVE_RESET fixes the wifi resume
behaviour.

The rfkill state is maintained by the hardware over suspend/resume
so no extra consideration is needed here.
Signed-off-by: default avatarDaniel Drake <dsd@laptop.org>
Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
parent 14b234b1
...@@ -15,15 +15,26 @@ ...@@ -15,15 +15,26 @@
#include <asm/olpc.h> #include <asm/olpc.h>
static bool card_blocked;
static int rfkill_set_block(void *data, bool blocked) static int rfkill_set_block(void *data, bool blocked)
{ {
unsigned char cmd; unsigned char cmd;
int r;
if (blocked == card_blocked)
return 0;
if (blocked) if (blocked)
cmd = EC_WLAN_ENTER_RESET; cmd = EC_WLAN_ENTER_RESET;
else else
cmd = EC_WLAN_LEAVE_RESET; cmd = EC_WLAN_LEAVE_RESET;
return olpc_ec_cmd(cmd, NULL, 0, NULL, 0); r = olpc_ec_cmd(cmd, NULL, 0, NULL, 0);
if (r == 0)
card_blocked = blocked;
return r;
} }
static const struct rfkill_ops rfkill_ops = { static const struct rfkill_ops rfkill_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment