created update.zip file with Broadcom firmware 220.127.116.11.
This update.zip will run only on "crespo", i.e. Nexus S.
Should work for non-rooted device via boot recovery, if someone could test and provide results, it would be great.
Disclaimer: use this update on your own risk.
I had connection problems with 802.11n router in WPA2-PSK configuration. According to log authentication timeout occurred on every try to connect.
Here is snippet of typical error (used 'adb shell su -c "wpa_cli log_level 0"' to enable verbose wi-fi logging):
D/wpa_supplicant(11118): RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
D/wpa_supplicant(11118): Wireless event: cmd=0x8c02 len=33
D/wpa_supplicant(11118): WEXT: Custom wireless event: 'Conn ConfigMismatch 01 00'
D/wpa_supplicant(11118): wpa_driver_wext_driver_cmd SCAN-ACTIVE len = 4096
D/wpa_supplicant(11118): wpa_driver_wext_driver_cmd SCAN-ACTIVE len = 0, 11
D/wpa_supplicant(11118): Ongoing scan action - reject new request
D/wpa_supplicant(11118): wpa_driver_wext_driver_cmd SCAN-PASSIVE len = 4096
D/wpa_supplicant(11118): wpa_driver_wext_driver_cmd SCAN-PASSIVE len = 0, 12
I/wpa_supplicant(11118): wlan0: Authentication with <AP MAC ADDRESS> timed out.
On my Nexus S it was solved by rolling back wi-fi firmware to version used in Gingerbread.
Wi-Fi firmware version that have problems (integrated into ICS) 18.104.22.168, 22.214.171.124.
fw_bcm4329.bin file can be obtained from AOSP sources:
$git clone https://android.googlesource.com/platform/hardware/broadcom/wlan
$git checkout android-2.3.7_r1
Firmware ver. 126.96.36.199 file located at ./bcm4329/firmware/fw_bcm4329.bin
It is needed to have rooted device to change firmware. Steps:
Turn OFF wi-fi on the device.
>adb push fw_bcm4329.bin /sdcard/
#mount -o,remount rw /system
#cp /sdcard/fw_bcm4329.bin /system/vendor/firmware/
#mount -o,remount ro /system
Cyanogen 9 (ICS) Alpha 18 on Nexus S