wl12xx_debug(DEBUG_MAILBOX, "cmd_box_addr 0x%x event_box_addr 0x%x",
                     wl->cmd_box_addr, wl->event_box_addr);
 
+       wl->chip.op_fw_version(wl);
+
        /*
         * in case of full asynchronous mode the firmware event must be
         * ready to receive event from the command mailbox
 
        if (ret < 0)
                goto out;
 
-       /* Get and save the firmware version */
-       wl12xx_acx_fw_version(wl, wl->chip.fw_ver, sizeof(wl->chip.fw_ver));
-
 out:
        return ret;
 }
        wl12xx_boot_target_enable_interrupts(wl);
 }
 
+static void wl1251_fw_version(struct wl12xx *wl)
+{
+       wl12xx_acx_fw_version(wl, wl->chip.fw_ver, sizeof(wl->chip.fw_ver));
+}
+
 static void wl1251_irq_work(struct work_struct *work)
 {
        u32 intr;
        wl->chip.op_target_enable_interrupts = wl1251_target_enable_interrupts;
        wl->chip.op_hw_init = wl1251_hw_init;
        wl->chip.op_plt_init = wl1251_plt_init;
+       wl->chip.op_fw_version = wl1251_fw_version;
 
        wl->chip.p_table = wl1251_part_table;
        wl->chip.acx_reg_table = wl1251_acx_reg_table;
 
        void (*op_target_enable_interrupts)(struct wl12xx *wl);
        int (*op_hw_init)(struct wl12xx *wl);
        int (*op_plt_init)(struct wl12xx *wl);
+       void (*op_fw_version)(struct wl12xx *wl);
 
        struct wl12xx_partition_set *p_table;
        enum wl12xx_acx_int_reg *acx_reg_table;