[package] mac80211: update compat-wireless to 2009-01-19
[openwrt.git] / package / mac80211 / patches / 317-rt2x00-Fix-register-initialization-rt2800usb.patch
1 From d97bb9291c59852989a86667ba317613fa2b77c5 Mon Sep 17 00:00:00 2001
2 From: Ivo van Doorn <IvDoorn@gmail.com>
3 Date: Sat, 17 Jan 2009 19:19:16 +0100
4 Subject: [PATCH] rt2x00: Fix register initialization (rt2800usb)
5
6 Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
7 ---
8  drivers/net/wireless/rt2x00/rt2800usb.c |   20 ++++++++++++++++----
9  1 files changed, 16 insertions(+), 4 deletions(-)
10
11 --- a/drivers/net/wireless/rt2x00/rt2800usb.c
12 +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
13 @@ -582,9 +582,12 @@ static void rt2800usb_config_ant(struct 
14          */
15         switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH)) {
16         case 1:
17 +               rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 0);
18                 rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 0);
19                 break;
20         case 2:
21 +               rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 16);
22 +               break;
23         case 3:
24                 /* Do nothing */
25                 break;
26 @@ -1279,7 +1282,7 @@ static int rt2800usb_init_registers(stru
27          * ASIC will keep garbage value after boot, clear encryption keys.
28          */
29         for (i = 0; i < 254; i++) {
30 -               u32 wcid[2] = { 0xffffffff, 0x0000ffff };
31 +               u32 wcid[2] = { 0xffffffff, 0x00ffffff };
32                 rt2x00usb_register_multiwrite(rt2x00dev, MAC_WCID_ENTRY(i),
33                                               wcid, sizeof(wcid));
34         }
35 @@ -1421,6 +1424,7 @@ static int rt2800usb_init_bbp(struct rt2
36         rt2800usb_bbp_write(rt2x00dev, 86, 0x00);
37         rt2800usb_bbp_write(rt2x00dev, 91, 0x04);
38         rt2800usb_bbp_write(rt2x00dev, 92, 0x00);
39 +       rt2800usb_bbp_write(rt2x00dev, 103, 0x00);
40         rt2800usb_bbp_write(rt2x00dev, 105, 0x05);
41  
42         if (rt2x00_rev(&rt2x00dev->chip) == RT2870_VERSION_C) {
43 @@ -1904,9 +1908,17 @@ static int rt2800usb_validate_eeprom(str
44         }
45  
46         rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &word);
47 -       if (word != 0) {
48 -               /* NIC configuration must always be 0. */
49 -               word = 0;
50 +       if (word == 0xffff) {
51 +               rt2x00_set_field16(&word, EEPROM_NIC_HW_RADIO, 0);
52 +               rt2x00_set_field16(&word, EEPROM_NIC_DYNAMIC_TX_AGC, 0);
53 +               rt2x00_set_field16(&word, EEPROM_NIC_EXTERNAL_LNA_BG, 0);
54 +               rt2x00_set_field16(&word, EEPROM_NIC_EXTERNAL_LNA_A, 0);
55 +               rt2x00_set_field16(&word, EEPROM_NIC_CARDBUS_ACCEL, 0);
56 +               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_SB_BG, 0);
57 +               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_SB_A, 0);
58 +               rt2x00_set_field16(&word, EEPROM_NIC_WPS_PBC, 0);
59 +               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_BG, 0);
60 +               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_A, 0);
61                 rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC, word);
62                 EEPROM(rt2x00dev, "NIC: 0x%04x\n", word);
63         }