wl1251: start handling powersave report
authorGrazvydas Ignotas <notasas@gmail.com>
Wed, 22 May 2013 00:36:21 +0000 (03:36 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Thu, 23 May 2013 22:13:08 +0000 (01:13 +0300)
and move beacon filter enable there, like wl1271+ driver has it.

drivers/net/wireless/wl1251/boot.c
drivers/net/wireless/wl1251/event.c
drivers/net/wireless/wl1251/event.h
drivers/net/wireless/wl1251/ps.c

index d729daf..2ff2a00 100644 (file)
@@ -299,7 +299,8 @@ int wl1251_boot_run_firmware(struct wl1251 *wl)
                ROAMING_TRIGGER_LOW_RSSI_EVENT_ID |
                ROAMING_TRIGGER_REGAINED_RSSI_EVENT_ID |
                REGAINED_BSS_EVENT_ID | BT_PTA_SENSE_EVENT_ID |
-               BT_PTA_PREDICTION_EVENT_ID | JOIN_EVENT_COMPLETE_ID;
+               BT_PTA_PREDICTION_EVENT_ID | JOIN_EVENT_COMPLETE_ID |
+               PS_REPORT_EVENT_ID;
 
        ret = wl1251_event_unmask(wl);
        if (ret < 0) {
index 6e10ee1..94932b1 100644 (file)
@@ -110,6 +110,19 @@ static int wl1251_event_process(struct wl1251 *wl, struct event_mailbox *mbox)
                }
        }
 
+       if (vector & PS_REPORT_EVENT_ID) {
+               if (mbox->ps_status == ENTER_POWER_SAVE_SUCCESS) {
+                       /* enable beacon filtering */
+                       ret = wl1251_acx_beacon_filter_opt(wl, true);
+                       if (ret < 0)
+                               wl1251_error("beacon filter enable failed");
+
+               } else if (mbox->ps_status == ENTER_POWER_SAVE_FAIL)
+                       wl->station_mode = STATION_ACTIVE_MODE;
+               else if (mbox->ps_status == EXIT_POWER_SAVE_FAIL)
+                       wl->station_mode = STATION_POWER_SAVE_MODE;
+       }
+
        return 0;
 }
 
index 30eb5d1..b638229 100644 (file)
@@ -73,6 +73,13 @@ enum {
        EVENT_MBOX_ALL_EVENT_ID                  = 0x7fffffff,
 };
 
+enum {
+       ENTER_POWER_SAVE_FAIL    =  0,
+       ENTER_POWER_SAVE_SUCCESS =  1,
+       EXIT_POWER_SAVE_FAIL     =  2,
+       EXIT_POWER_SAVE_SUCCESS  =  3,
+};
+
 struct event_debug_report {
        u8 debug_event_id;
        u8 num_params;
index 8a1ff38..d258962 100644 (file)
@@ -112,11 +112,6 @@ 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);