diff options
Diffstat (limited to 'drivers/platform/x86/xo1-rfkill.c')
| -rw-r--r-- | drivers/platform/x86/xo1-rfkill.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/platform/x86/xo1-rfkill.c b/drivers/platform/x86/xo1-rfkill.c index 41781ed8301..b57ad864148 100644 --- a/drivers/platform/x86/xo1-rfkill.c +++ b/drivers/platform/x86/xo1-rfkill.c @@ -15,15 +15,26 @@  #include <asm/olpc.h> +static bool card_blocked; +  static int rfkill_set_block(void *data, bool blocked)  {  	unsigned char cmd; +	int r; + +	if (blocked == card_blocked) +		return 0; +  	if (blocked)  		cmd = EC_WLAN_ENTER_RESET;  	else  		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 = {  |