]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/wireless/wl12xx/boot.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / net / wireless / wl12xx / boot.c
similarity index 96%
rename from drivers/net/wireless/wl12xx/wl1271_boot.c
rename to drivers/net/wireless/wl12xx/boot.c
index b910212420985cd3ecf28dfa18dd3584b03b1cb7..4df04f84d7f106a71fd87741d2e857f48bf01cc0 100644 (file)
  *
  */
 
-#include <linux/gpio.h>
 #include <linux/slab.h>
 
-#include "wl1271_acx.h"
-#include "wl1271_reg.h"
-#include "wl1271_boot.h"
-#include "wl1271_io.h"
-#include "wl1271_event.h"
+#include "acx.h"
+#include "reg.h"
+#include "boot.h"
+#include "io.h"
+#include "event.h"
 
 static struct wl1271_partition_set part_table[PART_TABLE_LEN] = {
        [PART_DOWN] = {
@@ -467,24 +466,24 @@ static void wl1271_boot_hw_version(struct wl1271 *wl)
        wl->hw_pg_ver = (s8)fuse;
 }
 
-int wl1271_boot(struct wl1271 *wl)
+/* uploads NVS and firmware */
+int wl1271_load_firmware(struct wl1271 *wl)
 {
        int ret = 0;
        u32 tmp, clk, pause;
-       int ref_clock = wl->ref_clock;
 
        wl1271_boot_hw_version(wl);
 
-       if (ref_clock == 0 || ref_clock == 2 || ref_clock == 4)
+       if (wl->ref_clock == 0 || wl->ref_clock == 2 || wl->ref_clock == 4)
                /* ref clk: 19.2/38.4/38.4-XTAL */
                clk = 0x3;
-       else if (ref_clock == 1 || ref_clock == 3)
+       else if (wl->ref_clock == 1 || wl->ref_clock == 3)
                /* ref clk: 26/52 */
                clk = 0x5;
        else
                return -EINVAL;
 
-       if (ref_clock != 0) {
+       if (wl->ref_clock != 0) {
                u16 val;
                /* Set clock type (open drain) */
                val = wl1271_top_reg_read(wl, OCP_REG_CLK_TYPE);
@@ -529,8 +528,7 @@ int wl1271_boot(struct wl1271 *wl)
 
        wl1271_debug(DEBUG_BOOT, "clk2 0x%x", clk);
 
-       /* 2 */
-       clk |= (ref_clock << 1) << 4;
+       clk |= (wl->ref_clock << 1) << 4;
        wl1271_write32(wl, DRPW_SCRATCH_START, clk);
 
        wl1271_set_partition(wl, &part_table[PART_WORK]);
@@ -574,6 +572,20 @@ int wl1271_boot(struct wl1271 *wl)
        if (ret < 0)
                goto out;
 
+out:
+       return ret;
+}
+EXPORT_SYMBOL_GPL(wl1271_load_firmware);
+
+int wl1271_boot(struct wl1271 *wl)
+{
+       int ret;
+
+       /* upload NVS and firmware */
+       ret = wl1271_load_firmware(wl);
+       if (ret)
+               return ret;
+
        /* 10.5 start firmware */
        ret = wl1271_boot_run_firmware(wl);
        if (ret < 0)