|
@@ -343,11 +343,6 @@ static int wl1271_sta_hw_init(struct wl1271 *wl, struct wl12xx_vif *wlvif)
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
- /* Configure for ELP power saving */
|
|
|
- ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_ELP);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
ret = wl1271_acx_sta_rate_policies(wl, wlvif);
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
@@ -382,11 +377,6 @@ static int wl1271_ap_hw_init(struct wl1271 *wl, struct wl12xx_vif *wlvif)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- /* Configure for power always on */
|
|
|
- ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
ret = wl1271_init_ap_rates(wl, wlvif);
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
@@ -577,9 +567,26 @@ int wl1271_init_vif_specific(struct wl1271 *wl, struct ieee80211_vif *vif)
|
|
|
struct conf_tx_ac_category *conf_ac;
|
|
|
struct conf_tx_tid *conf_tid;
|
|
|
bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
|
|
|
-
|
|
|
int ret, i;
|
|
|
|
|
|
+ /*
|
|
|
+ * consider all existing roles before configuring psm.
|
|
|
+ * TODO: reconfigure on interface removal.
|
|
|
+ */
|
|
|
+ if (!wl->ap_count) {
|
|
|
+ if (is_ap) {
|
|
|
+ /* Configure for power always on */
|
|
|
+ ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ } else if (!wl->sta_count) {
|
|
|
+ /* Configure for ELP power saving */
|
|
|
+ ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_ELP);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/* Mode specific init */
|
|
|
if (is_ap) {
|
|
|
ret = wl1271_ap_hw_init(wl, wlvif);
|