* is added. That is where we will initialize the hardware.
         */
 
-       wl1271_error("wl12xx is in an ustable state (fw api update is "
-                    "taking place). skip this commit when bisecting");
-       return -EBUSY;
+       return 0;
 }
 
 static void wl1271_op_stop(struct ieee80211_hw *hw)
                }
        }
 
-       if (conf->flags & IEEE80211_CONF_PS &&
-           !test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags)) {
-               set_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags);
+       if ((changed & IEEE80211_CONF_CHANGE_PS) && !is_ap) {
+
+               if ((conf->flags & IEEE80211_CONF_PS) &&
+                   test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) &&
+                   !test_bit(WLVIF_FLAG_IN_AUTO_PS, &wlvif->flags)) {
+
+                       wl1271_debug(DEBUG_PSM, "auto ps enabled");
 
-               /*
-                * We enter PSM only if we're already associated.
-                * If we're not, we'll enter it when joining an SSID,
-                * through the bss_info_changed() hook.
-                */
-               if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
-                       wl1271_debug(DEBUG_PSM, "psm enabled");
                        ret = wl1271_ps_set_mode(wl, wlvif,
                                                 STATION_AUTO_PS_MODE);
-               }
-       } else if (!(conf->flags & IEEE80211_CONF_PS) &&
-                  test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags)) {
-               wl1271_debug(DEBUG_PSM, "psm disabled");
+                       if (ret < 0)
+                               wl1271_warning("enter auto ps failed %d", ret);
 
-               clear_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags);
+               } else if (!(conf->flags & IEEE80211_CONF_PS) &&
+                          test_bit(WLVIF_FLAG_IN_AUTO_PS, &wlvif->flags)) {
+
+                       wl1271_debug(DEBUG_PSM, "auto ps disabled");
 
-               if (test_bit(WLVIF_FLAG_PSM, &wlvif->flags))
                        ret = wl1271_ps_set_mode(wl, wlvif,
                                                 STATION_ACTIVE_MODE);
+                       if (ret < 0)
+                               wl1271_warning("exit auto ps failed %d", ret);
+               }
        }
 
        if (conf->power_level != wlvif->power_level) {
                        if (ret < 0)
                                goto out;
                }
-
-               /* If we want to go in PSM but we're not there yet */
-               if (test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags) &&
-                   !test_bit(WLVIF_FLAG_PSM, &wlvif->flags)) {
-
-                       ret = wl1271_ps_set_mode(wl, wlvif,
-                                                STATION_AUTO_PS_MODE);
-                       if (ret < 0)
-                               goto out;
-               }
        }
 
        /* Handle new association with HT. Do this after join. */
 
                if (wlvif->bss_type == BSS_TYPE_AP_BSS)
                        goto out;
 
-               if (!test_bit(WLVIF_FLAG_PSM, &wlvif->flags) &&
+               if (!test_bit(WLVIF_FLAG_IN_AUTO_PS, &wlvif->flags) &&
                    test_bit(WLVIF_FLAG_IN_USE, &wlvif->flags))
                        goto out;
        }
                if (wlvif->bss_type == BSS_TYPE_AP_BSS)
                        return;
 
-               if (!test_bit(WLVIF_FLAG_PSM, &wlvif->flags) &&
+               if (!test_bit(WLVIF_FLAG_IN_AUTO_PS, &wlvif->flags) &&
                    test_bit(WLVIF_FLAG_IN_USE, &wlvif->flags))
                        return;
        }
                if (ret < 0)
                        return ret;
 
-               set_bit(WLVIF_FLAG_PSM, &wlvif->flags);
+               set_bit(WLVIF_FLAG_IN_AUTO_PS, &wlvif->flags);
 
                /* enable beacon early termination. Not relevant for 5GHz */
                if (wlvif->band == IEEE80211_BAND_2GHZ) {
                if (ret < 0)
                        return ret;
 
-               clear_bit(WLVIF_FLAG_PSM, &wlvif->flags);
+               clear_bit(WLVIF_FLAG_IN_AUTO_PS, &wlvif->flags);
                break;
        case STATION_POWER_SAVE_MODE:
        default: