Patches for the Ralink RT3090 linux driver

Posted by admin on wo 28 september 2011

The ralink drivers from their website don't compile against current Ubuntu kernels. I've prepared some patches for a friend (I don't actually have this hardware myself, so I haven't really tested this!). You can find them below; they can be re-distributed freely.

Please be aware that I know nothing about wireless hardware, so anything may go wrong when you use this code. I cannot give any guarantees.

Here's a patch if you want to compile their driver against the Natty kernel 2.6.38:

=== modified file 'os/linux/cfg80211.c'
--- os/linux/cfg80211.c    2011-09-23 23:00:46 +0000
+++ os/linux/cfg80211.c    2011-09-23 23:01:08 +0000
@@ -675,7 +675,7 @@
 */
 static int CFG80211_TxPwrSet(
     IN struct wiphy                        *pWiphy,
-    IN enum tx_power_setting            Type,
+    IN enum nl80211_tx_power_setting            Type,
     IN int                                dBm)
 {
     return -EOPNOTSUPP;

Here's an addititional patch if you want to compile it against the Oneiric kernel 3.0.0 (note that you need BOTH of the patches for oneiric):

=== modified file 'os/linux/cfg80211.c'
--- os/linux/cfg80211.c    2011-09-23 23:01:08 +0000
+++ os/linux/cfg80211.c    2011-09-23 23:10:47 +0000
@@ -2059,7 +2059,7 @@
         pChan->band = IEEE80211_BAND_2GHZ;
     /* End of if */

-    pChan->center_freq = ieee80211_channel_to_frequency(ChanId);
+    pChan->center_freq = ieee80211_channel_to_frequency(ChanId, pChan->band);

 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32))
     if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
@@ -2620,7 +2620,8 @@
     for(IdLoop=0; IdLoop<NumOfChan; IdLoop++)
     {
         pChannels[IdLoop].center_freq =   
-                    ieee80211_channel_to_frequency(Cfg80211_Chan[IdLoop]);
+                    ieee80211_channel_to_frequency(Cfg80211_Chan[IdLoop],
+                               (IdLoop<CFG80211_NUM_OF_CHAN_2GHZ)?IEEE80211_BAND_2GHZ:IEEE80211_BAND_5GHZ);
         pChannels[IdLoop].hw_value = IdLoop;

         if (IdLoop < CFG80211_NUM_OF_CHAN_2GHZ)