0x00, 0x00 };
 
 
+static int assoc_helper_wep_keys(struct lbs_private *priv,
+               struct assoc_request *assoc_req);
+
 /**
  *  @brief This function finds common rates between rates and card rates.
  *
 
        if (status_code) {
                lbs_mac_event_disconnected(priv);
-               ret = -1;
+               ret = status_code;
                goto done;
        }
 
                goto out;
 
        ret = lbs_associate(priv, assoc_req, CMD_802_11_ASSOCIATE);
+       /* If the association fails with current auth mode, let's
+        * try by changing the auth mode
+        */
+       if ((priv->authtype_auto) &&
+                       (ret == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) &&
+                       (assoc_req->secinfo.wep_enabled) &&
+                       (priv->connect_status != LBS_CONNECTED)) {
+               if (priv->secinfo.auth_mode == IW_AUTH_ALG_OPEN_SYSTEM)
+                       priv->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
+               else
+                       priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
+               if (!assoc_helper_wep_keys(priv, assoc_req))
+                       ret = lbs_associate(priv, assoc_req,
+                                               CMD_802_11_ASSOCIATE);
+       }
 
+       if (ret)
+               ret = -1;
 out:
        lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret);
        return ret;
 
                set_bit(ASSOC_FLAG_WEP_TX_KEYIDX, &assoc_req->flags);
 
        if (dwrq->flags & IW_ENCODE_RESTRICTED) {
+               priv->authtype_auto = 0;
                assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
        } else if (dwrq->flags & IW_ENCODE_OPEN) {
+               priv->authtype_auto = 0;
                assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
        }
 
                        goto out;
 
                if (dwrq->flags & IW_ENCODE_RESTRICTED) {
+                       priv->authtype_auto = 0;
                        assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
                } else if (dwrq->flags & IW_ENCODE_OPEN) {
+                       priv->authtype_auto = 0;
                        assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
                }