Changeset 33615


Ignore:
Timestamp:
2012-10-04T08:34:12+02:00 (5 years ago)
Author:
juhosg
Message:

mac80211/rt2x00: sync Rt3352 support

The original patch was accepted into linux-next in a slightly modified form.
In order to provide integrity to follow-up patches, replace the patch in OpenWrt
with the (semantically identical) now upstream patch.
(commit 03839951515b0ea2b21d649b1fe7b63f9817d0c8 in wireless-testing)

Signed-off-by: Daniel Golle <dgolle@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/620-rt2x00-support-rt3352.patch

    r33583 r33615  
     1From 03839951515b0ea2b21d649b1fe7b63f9817d0c8 Mon Sep 17 00:00:00 2001 
     2From: Daniel Golle <dgolle@allnet.de> 
     3Date: Sun, 9 Sep 2012 14:24:39 +0300 
     4Subject: [PATCH] rt2x00: add MediaTek/RaLink Rt3352 WiSoC 
     5 
     6Support for the RT3352 WiSoC was developed for and tested with the ALL5002 
     7devboard running OpenWrt. For now, this supports only devices with internal 
     8TXALC. Corrections were made according to the remarks of Stanislaw Gruszka and 
     9Gertjan van Wingerde, thank you guys for reviewing! 
     10 
     11Signed-off-by: Daniel Golle <dgolle@allnet.de> 
     12Signed-off-by: John W. Linville <linville@tuxdriver.com> 
     13--- 
     14 drivers/net/wireless/rt2x00/rt2800.h    |   5 + 
     15 drivers/net/wireless/rt2x00/rt2800lib.c | 211 +++++++++++++++++++++++++++++++- 
     16 drivers/net/wireless/rt2x00/rt2x00.h    |   1 + 
     17 3 files changed, 212 insertions(+), 5 deletions(-) 
     18 
     19diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h 
     20index e13916f..6d67c3e 100644 
     21--- a/drivers/net/wireless/rt2x00/rt2800.h 
     22+++ b/drivers/net/wireless/rt2x00/rt2800.h 
     23@@ -1943,6 +1943,11 @@ struct mac_iveiv_entry { 
     24 #define BBP47_TSSI_ADC6                        FIELD8(0x80) 
     25  
     26 /* 
     27+ * BBP 49 
     28+ */ 
     29+#define BBP49_UPDATE_FLAG              FIELD8(0x01) 
     30+ 
     31+/* 
     32  * BBP 109 
     33  */ 
     34 #define BBP109_TX0_POWER               FIELD8(0x0f) 
     35diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c 
     36index a04e222..9e09367 100644 
    137--- a/drivers/net/wireless/rt2x00/rt2800lib.c 
    238+++ b/drivers/net/wireless/rt2x00/rt2800lib.c 
    3 @@ -1615,6 +1615,7 @@ void rt2800_config_ant(struct rt2x00_dev 
     39@@ -1615,6 +1615,7 @@ void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant) 
    440        case 1: 
    541                if (rt2x00_rt(rt2x00dev, RT3070) || 
     
    945                        rt2x00_eeprom_read(rt2x00dev, 
    1046                                           EEPROM_NIC_CONF1, &eeprom); 
    11 @@ -2053,6 +2054,58 @@ static void rt2800_config_channel_rf3290 
     47@@ -2053,6 +2054,60 @@ static void rt2800_config_channel_rf3290(struct rt2x00_dev *rt2x00dev, 
    1248        } 
    1349 } 
     
    3975+       rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr); 
    4076+       if (rt2x00dev->freq_offset > FREQ_OFFSET_BOUND) 
    41 +               rt2x00_set_field8(&rfcsr, RFCSR17_CODE, 
    42 +                                 FREQ_OFFSET_BOUND); 
     77+               rt2x00_set_field8(&rfcsr, RFCSR17_CODE, FREQ_OFFSET_BOUND); 
    4378+       else 
    4479+               rt2x00_set_field8(&rfcsr, RFCSR17_CODE, rt2x00dev->freq_offset); 
     
    4984+       rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 1); 
    5085+       rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 1); 
    51 +       rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1); 
    52 +       rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1); 
     86+ 
     87+       if ( rt2x00dev->default_ant.tx_chain_num == 2 ) 
     88+               rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1); 
     89+       else 
     90+               rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0); 
     91+ 
     92+       if ( rt2x00dev->default_ant.rx_chain_num == 2 ) 
     93+               rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1); 
     94+       else 
     95+               rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0); 
     96+ 
    5397+       rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0); 
    5498+       rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0); 
    55 + 
    56 +       if ( rt2x00dev->default_ant.tx_chain_num == 1 ) 
    57 +               rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0); 
    58 + 
    59 +       if ( rt2x00dev->default_ant.rx_chain_num == 1 ) 
    60 +               rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0); 
    6199+ 
    62100+       rt2800_rfcsr_write(rt2x00dev, 1, rfcsr); 
     
    68106                                         struct ieee80211_conf *conf, 
    69107                                         struct rf_channel *rf, 
    70 @@ -2182,6 +2235,9 @@ static void rt2800_config_channel(struct 
     108@@ -2182,6 +2237,9 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, 
    71109        case RF3290: 
    72110                rt2800_config_channel_rf3290(rt2x00dev, conf, rf, info); 
     
    78116        case RF5370: 
    79117        case RF5372: 
    80 @@ -2194,6 +2250,7 @@ static void rt2800_config_channel(struct 
     118@@ -2194,6 +2252,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, 
    81119        } 
    82120  
     
    86124            rt2x00_rf(rt2x00dev, RF5370) || 
    87125            rt2x00_rf(rt2x00dev, RF5372) || 
    88 @@ -2212,10 +2269,20 @@ static void rt2800_config_channel(struct 
     126@@ -2212,10 +2271,17 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, 
    89127        /* 
    90128         * Change BBP settings 
     
    94132-       rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain); 
    95133-       rt2800_bbp_write(rt2x00dev, 86, 0); 
    96 +       if (rt2x00_rt(rt2x00dev, RT3352)) 
    97 +       { 
     134+       if (rt2x00_rt(rt2x00dev, RT3352)) { 
    98135+               rt2800_bbp_write(rt2x00dev, 27, 0x0); 
    99136+               rt2800_bbp_write(rt2x00dev, 62, 0x26 + rt2x00dev->lna_gain); 
    100137+               rt2800_bbp_write(rt2x00dev, 27, 0x20); 
    101138+               rt2800_bbp_write(rt2x00dev, 62, 0x26 + rt2x00dev->lna_gain); 
    102 +       } 
    103 +       else 
    104 +       { 
     139+       } else { 
    105140+               rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); 
    106141+               rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); 
     
    111146        if (rf->channel <= 14) { 
    112147                if (!rt2x00_rt(rt2x00dev, RT5390) && 
    113 @@ -2310,6 +2377,16 @@ static void rt2800_config_channel(struct 
     148@@ -2310,6 +2376,15 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, 
    114149        rt2800_register_read(rt2x00dev, CH_IDLE_STA, &reg); 
    115150        rt2800_register_read(rt2x00dev, CH_BUSY_STA, &reg); 
     
    119154+        * Clear update flag 
    120155+        */ 
    121 +       if (rt2x00_rt(rt2x00dev, RT3352)) 
    122 +       { 
     156+       if (rt2x00_rt(rt2x00dev, RT3352)) { 
    123157+               rt2800_bbp_read(rt2x00dev, 49, &bbp); 
    124158+               rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0); 
     
    128162  
    129163 static int rt2800_get_gain_calibration_delta(struct rt2x00_dev *rt2x00dev) 
    130 @@ -2961,11 +3038,15 @@ static int rt2800_init_registers(struct  
    131         if (rt2x00_rt(rt2x00dev, RT3071) || 
    132             rt2x00_rt(rt2x00dev, RT3090) || 
    133             rt2x00_rt(rt2x00dev, RT3290) || 
    134 +           rt2x00_rt(rt2x00dev, RT3352) || 
    135             rt2x00_rt(rt2x00dev, RT3390)) { 
    136   
    137                 if (rt2x00_rt(rt2x00dev, RT3290)) 
    138                         rt2800_register_write(rt2x00dev, TX_SW_CFG0, 
    139                                               0x00000404); 
    140 +               else if (rt2x00_rt(rt2x00dev, RT3352)) 
    141 +                       rt2800_register_write(rt2x00dev, TX_SW_CFG0, 
    142 +                                             0x00000402); 
    143                 else 
    144                         rt2800_register_write(rt2x00dev, TX_SW_CFG0, 
    145                                               0x00000400); 
    146 @@ -3378,6 +3459,11 @@ static int rt2800_init_bbp(struct rt2x00 
     164@@ -2998,6 +3073,10 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev) 
     165                rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400); 
     166                rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000); 
     167                rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000030); 
     168+       } else if (rt2x00_rt(rt2x00dev, RT3352)) { 
     169+               rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000402); 
     170+               rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); 
     171+               rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000); 
     172        } else if (rt2x00_rt(rt2x00dev, RT3572)) { 
     173                rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400); 
     174                rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); 
     175@@ -3378,6 +3457,11 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    147176                     rt2800_wait_bbp_ready(rt2x00dev))) 
    148177                return -EACCES; 
     
    156185            rt2x00_rt(rt2x00dev, RT5390) || 
    157186            rt2x00_rt(rt2x00dev, RT5392)) { 
    158 @@ -3388,15 +3474,20 @@ static int rt2800_init_bbp(struct rt2x00 
     187@@ -3388,15 +3472,20 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    159188  
    160189        if (rt2800_is_305x_soc(rt2x00dev) || 
     
    177206            rt2x00_rt(rt2x00dev, RT5392)) 
    178207                rt2800_bbp_write(rt2x00dev, 68, 0x0b); 
    179 @@ -3405,6 +3496,7 @@ static int rt2800_init_bbp(struct rt2x00 
     208@@ -3405,6 +3494,7 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    180209                rt2800_bbp_write(rt2x00dev, 69, 0x16); 
    181210                rt2800_bbp_write(rt2x00dev, 73, 0x12); 
     
    185214                   rt2x00_rt(rt2x00dev, RT5392)) { 
    186215                rt2800_bbp_write(rt2x00dev, 69, 0x12); 
    187 @@ -3436,6 +3528,10 @@ static int rt2800_init_bbp(struct rt2x00 
     216@@ -3436,6 +3526,10 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    188217        } else if (rt2800_is_305x_soc(rt2x00dev)) { 
    189218                rt2800_bbp_write(rt2x00dev, 78, 0x0e); 
     
    196225                rt2800_bbp_write(rt2x00dev, 81, 0x37); 
    197226        } 
    198 @@ -3465,18 +3561,21 @@ static int rt2800_init_bbp(struct rt2x00 
     227@@ -3465,18 +3559,21 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    199228                rt2800_bbp_write(rt2x00dev, 84, 0x99); 
    200229  
     
    219248            rt2x00_rt(rt2x00dev, RT5392)) 
    220249                rt2800_bbp_write(rt2x00dev, 92, 0x02); 
    221 @@ -3493,6 +3592,7 @@ static int rt2800_init_bbp(struct rt2x00 
     250@@ -3493,6 +3590,7 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    222251            rt2x00_rt_rev_gte(rt2x00dev, RT3090, REV_RT3090E) || 
    223252            rt2x00_rt_rev_gte(rt2x00dev, RT3390, REV_RT3390E) || 
     
    227256            rt2x00_rt(rt2x00dev, RT5390) || 
    228257            rt2x00_rt(rt2x00dev, RT5392) || 
    229 @@ -3502,6 +3602,7 @@ static int rt2800_init_bbp(struct rt2x00 
     258@@ -3502,6 +3600,7 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    230259                rt2800_bbp_write(rt2x00dev, 103, 0x00); 
    231260  
     
    235264            rt2x00_rt(rt2x00dev, RT5392)) 
    236265                rt2800_bbp_write(rt2x00dev, 104, 0x92); 
    237 @@ -3510,6 +3611,8 @@ static int rt2800_init_bbp(struct rt2x00 
     266@@ -3510,6 +3609,8 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    238267                rt2800_bbp_write(rt2x00dev, 105, 0x01); 
    239268        else if (rt2x00_rt(rt2x00dev, RT3290)) 
     
    244273                         rt2x00_rt(rt2x00dev, RT5392)) 
    245274                rt2800_bbp_write(rt2x00dev, 105, 0x3c); 
    246 @@ -3519,11 +3622,16 @@ static int rt2800_init_bbp(struct rt2x00 
     275@@ -3519,11 +3620,16 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    247276        if (rt2x00_rt(rt2x00dev, RT3290) || 
    248277            rt2x00_rt(rt2x00dev, RT5390)) 
     
    261290            rt2x00_rt(rt2x00dev, RT5390) || 
    262291            rt2x00_rt(rt2x00dev, RT5392)) 
    263 @@ -3534,6 +3642,9 @@ static int rt2800_init_bbp(struct rt2x00 
     292@@ -3534,6 +3640,9 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    264293                rt2800_bbp_write(rt2x00dev, 135, 0xf6); 
    265294        } 
     
    271300            rt2x00_rt(rt2x00dev, RT3090) || 
    272301            rt2x00_rt(rt2x00dev, RT3390) || 
    273 @@ -3574,6 +3685,28 @@ static int rt2800_init_bbp(struct rt2x00 
     302@@ -3574,6 +3683,28 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) 
    274303                rt2800_bbp_write(rt2x00dev, 3, value); 
    275304        } 
     
    300329                rt2x00_rt(rt2x00dev, RT5392)) { 
    301330                int ant, div_mode; 
    302 @@ -3707,6 +3840,7 @@ static int rt2800_init_rfcsr(struct rt2x 
     331@@ -3707,6 +3838,7 @@ static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) 
    303332            !rt2x00_rt(rt2x00dev, RT3071) && 
    304333            !rt2x00_rt(rt2x00dev, RT3090) && 
     
    308337            !rt2x00_rt(rt2x00dev, RT3572) && 
    309338            !rt2x00_rt(rt2x00dev, RT5390) && 
    310 @@ -3903,6 +4037,70 @@ static int rt2800_init_rfcsr(struct rt2x 
     339@@ -3903,6 +4035,70 @@ static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) 
    311340                rt2800_rfcsr_write(rt2x00dev, 30, 0x00); 
    312341                rt2800_rfcsr_write(rt2x00dev, 31, 0x00); 
     
    379408                rt2800_rfcsr_write(rt2x00dev, 1, 0x0f); 
    380409                rt2800_rfcsr_write(rt2x00dev, 2, 0x80); 
    381 @@ -4104,6 +4302,7 @@ static int rt2800_init_rfcsr(struct rt2x 
     410@@ -4104,6 +4300,7 @@ static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) 
    382411                        rt2800_init_rx_filter(rt2x00dev, true, 0x27, 0x19); 
    383412        } else if (rt2x00_rt(rt2x00dev, RT3071) || 
     
    387416                   rt2x00_rt(rt2x00dev, RT3572)) { 
    388417                drv_data->calibration_bw20 = 
    389 @@ -4566,6 +4765,7 @@ static int rt2800_init_eeprom(struct rt2 
     418@@ -4566,6 +4763,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev) 
    390419        case RT3071: 
    391420        case RT3090: 
     
    395424        case RT3572: 
    396425        case RT5390: 
    397 @@ -4588,6 +4788,7 @@ static int rt2800_init_eeprom(struct rt2 
     426@@ -4588,6 +4786,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev) 
    398427        case RF3052: 
    399428        case RF3290: 
     
    403432        case RF5370: 
    404433        case RF5372: 
    405 @@ -4612,6 +4813,7 @@ static int rt2800_init_eeprom(struct rt2 
     434@@ -4612,6 +4811,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev) 
    406435  
    407436        if (rt2x00_rt(rt2x00dev, RT3070) || 
     
    411440                value = rt2x00_get_field16(eeprom, 
    412441                                EEPROM_NIC_CONF1_ANT_DIVERSITY); 
    413 @@ -4904,6 +5106,7 @@ static int rt2800_probe_hw_mode(struct r 
     442@@ -4904,6 +5104,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) 
    414443                   rt2x00_rf(rt2x00dev, RF3022) || 
    415444                   rt2x00_rf(rt2x00dev, RF3290) || 
     
    419448                   rt2x00_rf(rt2x00dev, RF5370) || 
    420449                   rt2x00_rf(rt2x00dev, RF5372) || 
     450diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h 
     451index f991e8b..49375c8 100644 
    421452--- a/drivers/net/wireless/rt2x00/rt2x00.h 
    422453+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
    423 @@ -189,6 +189,7 @@ struct rt2x00_chip { 
     454@@ -188,6 +188,7 @@ struct rt2x00_chip { 
    424455 #define RT3071         0x3071 
    425456 #define RT3090         0x3090  /* 2.4GHz PCIe */ 
     
    429460 #define RT3572         0x3572 
    430461 #define RT3593         0x3593 
    431 --- a/drivers/net/wireless/rt2x00/rt2800.h 
    432 +++ b/drivers/net/wireless/rt2x00/rt2800.h 
    433 @@ -1943,6 +1943,11 @@ struct mac_iveiv_entry { 
    434  #define BBP47_TSSI_ADC6                        FIELD8(0x80) 
    435   
    436  /* 
    437 + * BBP 49 
    438 + */ 
    439 +#define BBP49_UPDATE_FLAG              FIELD8(0x01) 
    440 + 
    441 +/* 
    442   * BBP 109 
    443   */ 
    444  #define BBP109_TX0_POWER               FIELD8(0x0f) 
     462--  
     4631.7.12.2 
     464 
Note: See TracChangeset for help on using the changeset viewer.