diff options
Diffstat (limited to 'drivers/net/wireless/wl12xx/wl1271_boot.c')
| -rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_boot.c | 27 | 
1 files changed, 21 insertions, 6 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271_boot.c b/drivers/net/wireless/wl12xx/wl1271_boot.c index 2be76ee42bb..8087dc17f29 100644 --- a/drivers/net/wireless/wl12xx/wl1271_boot.c +++ b/drivers/net/wireless/wl12xx/wl1271_boot.c @@ -1,7 +1,7 @@  /*   * This file is part of wl1271   * - * Copyright (C) 2008-2009 Nokia Corporation + * Copyright (C) 2008-2010 Nokia Corporation   *   * Contact: Luciano Coelho <luciano.coelho@nokia.com>   * @@ -22,11 +22,11 @@   */  #include <linux/gpio.h> +#include <linux/slab.h>  #include "wl1271_acx.h"  #include "wl1271_reg.h"  #include "wl1271_boot.h" -#include "wl1271_spi.h"  #include "wl1271_io.h"  #include "wl1271_event.h" @@ -229,6 +229,14 @@ static int wl1271_boot_upload_nvs(struct wl1271 *wl)  	nvs_len = sizeof(wl->nvs->nvs);  	nvs_ptr = (u8 *)wl->nvs->nvs; +	/* update current MAC address to NVS */ +	nvs_ptr[11] = wl->mac_addr[0]; +	nvs_ptr[10] = wl->mac_addr[1]; +	nvs_ptr[6] = wl->mac_addr[2]; +	nvs_ptr[5] = wl->mac_addr[3]; +	nvs_ptr[4] = wl->mac_addr[4]; +	nvs_ptr[3] = wl->mac_addr[5]; +  	/*  	 * Layout before the actual NVS tables:  	 * 1 byte : burst length. @@ -299,7 +307,7 @@ static int wl1271_boot_upload_nvs(struct wl1271 *wl)  static void wl1271_boot_enable_interrupts(struct wl1271 *wl)  { -	enable_irq(wl->irq); +	wl1271_enable_interrupts(wl);  	wl1271_write32(wl, ACX_REG_INTERRUPT_MASK,  		       WL1271_ACX_INTR_ALL & ~(WL1271_INTR_MASK));  	wl1271_write32(wl, HI_CFG, HI_CFG_DEF_VAL); @@ -403,7 +411,10 @@ static int wl1271_boot_run_firmware(struct wl1271 *wl)  	/* unmask required mbox events  */  	wl->event_mask = BSS_LOSE_EVENT_ID |  		SCAN_COMPLETE_EVENT_ID | -		PS_REPORT_EVENT_ID; +		PS_REPORT_EVENT_ID | +		JOIN_EVENT_COMPLETE_ID | +		DISCONNECT_EVENT_COMPLETE_ID | +		RSSI_SNR_TRIGGER_0_EVENT_ID;  	ret = wl1271_event_unmask(wl);  	if (ret < 0) { @@ -444,11 +455,15 @@ int wl1271_boot(struct wl1271 *wl)  	if (REF_CLOCK != 0) {  		u16 val; -		/* Set clock type */ +		/* Set clock type (open drain) */  		val = wl1271_top_reg_read(wl, OCP_REG_CLK_TYPE);  		val &= FREF_CLK_TYPE_BITS; -		val |= CLK_REQ_PRCM;  		wl1271_top_reg_write(wl, OCP_REG_CLK_TYPE, val); + +		/* Set clock pull mode (no pull) */ +		val = wl1271_top_reg_read(wl, OCP_REG_CLK_PULL); +		val |= NO_PULL; +		wl1271_top_reg_write(wl, OCP_REG_CLK_PULL, val);  	} else {  		u16 val;  		/* Set clock polarity */  |