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: Daniel Drake <dsd@laptop.org> Signed-off-by: Matthew Garrett <mjg@redhat.com>
This commit is contained in:
parent
14b234b105
commit
bc7ab495c7
|
@ -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 = {
|
||||||
|
|
Loading…
Reference in New Issue