martes, 19 de enero de 2010

rt3070

Some days ago I bought a SMCWUSBS-N3 EZ Connect™ N Wireless USB 2.0 Adapter. The reason is that I have installed Ubuntu to my parents and the old ZyXEL ZyAIR B-220 wasn't working with network-manager because of this bug.

I decided to buy this model in particular first because it was only 12,50€ (!!) and second because I saw in the official webpage that they were (unfortunately surprising) providing linux drivers. The chipset it uses is called RT3070USB (ralink).

At first, I imagined that they were providing that cheap link because it was already included in the official linux kernel tree and they just wanted to say "hey, we are cool people and support linux!".

But I was wrong! When I connected the device once I arrived home nothing happened. Nothing interesting in syslog. dmesg neither. So I decided to download their driver and give it a try.


They did a really quick and ugly hack of an already existing RT2870 driver. They didn't even care about renaming the files or changing the constants in the Makefile (this is bad, ralink guys.. we have a family to take care of and we cannot spend how much time we want on it...). And... it didn't work out-of-the-box(tm).

I have to admit that I lost my hope to get it working but fortunately an ubuntuforums.org user made me recover it because he succeeded.


I had a great hacking satisfaction when I got it working :) and I was going to explain my workaround but now I see that it's already very well explained in this post.

Also, the SMC site provides the link to an old release of this driver, which won't compile with 2.6.31. You'll need to get the last one from the ralink site.

Here is the changelog: 

Version [V2.1.2.0]
1. Support Linux kernel 2.6.31
2. Add iw support.

Version V2.1.1.0
1. Linux kernel 2.6.29 support.
2. Fix eFuse write from BIN file bug.

Version 2.1.0.0
1. New generation schema for multiple OS porting
2. Fixed Ad-hoc ping failed in noisy environment.
3. Modified iwpriv ra0 get_site_survey:
4. Change FastRoaming in DAT file to AutoRoaming.
5. Support kthread.
6. New IEEE802.11r functionality.

Version 2.0.1.0
1. Finished verifying RT3071 STA support.
2. Fix eFuse bug on big-endian platform
3. Fix WMM problem for RT3071/72
4. Fix bug for ATE TX power handling and ATE frequency offset bug.
5. Fix RT307x AMPDU throughput bug after interface down/up
6. Fix RT307x difficult to enter power save mode issue.
7. Fix bug that is hard to connect with hidden-SSID AP.
8. Update RT307x new firmware.



TODO: When I get some new free time, I will try to give a look at the driver and collaborate to get it merged in the kernel. Or at least provide a working out-of-the-box tarball with the driver ;-)

A similar bug report in bugzilla.kernel.org