return err;
 }
 
-static void *brcmf_read_prof(struct brcmf_cfg80211_info *cfg, s32 item)
-{
-       switch (item) {
-       case WL_PROF_SEC:
-               return &cfg->profile->sec;
-       case WL_PROF_BSSID:
-               return &cfg->profile->bssid;
-       case WL_PROF_SSID:
-               return &cfg->profile->ssid;
-       }
-       WL_ERR("invalid item (%d)\n", item);
-       return NULL;
-}
-
 static s32
 brcmf_update_prof(struct brcmf_cfg80211_info *cfg,
                  const struct brcmf_event_msg *e, void *data, s32 item)
                                 struct cfg80211_connect_params *sme)
 {
        struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_security *sec;
        s32 val = 0;
        s32 err = 0;
                WL_ERR("set wpa_auth failed (%d)\n", err);
                return err;
        }
-       sec = brcmf_read_prof(cfg, WL_PROF_SEC);
+       sec = &profile->sec;
        sec->wpa_versions = sme->crypto.wpa_versions;
        return err;
 }
                               struct cfg80211_connect_params *sme)
 {
        struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_security *sec;
        s32 val = 0;
        s32 err = 0;
                WL_ERR("set auth failed (%d)\n", err);
                return err;
        }
-       sec = brcmf_read_prof(cfg, WL_PROF_SEC);
+       sec = &profile->sec;
        sec->auth_type = sme->auth_type;
        return err;
 }
                     struct cfg80211_connect_params *sme)
 {
        struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_security *sec;
        s32 pval = 0;
        s32 gval = 0;
                return err;
        }
 
-       sec = brcmf_read_prof(cfg, WL_PROF_SEC);
+       sec = &profile->sec;
        sec->cipher_pairwise = sme->crypto.ciphers_pairwise[0];
        sec->cipher_group = sme->crypto.cipher_group;
 
 brcmf_set_key_mgmt(struct net_device *ndev, struct cfg80211_connect_params *sme)
 {
        struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_security *sec;
        s32 val = 0;
        s32 err = 0;
                        return err;
                }
        }
-       sec = brcmf_read_prof(cfg, WL_PROF_SEC);
+       sec = &profile->sec;
        sec->wpa_auth = sme->crypto.akm_suites[0];
 
        return err;
                    struct cfg80211_connect_params *sme)
 {
        struct brcmf_cfg80211_info *cfg = ndev_to_cfg(ndev);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_security *sec;
        struct brcmf_wsec_key key;
        s32 val;
        if (sme->key_len == 0)
                return 0;
 
-       sec = brcmf_read_prof(cfg, WL_PROF_SEC);
+       sec = &profile->sec;
        WL_CONN("wpa_versions 0x%x cipher_pairwise 0x%x\n",
                sec->wpa_versions, sec->cipher_pairwise);
 
                       u16 reason_code)
 {
        struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_scb_val_le scbval;
        s32 err = 0;
 
 
        clear_bit(WL_STATUS_CONNECTED, &cfg->status);
 
-       memcpy(&scbval.ea, brcmf_read_prof(cfg, WL_PROF_BSSID), ETH_ALEN);
+       memcpy(&scbval.ea, &profile->bssid, ETH_ALEN);
        scbval.val = cpu_to_le32(reason_code);
        err = brcmf_exec_dcmd(ndev, BRCMF_C_DISASSOC, &scbval,
                              sizeof(struct brcmf_scb_val_le));
 {
        struct key_params params;
        struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_security *sec;
        s32 wsec;
        s32 err = 0;
        }
        switch (wsec & ~SES_OW_ENABLED) {
        case WEP_ENABLED:
-               sec = brcmf_read_prof(cfg, WL_PROF_SEC);
+               sec = &profile->sec;
                if (sec->cipher_pairwise & WLAN_CIPHER_SUITE_WEP40) {
                        params.cipher = WLAN_CIPHER_SUITE_WEP40;
                        WL_CONN("WLAN_CIPHER_SUITE_WEP40\n");
                           u8 *mac, struct station_info *sinfo)
 {
        struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_scb_val_le scb_val;
        int rssi;
        s32 rate;
        s32 err = 0;
-       u8 *bssid = brcmf_read_prof(cfg, WL_PROF_BSSID);
+       u8 *bssid = profile->bssid;
        struct brcmf_sta_info_le *sta_info_le;
 
        WL_TRACE("Enter, MAC %pM\n", mac);
 
 static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg)
 {
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_bss_info_le *bi;
        struct brcmf_ssid *ssid;
        struct brcmf_tlv *tim;
        if (brcmf_is_ibssmode(cfg))
                return err;
 
-       ssid = (struct brcmf_ssid *)brcmf_read_prof(cfg, WL_PROF_SSID);
+       ssid = &profile->ssid;
 
        *(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX);
        err = brcmf_exec_dcmd(cfg_to_ndev(cfg), BRCMF_C_GET_BSS_INFO,
                       struct net_device *ndev,
                       const struct brcmf_event_msg *e)
 {
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_connect_info *conn_info = cfg_to_conn(cfg);
        struct wiphy *wiphy = cfg_to_wiphy(cfg);
        struct brcmf_channel_info_le channel_le;
        freq = ieee80211_channel_to_frequency(target_channel, band->band);
        notify_channel = ieee80211_get_channel(wiphy, freq);
 
-       cfg80211_roamed(ndev, notify_channel,
-                       (u8 *)brcmf_read_prof(cfg, WL_PROF_BSSID),
+       cfg80211_roamed(ndev, notify_channel, (u8 *)profile->bssid,
                        conn_info->req_ie, conn_info->req_ie_len,
                        conn_info->resp_ie, conn_info->resp_ie_len, GFP_KERNEL);
        WL_CONN("Report roaming result\n");
                       struct net_device *ndev, const struct brcmf_event_msg *e,
                       bool completed)
 {
+       struct brcmf_cfg80211_profile *profile = cfg->profile;
        struct brcmf_cfg80211_connect_info *conn_info = cfg_to_conn(cfg);
        s32 err = 0;
 
                        brcmf_update_bss_info(cfg);
                }
                cfg80211_connect_result(ndev,
-                                       (u8 *)brcmf_read_prof(cfg,
-                                                             WL_PROF_BSSID),
+                                       (u8 *)profile->bssid,
                                        conn_info->req_ie,
                                        conn_info->req_ie_len,
                                        conn_info->resp_ie,