wl1251: change wake_up_conditions config
[pandora-kernel.git] / drivers / net / wireless / wl1251 / ps.c
index db719f7..5c5c3ff 100644 (file)
@@ -112,21 +112,20 @@ int wl1251_ps_set_mode(struct wl1251 *wl, enum wl1251_station_mode mode)
        case STATION_POWER_SAVE_MODE:
                wl1251_debug(DEBUG_PSM, "entering psm");
 
-               /* enable beacon filtering */
-               ret = wl1251_acx_beacon_filter_opt(wl, true);
-               if (ret < 0)
-                       return ret;
-
-               ret = wl1251_acx_wake_up_conditions(wl,
-                                                   WAKE_UP_EVENT_DTIM_BITMAP,
-                                                   wl->listen_int);
-               if (ret < 0)
-                       return ret;
+               if (wl->long_doze_mode != wl->long_doze_mode_set) {
+                       wl1251_acx_wake_up_conditions(wl, wl->long_doze_mode
+                               ? WAKE_UP_EVENT_DTIM_BITMAP
+                               : WAKE_UP_EVENT_BEACON_BITMAP,
+                               wl->listen_int);
+                       wl->long_doze_mode_set = wl->long_doze_mode;
+               }
 
+#if 0 /* problems seen on one router */
                ret = wl1251_acx_bet_enable(wl, WL1251_ACX_BET_ENABLE,
                                            WL1251_DEFAULT_BET_CONSECUTIVE);
                if (ret < 0)
                        return ret;
+#endif
 
                ret = wl1251_cmd_ps_mode(wl, CHIP_POWER_SAVE_MODE);
                if (ret < 0)
@@ -143,7 +142,7 @@ int wl1251_ps_set_mode(struct wl1251 *wl, enum wl1251_station_mode mode)
                if (ret < 0)
                        return ret;
 
-               ret = wl1251_cmd_template_set(wl, CMD_DISCONNECT, NULL, 0);
+               ret = wl1251_cmd_disconnect(wl);
                if (ret < 0)
                        return ret;
                break;
@@ -155,30 +154,29 @@ int wl1251_ps_set_mode(struct wl1251 *wl, enum wl1251_station_mode mode)
                if (ret < 0)
                        return ret;
 
+#if 0
                /* disable BET */
                ret = wl1251_acx_bet_enable(wl, WL1251_ACX_BET_DISABLE,
                                            WL1251_DEFAULT_BET_CONSECUTIVE);
                if (ret < 0)
                        return ret;
+#endif
 
                /* disable beacon filtering */
                ret = wl1251_acx_beacon_filter_opt(wl, false);
                if (ret < 0)
                        return ret;
 
-               ret = wl1251_acx_wake_up_conditions(wl,
-                                                   WAKE_UP_EVENT_DTIM_BITMAP,
-                                                   wl->listen_int);
-               if (ret < 0)
-                       return ret;
-
                ret = wl1251_cmd_ps_mode(wl, CHIP_ACTIVE_MODE);
                if (ret < 0)
                        return ret;
 
                break;
        }
+       if (mode != wl->station_mode)
+               wl->ps_transitioning = true;
        wl->station_mode = mode;
+       wl->ps_change_jiffies = jiffies;
 
        return ret;
 }