return ret;
 }
 
+static int wl1251_op_get_survey(struct ieee80211_hw *hw, int idx,
+                               struct survey_info *survey)
+{
+       struct wl1251 *wl = hw->priv;
+       struct ieee80211_conf *conf = &hw->conf;
+ 
+       if (idx != 0)
+               return -ENOENT;
+ 
+       survey->channel = conf->channel;
+       survey->filled = SURVEY_INFO_NOISE_DBM;
+       survey->noise = wl->noise;
+ 
+       return 0;
+}
+
 /* can't be const, mac80211 writes to this */
 static struct ieee80211_supported_band wl1251_band_2ghz = {
        .channels = wl1251_channels,
        .bss_info_changed = wl1251_op_bss_info_changed,
        .set_rts_threshold = wl1251_op_set_rts_threshold,
        .conf_tx = wl1251_op_conf_tx,
+       .get_survey = wl1251_op_get_survey,
 };
 
 static int wl1251_read_eeprom_byte(struct wl1251 *wl, off_t offset, u8 *data)
 
 
        status->signal = desc->rssi;
 
+       /*
+        * FIXME: guessing that snr needs to be divided by two, otherwise
+        * the values don't make any sense
+        */
+       wl->noise = desc->rssi - desc->snr / 2;
+
        status->freq = ieee80211_channel_to_frequency(desc->channel);
 
        status->flag |= RX_FLAG_TSFT;