I think the "patch" from the previous post actually needs you to recompile the kernel (
yeesh), and besides, it's actually making your driver not respect standards.
The other thing is much cleaner IMHO. First add the cfg80211 module parameter as per previous posts. Reboot (or reload module, if you know how). Now check whether that fixed your problem. One way to check is using iwlist (from the wireless-tools package?). Run something like iwlist wlan0 channel
. (Your device could very well be something else than wlan0. iwlist Supports autocomplete with tab.) If it doesn't list your wanted channels, tough luck, and go on.
Download this source:
(The .c and .h are the source, rest is documentation. I recommend the README.) Download Makefile if you want to use make
, or simply use gcc ath_info.c -o ath_info
to turn the source into an executable. (There actually also is an older version that gives more sane type numbers of your wireless hardware, but I recommend using the latest version for rewriting the EEPROM.)
Check here for a sane value you want to give the EEPROM. You might want to keep the page open.
Run lspci -v | less
to find the hardware/memory address of your card. (q to quit less.) Mine was 00:d0.00 with memory d5800000. (The memory is hexadecimal. To make that explicit write 0xd5800000.)
Run ./ath_info 0xMEMORYADDRESS
, e.g. ./ath_info 0xd5800000
. I recommend piping to less again (with " | less"). This should give you something like this:
MAC Revision: 2417 (0xf0)
Device type: 3
/============== EEPROM Information =============\
| EEPROM Version: 5.3 | EEPROM Size: 16 kbit |
| EEMAP: 2 | Reg. Domain: 0x809C |
|================= Capabilities ================|
| 802.11a Support: no | Turbo-A disabled: yes |
| 802.11b Support: no | Turbo-G disabled: yes |
| 802.11g Support: yes | 2GHz XR disabled: no |
| RFKill Support: no | 5GHz XR disabled: no |
| 32kHz Crystal: no | |
| Calibration data common for all modes |
[etc. etc. etc.]
GPIO registers: CR 0x00000003, DO 0x00000001, DI 0x00000014
[etc. etc. etc]
(Also posted for hints of similar hardware. AR5007 2417.)
Notice the regdomain? 0x809C is hexadecimal 0x8000 + 156. That means China. If the regulatory domain actually is set to something permissive, you could have another problem. (I read something about "world roaming".) Decide whether to reprogram the EEPROM regdomain.
The next step I might have skipped myself, but I still recommend it. Close all wireless connections and daemons. Run rfkill block wlan
. (aptitude install rfkill first if needed.)
The next step I did, but don't know (and I'm not checking now) whether this step is needed. Run:
setpci -s xx:xx.x command=0x41f cache_line_size=0x10
xx:xx.x should be replace with your wireless hardware address (remember?).
Now the fun part. Run ./ath_info -g 0:0 -v -f -g 1:0 -g 2:0 -g 3:0 -g 4:0 -w 0xMEMORYADDRESS regdomain 0x0
. You might not have to set it to 0x0 first, but I did. Then run ./ath_info -g 0:0 -v -f -g 1:0 -g 2:0 -g 3:0 -g 4:0 -w 0xMEMORYADDRESS regdomain 0xH
, where H is the hexadecimal region code you'd like to have. Run ./ath_info 0xMEMORYADDRESS
to bask in the glory of a reprogrammed EEPROM regdomain ;D. Run rfkill unblock wlan
, if necessary. Reboot. Should be working now