wl1251: implement disconnect command properly
[pandora-kernel.git] / drivers / net / wireless / wl1251 / cmd.c
index 67352a1..8215104 100644 (file)
@@ -326,6 +326,28 @@ out:
        return ret;
 }
 
+int wl1251_cmd_disconnect(struct wl1251 *wl)
+{
+       struct wl1251_cmd_disconnect *cmd;
+       int ret;
+
+       wl1251_debug(DEBUG_CMD, "cmd disconnect");
+
+       cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+       if (!cmd)
+               return -ENOMEM;
+
+       cmd->rx_config_options = wl->rx_config;
+       cmd->rx_filter_options = 0;
+
+       ret = wl1251_cmd_send(wl, CMD_DISCONNECT, cmd, sizeof(*cmd));
+       if (ret < 0)
+               wl1251_error("cmd disconnect failed: %d", ret);
+
+       kfree(cmd);
+       return ret;
+}
+
 int wl1251_cmd_ps_mode(struct wl1251 *wl, u8 ps_mode)
 {
        struct wl1251_cmd_ps_params *ps_params = NULL;
@@ -458,7 +480,7 @@ int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
         * Note: This bug may be caused by the fw's DTIM handling.
         */
        if (is_zero_ether_addr(wl->bssid))
-               cmd->params.scan_options |= WL1251_SCAN_OPT_PRIORITY_HIGH;
+               cmd->params.scan_options |= cpu_to_le16(WL1251_SCAN_OPT_PRIORITY_HIGH);
        cmd->params.num_channels = n_channels;
        cmd->params.num_probe_requests = n_probes;
        cmd->params.tx_rate = cpu_to_le16(1 << 1); /* 2 Mbps */