mirror of https://github.com/hak5/openwrt-owl.git
rt2x00: merge beacon setup fixes, disable unused hw beacon slots
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 41016owl
parent
2454ee8645
commit
236e7ee239
|
@ -1,3 +1,66 @@
|
||||||
|
commit f3831a4e3903dbc1a57d5df56deb6a143fd001bc
|
||||||
|
Author: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
Date: Thu Jun 5 13:52:27 2014 +0200
|
||||||
|
|
||||||
|
rt2x00: do not initialize BCN_OFFSET registers
|
||||||
|
|
||||||
|
We setup BCN_OFFSET{0,1} registers dynamically, don't have to
|
||||||
|
initialize them.
|
||||||
|
|
||||||
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
|
||||||
|
commit e5c58ca7a48d4c82f282749a978052c47fd95998
|
||||||
|
Author: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
Date: Thu Jun 5 13:52:26 2014 +0200
|
||||||
|
|
||||||
|
rt2x00: change order when stop beaconing
|
||||||
|
|
||||||
|
When no beaconing is needed, first stop beacon queue (disable beaconing
|
||||||
|
globally) to avoid possible sending of not prepared beacon on short
|
||||||
|
period after clearing beacon and before stop of BCN queue.
|
||||||
|
|
||||||
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
|
||||||
|
commit 382c1b9e03f52d0cd741ef1d942cad0f649f0744
|
||||||
|
Author: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
Date: Thu Jun 5 13:52:25 2014 +0200
|
||||||
|
|
||||||
|
rt2x00: change default MAC_BSSID_DW1_BSS_BCN_NUM
|
||||||
|
|
||||||
|
We setup MAC_BSSID_DW1_BSS_BCN_NUM dynamically when numbers of active
|
||||||
|
beacons increase. Change default to 0 to tell hardware that we want to
|
||||||
|
send only one beacon as default.
|
||||||
|
|
||||||
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
|
||||||
|
commit 3b400571dd033e46fa7e76c5bb92a3ce8198afa9
|
||||||
|
Author: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
Date: Thu Jun 5 13:52:24 2014 +0200
|
||||||
|
|
||||||
|
rt2x00: change beaconing setup on RT2800
|
||||||
|
|
||||||
|
As reported by Matthias, on 5572 chip, even if we clear up TXWI
|
||||||
|
of corresponding beacon, hardware still try to send it or do other
|
||||||
|
action that increase power consumption peak up to 1A.
|
||||||
|
|
||||||
|
To avoid the issue, setup beaconing dynamically by configuring offsets
|
||||||
|
of currently active beacons and MAC_BSSID_DW1_BSS_BCN_NUM variable,
|
||||||
|
which limit number of beacons that hardware will try to send.
|
||||||
|
|
||||||
|
Reported-by: Matthias Fend <Matthias.Fend@wolfvision.net>
|
||||||
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
|
||||||
|
commit 916e591b2cc41f7e572992175ca56d866d7bc958
|
||||||
|
Author: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
Date: Thu Jun 5 13:52:23 2014 +0200
|
||||||
|
|
||||||
|
rt2x00: change beaconing locking
|
||||||
|
|
||||||
|
This patch is needed for further changes to keep global variables
|
||||||
|
consistent when changing beaconing on diffrent vif's.
|
||||||
|
|
||||||
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||||
|
|
||||||
commit 930b0dffd1731f3f418f9132faea720a23b7af61
|
commit 930b0dffd1731f3f418f9132faea720a23b7af61
|
||||||
Author: Johannes Berg <johannes.berg@intel.com>
|
Author: Johannes Berg <johannes.berg@intel.com>
|
||||||
Date: Tue Jun 3 11:18:47 2014 +0200
|
Date: Tue Jun 3 11:18:47 2014 +0200
|
||||||
|
@ -384,3 +447,240 @@ Date: Mon May 19 21:20:49 2014 +0200
|
||||||
spin_unlock(&sta->ps_lock);
|
spin_unlock(&sta->ps_lock);
|
||||||
return TX_CONTINUE;
|
return TX_CONTINUE;
|
||||||
}
|
}
|
||||||
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
|
@@ -947,6 +947,40 @@ static inline u8 rt2800_get_beacon_offse
|
||||||
|
return BEACON_BASE_TO_OFFSET(rt2800_hw_beacon_base(rt2x00dev, index));
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void rt2800_update_beacons_setup(struct rt2x00_dev *rt2x00dev)
|
||||||
|
+{
|
||||||
|
+ struct data_queue *queue = rt2x00dev->bcn;
|
||||||
|
+ struct queue_entry *entry;
|
||||||
|
+ int i, bcn_num = 0;
|
||||||
|
+ u64 off, reg = 0;
|
||||||
|
+ u32 bssid_dw1;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Setup offsets of all active beacons in BCN_OFFSET{0,1} registers.
|
||||||
|
+ */
|
||||||
|
+ for (i = 0; i < queue->limit; i++) {
|
||||||
|
+ entry = &queue->entries[i];
|
||||||
|
+ if (!test_bit(ENTRY_BCN_ENABLED, &entry->flags))
|
||||||
|
+ continue;
|
||||||
|
+ off = rt2800_get_beacon_offset(rt2x00dev, entry->entry_idx);
|
||||||
|
+ reg |= off << (8 * bcn_num);
|
||||||
|
+ bcn_num++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ WARN_ON_ONCE(bcn_num != rt2x00dev->intf_beaconing);
|
||||||
|
+
|
||||||
|
+ rt2800_register_write(rt2x00dev, BCN_OFFSET0, (u32) reg);
|
||||||
|
+ rt2800_register_write(rt2x00dev, BCN_OFFSET1, (u32) (reg >> 32));
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * H/W sends up to MAC_BSSID_DW1_BSS_BCN_NUM + 1 consecutive beacons.
|
||||||
|
+ */
|
||||||
|
+ rt2800_register_read(rt2x00dev, MAC_BSSID_DW1, &bssid_dw1);
|
||||||
|
+ rt2x00_set_field32(&bssid_dw1, MAC_BSSID_DW1_BSS_BCN_NUM,
|
||||||
|
+ bcn_num > 0 ? bcn_num - 1 : 0);
|
||||||
|
+ rt2800_register_write(rt2x00dev, MAC_BSSID_DW1, bssid_dw1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
|
||||||
|
{
|
||||||
|
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
|
||||||
|
@@ -1003,6 +1037,12 @@ void rt2800_write_beacon(struct queue_en
|
||||||
|
|
||||||
|
rt2800_register_multiwrite(rt2x00dev, beacon_base, entry->skb->data,
|
||||||
|
entry->skb->len + padding_len);
|
||||||
|
+ __set_bit(ENTRY_BCN_ENABLED, &entry->flags);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Change global beacons settings.
|
||||||
|
+ */
|
||||||
|
+ rt2800_update_beacons_setup(rt2x00dev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Restore beaconing state.
|
||||||
|
@@ -1053,8 +1093,13 @@ void rt2800_clear_beacon(struct queue_en
|
||||||
|
* Clear beacon.
|
||||||
|
*/
|
||||||
|
rt2800_clear_beacon_register(rt2x00dev, entry->entry_idx);
|
||||||
|
+ __clear_bit(ENTRY_BCN_ENABLED, &entry->flags);
|
||||||
|
|
||||||
|
/*
|
||||||
|
+ * Change global beacons settings.
|
||||||
|
+ */
|
||||||
|
+ rt2800_update_beacons_setup(rt2x00dev);
|
||||||
|
+ /*
|
||||||
|
* Restore beaconing state.
|
||||||
|
*/
|
||||||
|
rt2800_register_write(rt2x00dev, BCN_TIME_CFG, orig_reg);
|
||||||
|
@@ -1556,7 +1601,7 @@ void rt2800_config_intf(struct rt2x00_de
|
||||||
|
if (!is_zero_ether_addr((const u8 *)conf->bssid)) {
|
||||||
|
reg = le32_to_cpu(conf->bssid[1]);
|
||||||
|
rt2x00_set_field32(®, MAC_BSSID_DW1_BSS_ID_MASK, 3);
|
||||||
|
- rt2x00_set_field32(®, MAC_BSSID_DW1_BSS_BCN_NUM, 7);
|
||||||
|
+ rt2x00_set_field32(®, MAC_BSSID_DW1_BSS_BCN_NUM, 0);
|
||||||
|
conf->bssid[1] = cpu_to_le32(reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -4517,28 +4562,6 @@ static int rt2800_init_registers(struct
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- rt2800_register_read(rt2x00dev, BCN_OFFSET0, ®);
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET0_BCN0,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 0));
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET0_BCN1,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 1));
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET0_BCN2,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 2));
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET0_BCN3,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 3));
|
||||||
|
- rt2800_register_write(rt2x00dev, BCN_OFFSET0, reg);
|
||||||
|
-
|
||||||
|
- rt2800_register_read(rt2x00dev, BCN_OFFSET1, ®);
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET1_BCN4,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 4));
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET1_BCN5,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 5));
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET1_BCN6,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 6));
|
||||||
|
- rt2x00_set_field32(®, BCN_OFFSET1_BCN7,
|
||||||
|
- rt2800_get_beacon_offset(rt2x00dev, 7));
|
||||||
|
- rt2800_register_write(rt2x00dev, BCN_OFFSET1, reg);
|
||||||
|
-
|
||||||
|
rt2800_register_write(rt2x00dev, LEGACY_BASIC_RATE, 0x0000013f);
|
||||||
|
rt2800_register_write(rt2x00dev, HT_BASIC_RATE, 0x00008003);
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
|
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
|
@@ -141,8 +141,11 @@ static void rt2x00lib_intf_scheduled_ite
|
||||||
|
if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags))
|
||||||
|
+ if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags)) {
|
||||||
|
+ mutex_lock(&intf->beacon_skb_mutex);
|
||||||
|
rt2x00queue_update_beacon(rt2x00dev, vif);
|
||||||
|
+ mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rt2x00lib_intf_scheduled(struct work_struct *work)
|
||||||
|
@@ -216,7 +219,7 @@ static void rt2x00lib_beaconupdate_iter(
|
||||||
|
* never be called for USB devices.
|
||||||
|
*/
|
||||||
|
WARN_ON(rt2x00_is_usb(rt2x00dev));
|
||||||
|
- rt2x00queue_update_beacon_locked(rt2x00dev, vif);
|
||||||
|
+ rt2x00queue_update_beacon(rt2x00dev, vif);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
|
||||||
|
--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
|
||||||
|
+++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
|
||||||
|
@@ -624,25 +624,24 @@ void rt2x00mac_bss_info_changed(struct i
|
||||||
|
* Start/stop beaconing.
|
||||||
|
*/
|
||||||
|
if (changes & BSS_CHANGED_BEACON_ENABLED) {
|
||||||
|
+ mutex_lock(&intf->beacon_skb_mutex);
|
||||||
|
if (!bss_conf->enable_beacon && intf->enable_beacon) {
|
||||||
|
rt2x00dev->intf_beaconing--;
|
||||||
|
intf->enable_beacon = false;
|
||||||
|
- /*
|
||||||
|
- * Clear beacon in the H/W for this vif. This is needed
|
||||||
|
- * to disable beaconing on this particular interface
|
||||||
|
- * and keep it running on other interfaces.
|
||||||
|
- */
|
||||||
|
- rt2x00queue_clear_beacon(rt2x00dev, vif);
|
||||||
|
|
||||||
|
if (rt2x00dev->intf_beaconing == 0) {
|
||||||
|
/*
|
||||||
|
* Last beaconing interface disabled
|
||||||
|
* -> stop beacon queue.
|
||||||
|
*/
|
||||||
|
- mutex_lock(&intf->beacon_skb_mutex);
|
||||||
|
rt2x00queue_stop_queue(rt2x00dev->bcn);
|
||||||
|
- mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
|
}
|
||||||
|
+ /*
|
||||||
|
+ * Clear beacon in the H/W for this vif. This is needed
|
||||||
|
+ * to disable beaconing on this particular interface
|
||||||
|
+ * and keep it running on other interfaces.
|
||||||
|
+ */
|
||||||
|
+ rt2x00queue_clear_beacon(rt2x00dev, vif);
|
||||||
|
} else if (bss_conf->enable_beacon && !intf->enable_beacon) {
|
||||||
|
rt2x00dev->intf_beaconing++;
|
||||||
|
intf->enable_beacon = true;
|
||||||
|
@@ -658,11 +657,10 @@ void rt2x00mac_bss_info_changed(struct i
|
||||||
|
* First beaconing interface enabled
|
||||||
|
* -> start beacon queue.
|
||||||
|
*/
|
||||||
|
- mutex_lock(&intf->beacon_skb_mutex);
|
||||||
|
rt2x00queue_start_queue(rt2x00dev->bcn);
|
||||||
|
- mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
|
||||||
|
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
|
||||||
|
@@ -754,8 +754,6 @@ int rt2x00queue_clear_beacon(struct rt2x
|
||||||
|
if (unlikely(!intf->beacon))
|
||||||
|
return -ENOBUFS;
|
||||||
|
|
||||||
|
- mutex_lock(&intf->beacon_skb_mutex);
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Clean up the beacon skb.
|
||||||
|
*/
|
||||||
|
@@ -768,13 +766,11 @@ int rt2x00queue_clear_beacon(struct rt2x
|
||||||
|
if (rt2x00dev->ops->lib->clear_beacon)
|
||||||
|
rt2x00dev->ops->lib->clear_beacon(intf->beacon);
|
||||||
|
|
||||||
|
- mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
|
-
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-int rt2x00queue_update_beacon_locked(struct rt2x00_dev *rt2x00dev,
|
||||||
|
- struct ieee80211_vif *vif)
|
||||||
|
+int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,
|
||||||
|
+ struct ieee80211_vif *vif)
|
||||||
|
{
|
||||||
|
struct rt2x00_intf *intf = vif_to_intf(vif);
|
||||||
|
struct skb_frame_desc *skbdesc;
|
||||||
|
@@ -815,19 +811,6 @@ int rt2x00queue_update_beacon_locked(str
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,
|
||||||
|
- struct ieee80211_vif *vif)
|
||||||
|
-{
|
||||||
|
- struct rt2x00_intf *intf = vif_to_intf(vif);
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- mutex_lock(&intf->beacon_skb_mutex);
|
||||||
|
- ret = rt2x00queue_update_beacon_locked(rt2x00dev, vif);
|
||||||
|
- mutex_unlock(&intf->beacon_skb_mutex);
|
||||||
|
-
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
bool rt2x00queue_for_each_entry(struct data_queue *queue,
|
||||||
|
enum queue_index start,
|
||||||
|
enum queue_index end,
|
||||||
|
--- a/drivers/net/wireless/rt2x00/rt2x00queue.h
|
||||||
|
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.h
|
||||||
|
@@ -353,6 +353,7 @@ struct txentry_desc {
|
||||||
|
*/
|
||||||
|
enum queue_entry_flags {
|
||||||
|
ENTRY_BCN_ASSIGNED,
|
||||||
|
+ ENTRY_BCN_ENABLED,
|
||||||
|
ENTRY_OWNER_DEVICE_DATA,
|
||||||
|
ENTRY_DATA_PENDING,
|
||||||
|
ENTRY_DATA_IO_FAILED,
|
||||||
|
|
|
@ -24,7 +24,7 @@ Changes since v1:
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7711,6 +7711,7 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -7734,6 +7734,7 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
|
|
||||||
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@ Changes since v1:
|
||||||
int retval;
|
int retval;
|
||||||
u32 reg;
|
u32 reg;
|
||||||
|
|
||||||
@@ -7718,6 +7719,9 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -7741,6 +7742,9 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ Changes since v1: ---
|
||||||
rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0);
|
rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0);
|
||||||
}
|
}
|
||||||
msleep(1);
|
msleep(1);
|
||||||
@@ -1001,8 +1011,10 @@ void rt2800_write_beacon(struct queue_en
|
@@ -1035,8 +1045,10 @@ void rt2800_write_beacon(struct queue_en
|
||||||
|
|
||||||
beacon_base = rt2800_hw_beacon_base(rt2x00dev, entry->entry_idx);
|
beacon_base = rt2800_hw_beacon_base(rt2x00dev, entry->entry_idx);
|
||||||
|
|
||||||
|
@ -77,10 +77,10 @@ Changes since v1: ---
|
||||||
rt2800_register_multiwrite(rt2x00dev, beacon_base, entry->skb->data,
|
rt2800_register_multiwrite(rt2x00dev, beacon_base, entry->skb->data,
|
||||||
entry->skb->len + padding_len);
|
entry->skb->len + padding_len);
|
||||||
+ rt2800_shared_mem_unlock(rt2x00dev);
|
+ rt2800_shared_mem_unlock(rt2x00dev);
|
||||||
|
__set_bit(ENTRY_BCN_ENABLED, &entry->flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restore beaconing state.
|
@@ -1066,6 +1078,8 @@ static inline void rt2800_clear_beacon_r
|
||||||
@@ -1026,6 +1038,8 @@ static inline void rt2800_clear_beacon_r
|
|
||||||
|
|
||||||
beacon_base = rt2800_hw_beacon_base(rt2x00dev, index);
|
beacon_base = rt2800_hw_beacon_base(rt2x00dev, index);
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ Changes since v1: ---
|
||||||
/*
|
/*
|
||||||
* For the Beacon base registers we only need to clear
|
* For the Beacon base registers we only need to clear
|
||||||
* the whole TXWI which (when set to 0) will invalidate
|
* the whole TXWI which (when set to 0) will invalidate
|
||||||
@@ -1033,6 +1047,8 @@ static inline void rt2800_clear_beacon_r
|
@@ -1073,6 +1087,8 @@ static inline void rt2800_clear_beacon_r
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < txwi_desc_size; i += sizeof(__le32))
|
for (i = 0; i < txwi_desc_size; i += sizeof(__le32))
|
||||||
rt2800_register_write(rt2x00dev, beacon_base + i, 0);
|
rt2800_register_write(rt2x00dev, beacon_base + i, 0);
|
||||||
|
@ -98,7 +98,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
void rt2800_clear_beacon(struct queue_entry *entry)
|
void rt2800_clear_beacon(struct queue_entry *entry)
|
||||||
@@ -1216,7 +1232,9 @@ static void rt2800_delete_wcid_attr(stru
|
@@ -1261,7 +1277,9 @@ static void rt2800_delete_wcid_attr(stru
|
||||||
{
|
{
|
||||||
u32 offset;
|
u32 offset;
|
||||||
offset = MAC_WCID_ATTR_ENTRY(wcid);
|
offset = MAC_WCID_ATTR_ENTRY(wcid);
|
||||||
|
@ -108,7 +108,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rt2800_config_wcid_attr_bssidx(struct rt2x00_dev *rt2x00dev,
|
static void rt2800_config_wcid_attr_bssidx(struct rt2x00_dev *rt2x00dev,
|
||||||
@@ -1229,11 +1247,13 @@ static void rt2800_config_wcid_attr_bssi
|
@@ -1274,11 +1292,13 @@ static void rt2800_config_wcid_attr_bssi
|
||||||
* The BSS Idx numbers is split in a main value of 3 bits,
|
* The BSS Idx numbers is split in a main value of 3 bits,
|
||||||
* and a extended field for adding one additional bit to the value.
|
* and a extended field for adding one additional bit to the value.
|
||||||
*/
|
*/
|
||||||
|
@ -122,7 +122,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rt2800_config_wcid_attr_cipher(struct rt2x00_dev *rt2x00dev,
|
static void rt2800_config_wcid_attr_cipher(struct rt2x00_dev *rt2x00dev,
|
||||||
@@ -1246,6 +1266,7 @@ static void rt2800_config_wcid_attr_ciph
|
@@ -1291,6 +1311,7 @@ static void rt2800_config_wcid_attr_ciph
|
||||||
|
|
||||||
offset = MAC_WCID_ATTR_ENTRY(key->hw_key_idx);
|
offset = MAC_WCID_ATTR_ENTRY(key->hw_key_idx);
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ Changes since v1: ---
|
||||||
if (crypto->cmd == SET_KEY) {
|
if (crypto->cmd == SET_KEY) {
|
||||||
rt2800_register_read(rt2x00dev, offset, ®);
|
rt2800_register_read(rt2x00dev, offset, ®);
|
||||||
rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_KEYTAB,
|
rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_KEYTAB,
|
||||||
@@ -1270,6 +1291,7 @@ static void rt2800_config_wcid_attr_ciph
|
@@ -1315,6 +1336,7 @@ static void rt2800_config_wcid_attr_ciph
|
||||||
rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_RX_WIUDF, 0);
|
rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_RX_WIUDF, 0);
|
||||||
rt2800_register_write(rt2x00dev, offset, reg);
|
rt2800_register_write(rt2x00dev, offset, reg);
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ Changes since v1: ---
|
||||||
|
|
||||||
offset = MAC_IVEIV_ENTRY(key->hw_key_idx);
|
offset = MAC_IVEIV_ENTRY(key->hw_key_idx);
|
||||||
|
|
||||||
@@ -1279,8 +1301,11 @@ static void rt2800_config_wcid_attr_ciph
|
@@ -1324,8 +1346,11 @@ static void rt2800_config_wcid_attr_ciph
|
||||||
(crypto->cipher == CIPHER_AES))
|
(crypto->cipher == CIPHER_AES))
|
||||||
iveiv_entry.iv[3] |= 0x20;
|
iveiv_entry.iv[3] |= 0x20;
|
||||||
iveiv_entry.iv[3] |= key->keyidx << 6;
|
iveiv_entry.iv[3] |= key->keyidx << 6;
|
||||||
|
@ -150,7 +150,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
int rt2800_config_shared_key(struct rt2x00_dev *rt2x00dev,
|
int rt2800_config_shared_key(struct rt2x00_dev *rt2x00dev,
|
||||||
@@ -1303,8 +1328,11 @@ int rt2800_config_shared_key(struct rt2x
|
@@ -1348,8 +1373,11 @@ int rt2800_config_shared_key(struct rt2x
|
||||||
sizeof(key_entry.rx_mic));
|
sizeof(key_entry.rx_mic));
|
||||||
|
|
||||||
offset = SHARED_KEY_ENTRY(key->hw_key_idx);
|
offset = SHARED_KEY_ENTRY(key->hw_key_idx);
|
||||||
|
@ -162,7 +162,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1319,10 +1347,12 @@ int rt2800_config_shared_key(struct rt2x
|
@@ -1364,10 +1392,12 @@ int rt2800_config_shared_key(struct rt2x
|
||||||
|
|
||||||
offset = SHARED_KEY_MODE_ENTRY(key->hw_key_idx / 8);
|
offset = SHARED_KEY_MODE_ENTRY(key->hw_key_idx / 8);
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ Changes since v1: ---
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update WCID information
|
* Update WCID information
|
||||||
@@ -1392,8 +1422,11 @@ int rt2800_config_pairwise_key(struct rt
|
@@ -1437,8 +1467,11 @@ int rt2800_config_pairwise_key(struct rt
|
||||||
sizeof(key_entry.rx_mic));
|
sizeof(key_entry.rx_mic));
|
||||||
|
|
||||||
offset = PAIRWISE_KEY_ENTRY(key->hw_key_idx);
|
offset = PAIRWISE_KEY_ENTRY(key->hw_key_idx);
|
||||||
|
@ -187,7 +187,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -4875,14 +4908,19 @@ static int rt2800_init_registers(struct
|
@@ -4898,14 +4931,19 @@ static int rt2800_init_registers(struct
|
||||||
/*
|
/*
|
||||||
* ASIC will keep garbage value after boot, clear encryption keys.
|
* ASIC will keep garbage value after boot, clear encryption keys.
|
||||||
*/
|
*/
|
||||||
|
@ -207,7 +207,7 @@ Changes since v1: ---
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -5008,8 +5046,10 @@ static int rt2800_wait_bbp_ready(struct
|
@@ -5031,8 +5069,10 @@ static int rt2800_wait_bbp_ready(struct
|
||||||
* BBP was enabled after firmware was loaded,
|
* BBP was enabled after firmware was loaded,
|
||||||
* but we need to reactivate it now.
|
* but we need to reactivate it now.
|
||||||
*/
|
*/
|
||||||
|
@ -218,7 +218,7 @@ Changes since v1: ---
|
||||||
msleep(1);
|
msleep(1);
|
||||||
|
|
||||||
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
|
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
|
||||||
@@ -6705,11 +6745,19 @@ int rt2800_enable_radio(struct rt2x00_de
|
@@ -6728,11 +6768,19 @@ int rt2800_enable_radio(struct rt2x00_de
|
||||||
/*
|
/*
|
||||||
* Send signal during boot time to initialize firmware.
|
* Send signal during boot time to initialize firmware.
|
||||||
*/
|
*/
|
||||||
|
@ -239,7 +239,7 @@ Changes since v1: ---
|
||||||
msleep(1);
|
msleep(1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7715,6 +7763,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -7738,6 +7786,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
int retval;
|
int retval;
|
||||||
u32 reg;
|
u32 reg;
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ Changes since v1: ---
|
||||||
retval = rt2800_probe_rt(rt2x00dev);
|
retval = rt2800_probe_rt(rt2x00dev);
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
@@ -7794,8 +7844,11 @@ void rt2800_get_tkip_seq(struct ieee8021
|
@@ -7817,8 +7867,11 @@ void rt2800_get_tkip_seq(struct ieee8021
|
||||||
u32 offset;
|
u32 offset;
|
||||||
|
|
||||||
offset = MAC_IVEIV_ENTRY(hw_key_idx);
|
offset = MAC_IVEIV_ENTRY(hw_key_idx);
|
||||||
|
|
|
@ -98,7 +98,7 @@ Changes since v1: ---
|
||||||
return HW_BEACON_BASE(index);
|
return HW_BEACON_BASE(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1012,8 +1048,12 @@ void rt2800_write_beacon(struct queue_en
|
@@ -1046,8 +1082,12 @@ void rt2800_write_beacon(struct queue_en
|
||||||
beacon_base = rt2800_hw_beacon_base(rt2x00dev, entry->entry_idx);
|
beacon_base = rt2800_hw_beacon_base(rt2x00dev, entry->entry_idx);
|
||||||
|
|
||||||
rt2800_shared_mem_lock(rt2x00dev);
|
rt2800_shared_mem_lock(rt2x00dev);
|
||||||
|
@ -109,9 +109,9 @@ Changes since v1: ---
|
||||||
+ rt2800_deselect_beacon_mem(rt2x00dev);
|
+ rt2800_deselect_beacon_mem(rt2x00dev);
|
||||||
+
|
+
|
||||||
rt2800_shared_mem_unlock(rt2x00dev);
|
rt2800_shared_mem_unlock(rt2x00dev);
|
||||||
|
__set_bit(ENTRY_BCN_ENABLED, &entry->flags);
|
||||||
|
|
||||||
/*
|
@@ -1080,6 +1120,8 @@ static inline void rt2800_clear_beacon_r
|
||||||
@@ -1040,6 +1080,8 @@ static inline void rt2800_clear_beacon_r
|
|
||||||
|
|
||||||
rt2800_shared_mem_lock(rt2x00dev);
|
rt2800_shared_mem_lock(rt2x00dev);
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ Changes since v1: ---
|
||||||
/*
|
/*
|
||||||
* For the Beacon base registers we only need to clear
|
* For the Beacon base registers we only need to clear
|
||||||
* the whole TXWI which (when set to 0) will invalidate
|
* the whole TXWI which (when set to 0) will invalidate
|
||||||
@@ -1048,6 +1090,8 @@ static inline void rt2800_clear_beacon_r
|
@@ -1088,6 +1130,8 @@ static inline void rt2800_clear_beacon_r
|
||||||
for (i = 0; i < txwi_desc_size; i += sizeof(__le32))
|
for (i = 0; i < txwi_desc_size; i += sizeof(__le32))
|
||||||
rt2800_register_write(rt2x00dev, beacon_base + i, 0);
|
rt2800_register_write(rt2x00dev, beacon_base + i, 0);
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -4583,6 +4583,7 @@ EXPORT_SYMBOL_GPL(rt2800_link_tuner);
|
@@ -4628,6 +4628,7 @@ EXPORT_SYMBOL_GPL(rt2800_link_tuner);
|
||||||
*/
|
*/
|
||||||
static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
|
static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
u32 reg;
|
u32 reg;
|
||||||
u16 eeprom;
|
u16 eeprom;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@@ -4970,7 +4971,7 @@ static int rt2800_init_registers(struct
|
@@ -4993,7 +4994,7 @@ static int rt2800_init_registers(struct
|
||||||
/*
|
/*
|
||||||
* Clear all beacons
|
* Clear all beacons
|
||||||
*/
|
*/
|
||||||
|
@ -41,7 +41,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
rt2800_clear_beacon_register(rt2x00dev, i);
|
rt2800_clear_beacon_register(rt2x00dev, i);
|
||||||
|
|
||||||
if (rt2x00_is_usb(rt2x00dev)) {
|
if (rt2x00_is_usb(rt2x00dev)) {
|
||||||
@@ -7816,6 +7817,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -7839,6 +7840,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
if (rt2x00_rt(rt2x00dev, RT3593))
|
if (rt2x00_rt(rt2x00dev, RT3593))
|
||||||
__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,9 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
*/
|
*/
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -4617,6 +4617,30 @@ static int rt2800_init_registers(struct
|
@@ -4640,6 +4640,30 @@ static int rt2800_init_registers(struct
|
||||||
rt2800_get_beacon_offset(rt2x00dev, 7));
|
if (ret)
|
||||||
rt2800_register_write(rt2x00dev, BCN_OFFSET1, reg);
|
return ret;
|
||||||
|
|
||||||
+ if (drv_data->hw_beacon_count == 16) {
|
+ if (drv_data->hw_beacon_count == 16) {
|
||||||
+ rt2800_register_read(rt2x00dev, BCN_OFFSET2, ®);
|
+ rt2800_register_read(rt2x00dev, BCN_OFFSET2, ®);
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7841,7 +7841,10 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -7864,7 +7864,10 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
if (rt2x00_rt(rt2x00dev, RT3593))
|
if (rt2x00_rt(rt2x00dev, RT3593))
|
||||||
__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7811,6 +7811,7 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -7834,6 +7834,7 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
case RT3390:
|
case RT3390:
|
||||||
case RT3572:
|
case RT3572:
|
||||||
case RT3593:
|
case RT3593:
|
||||||
|
|
|
@ -31,7 +31,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
#define RF5372 0x5372
|
#define RF5372 0x5372
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7431,6 +7431,66 @@ static const struct rf_channel rf_vals_3
|
@@ -7454,6 +7454,66 @@ static const struct rf_channel rf_vals_3
|
||||||
{173, 0x61, 0, 9},
|
{173, 0x61, 0, 9},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
static const struct rf_channel rf_vals_5592_xtal20[] = {
|
static const struct rf_channel rf_vals_5592_xtal20[] = {
|
||||||
/* Channel, N, K, mod, R */
|
/* Channel, N, K, mod, R */
|
||||||
{1, 482, 4, 10, 3},
|
{1, 482, 4, 10, 3},
|
||||||
@@ -7659,6 +7719,11 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -7682,6 +7742,11 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
spec->channels = rf_vals_3x;
|
spec->channels = rf_vals_3x;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -4348,6 +4348,7 @@ void rt2800_vco_calibration(struct rt2x0
|
@@ -4393,6 +4393,7 @@ void rt2800_vco_calibration(struct rt2x0
|
||||||
case RF3053:
|
case RF3053:
|
||||||
case RF3070:
|
case RF3070:
|
||||||
case RF3290:
|
case RF3290:
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -7838,6 +7839,7 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -7861,6 +7862,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
case RF3053:
|
case RF3053:
|
||||||
case RF3070:
|
case RF3070:
|
||||||
case RF3290:
|
case RF3290:
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -2604,6 +2604,211 @@ static void rt2800_config_channel_rf3053
|
@@ -2649,6 +2649,211 @@ static void rt2800_config_channel_rf3053
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
#define POWER_BOUND 0x27
|
#define POWER_BOUND 0x27
|
||||||
#define POWER_BOUND_5G 0x2b
|
#define POWER_BOUND_5G 0x2b
|
||||||
|
|
||||||
@@ -3216,6 +3421,9 @@ static void rt2800_config_channel(struct
|
@@ -3261,6 +3466,9 @@ static void rt2800_config_channel(struct
|
||||||
case RF3322:
|
case RF3322:
|
||||||
rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info);
|
rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7397,6 +7397,7 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7420,6 +7420,7 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
case RF3290:
|
case RF3290:
|
||||||
case RF3320:
|
case RF3320:
|
||||||
case RF3322:
|
case RF3322:
|
||||||
|
|
|
@ -35,7 +35,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
#define RX_FILTER_CFG 0x1400
|
#define RX_FILTER_CFG 0x1400
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -4972,6 +4972,12 @@ static int rt2800_init_registers(struct
|
@@ -4995,6 +4995,12 @@ static int rt2800_init_registers(struct
|
||||||
rt2800_register_write(rt2x00dev, TX_SW_CFG2,
|
rt2800_register_write(rt2x00dev, TX_SW_CFG2,
|
||||||
0x00000000);
|
0x00000000);
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
} else if (rt2x00_rt(rt2x00dev, RT5390) ||
|
} else if (rt2x00_rt(rt2x00dev, RT5390) ||
|
||||||
rt2x00_rt(rt2x00dev, RT5392) ||
|
rt2x00_rt(rt2x00dev, RT5392) ||
|
||||||
rt2x00_rt(rt2x00dev, RT5592)) {
|
rt2x00_rt(rt2x00dev, RT5592)) {
|
||||||
@@ -5002,9 +5008,11 @@ static int rt2800_init_registers(struct
|
@@ -5025,9 +5031,11 @@ static int rt2800_init_registers(struct
|
||||||
|
|
||||||
rt2800_register_read(rt2x00dev, MAX_LEN_CFG, ®);
|
rt2800_register_read(rt2x00dev, MAX_LEN_CFG, ®);
|
||||||
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_MPDU, AGGREGATION_SIZE);
|
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_MPDU, AGGREGATION_SIZE);
|
||||||
|
@ -63,7 +63,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 2);
|
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 2);
|
||||||
else
|
else
|
||||||
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 1);
|
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 1);
|
||||||
@@ -5157,6 +5165,11 @@ static int rt2800_init_registers(struct
|
@@ -5180,6 +5188,11 @@ static int rt2800_init_registers(struct
|
||||||
reg = rt2x00_rt(rt2x00dev, RT5592) ? 0x00000082 : 0x00000002;
|
reg = rt2x00_rt(rt2x00dev, RT5592) ? 0x00000082 : 0x00000002;
|
||||||
rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, reg);
|
rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, reg);
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -5775,6 +5775,47 @@ static void rt2800_init_bbp_3593(struct
|
@@ -5798,6 +5798,47 @@ static void rt2800_init_bbp_3593(struct
|
||||||
rt2800_bbp_write(rt2x00dev, 103, 0xc0);
|
rt2800_bbp_write(rt2x00dev, 103, 0xc0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
|
static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
int ant, div_mode;
|
int ant, div_mode;
|
||||||
@@ -5993,6 +6034,9 @@ static void rt2800_init_bbp(struct rt2x0
|
@@ -6016,6 +6057,9 @@ static void rt2800_init_bbp(struct rt2x0
|
||||||
case RT3593:
|
case RT3593:
|
||||||
rt2800_init_bbp_3593(rt2x00dev);
|
rt2800_init_bbp_3593(rt2x00dev);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -21,7 +21,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
/*
|
/*
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -6810,6 +6810,144 @@ static void rt2800_init_rfcsr_3593(struc
|
@@ -6833,6 +6833,144 @@ static void rt2800_init_rfcsr_3593(struc
|
||||||
/* TODO: enable stream mode support */
|
/* TODO: enable stream mode support */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
|
static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
rt2800_rf_init_calibration(rt2x00dev, 2);
|
rt2800_rf_init_calibration(rt2x00dev, 2);
|
||||||
@@ -7041,6 +7179,9 @@ static void rt2800_init_rfcsr(struct rt2
|
@@ -7064,6 +7202,9 @@ static void rt2800_init_rfcsr(struct rt2
|
||||||
case RT3390:
|
case RT3390:
|
||||||
rt2800_init_rfcsr_3390(rt2x00dev);
|
rt2800_init_rfcsr_3390(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7578,6 +7578,8 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7601,6 +7601,8 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
rt2x00_rt(rt2x00dev, RT5390) ||
|
rt2x00_rt(rt2x00dev, RT5390) ||
|
||||||
rt2x00_rt(rt2x00dev, RT5392))
|
rt2x00_rt(rt2x00dev, RT5392))
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -3384,6 +3384,36 @@ static char rt2800_txpower_to_dev(struct
|
@@ -3429,6 +3429,36 @@ static char rt2800_txpower_to_dev(struct
|
||||||
return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER);
|
return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
|
static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
|
||||||
struct ieee80211_conf *conf,
|
struct ieee80211_conf *conf,
|
||||||
struct rf_channel *rf,
|
struct rf_channel *rf,
|
||||||
@@ -3402,6 +3432,12 @@ static void rt2800_config_channel(struct
|
@@ -3447,6 +3477,12 @@ static void rt2800_config_channel(struct
|
||||||
rt2800_txpower_to_dev(rt2x00dev, rf->channel,
|
rt2800_txpower_to_dev(rt2x00dev, rf->channel,
|
||||||
info->default_power3);
|
info->default_power3);
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
switch (rt2x00dev->chip.rf) {
|
switch (rt2x00dev->chip.rf) {
|
||||||
case RF2020:
|
case RF2020:
|
||||||
case RF3020:
|
case RF3020:
|
||||||
@@ -3483,6 +3519,15 @@ static void rt2800_config_channel(struct
|
@@ -3528,6 +3564,15 @@ static void rt2800_config_channel(struct
|
||||||
rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
|
rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
|
||||||
rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
|
rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
|
||||||
rt2800_bbp_write(rt2x00dev, 77, 0x98);
|
rt2800_bbp_write(rt2x00dev, 77, 0x98);
|
||||||
|
@ -76,7 +76,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
} else {
|
} else {
|
||||||
rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
|
rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
|
||||||
rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
|
rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
|
||||||
@@ -3495,6 +3540,7 @@ static void rt2800_config_channel(struct
|
@@ -3540,6 +3585,7 @@ static void rt2800_config_channel(struct
|
||||||
!rt2x00_rt(rt2x00dev, RT5392)) {
|
!rt2x00_rt(rt2x00dev, RT5392)) {
|
||||||
if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
|
if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
|
||||||
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
||||||
|
@ -84,7 +84,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
rt2800_bbp_write(rt2x00dev, 75, 0x46);
|
rt2800_bbp_write(rt2x00dev, 75, 0x46);
|
||||||
} else {
|
} else {
|
||||||
if (rt2x00_rt(rt2x00dev, RT3593))
|
if (rt2x00_rt(rt2x00dev, RT3593))
|
||||||
@@ -3503,19 +3549,22 @@ static void rt2800_config_channel(struct
|
@@ -3548,19 +3594,22 @@ static void rt2800_config_channel(struct
|
||||||
rt2800_bbp_write(rt2x00dev, 82, 0x84);
|
rt2800_bbp_write(rt2x00dev, 82, 0x84);
|
||||||
rt2800_bbp_write(rt2x00dev, 75, 0x50);
|
rt2800_bbp_write(rt2x00dev, 75, 0x50);
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
rt2800_bbp_write(rt2x00dev, 83, 0x9a);
|
rt2800_bbp_write(rt2x00dev, 83, 0x9a);
|
||||||
|
|
||||||
if (rt2x00_has_cap_external_lna_a(rt2x00dev))
|
if (rt2x00_has_cap_external_lna_a(rt2x00dev))
|
||||||
@@ -3640,6 +3689,23 @@ static void rt2800_config_channel(struct
|
@@ -3685,6 +3734,23 @@ static void rt2800_config_channel(struct
|
||||||
usleep_range(1000, 1500);
|
usleep_range(1000, 1500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -3371,13 +3371,15 @@ static char rt2800_txpower_to_dev(struct
|
@@ -3416,13 +3416,15 @@ static char rt2800_txpower_to_dev(struct
|
||||||
unsigned int channel,
|
unsigned int channel,
|
||||||
char txpower)
|
char txpower)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -4581,7 +4581,8 @@ static void rt2800_config_txpower(struct
|
@@ -4626,7 +4626,8 @@ static void rt2800_config_txpower(struct
|
||||||
struct ieee80211_channel *chan,
|
struct ieee80211_channel *chan,
|
||||||
int power_level)
|
int power_level)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7460,7 +7460,8 @@ static u8 rt2800_get_txmixer_gain_24g(st
|
@@ -7483,7 +7483,8 @@ static u8 rt2800_get_txmixer_gain_24g(st
|
||||||
{
|
{
|
||||||
u16 word;
|
u16 word;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
|
||||||
@@ -7474,7 +7475,8 @@ static u8 rt2800_get_txmixer_gain_5g(str
|
@@ -7497,7 +7498,8 @@ static u8 rt2800_get_txmixer_gain_5g(str
|
||||||
{
|
{
|
||||||
u16 word;
|
u16 word;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -8392,7 +8392,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -8415,7 +8415,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
if (rt2x00_rt(rt2x00dev, RT3593))
|
if (rt2x00_rt(rt2x00dev, RT3593))
|
||||||
__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
__set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -1916,7 +1916,8 @@ void rt2800_config_ant(struct rt2x00_dev
|
@@ -1961,7 +1961,8 @@ void rt2800_config_ant(struct rt2x00_dev
|
||||||
rt2800_bbp_write(rt2x00dev, 3, r3);
|
rt2800_bbp_write(rt2x00dev, 3, r3);
|
||||||
rt2800_bbp_write(rt2x00dev, 1, r1);
|
rt2800_bbp_write(rt2x00dev, 1, r1);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -1939,7 +1939,8 @@ static void rt2800_config_lna_gain(struc
|
@@ -1984,7 +1984,8 @@ static void rt2800_config_lna_gain(struc
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
|
||||||
lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0);
|
lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0);
|
||||||
} else if (libconf->rf.channel <= 128) {
|
} else if (libconf->rf.channel <= 128) {
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &eeprom);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &eeprom);
|
||||||
lna_gain = rt2x00_get_field16(eeprom,
|
lna_gain = rt2x00_get_field16(eeprom,
|
||||||
EEPROM_EXT_LNA2_A1);
|
EEPROM_EXT_LNA2_A1);
|
||||||
@@ -1949,7 +1950,8 @@ static void rt2800_config_lna_gain(struc
|
@@ -1994,7 +1995,8 @@ static void rt2800_config_lna_gain(struc
|
||||||
EEPROM_RSSI_BG2_LNA_A1);
|
EEPROM_RSSI_BG2_LNA_A1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -4780,7 +4780,8 @@ static u8 rt2800_get_default_vgc(struct
|
@@ -4825,7 +4825,8 @@ static u8 rt2800_get_default_vgc(struct
|
||||||
else
|
else
|
||||||
vgc = 0x2e + rt2x00dev->lna_gain;
|
vgc = 0x2e + rt2x00dev->lna_gain;
|
||||||
} else { /* 5GHZ band */
|
} else { /* 5GHZ band */
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
vgc = 0x20 + (rt2x00dev->lna_gain * 5) / 3;
|
vgc = 0x20 + (rt2x00dev->lna_gain * 5) / 3;
|
||||||
else if (rt2x00_rt(rt2x00dev, RT5592))
|
else if (rt2x00_rt(rt2x00dev, RT5592))
|
||||||
vgc = 0x24 + (2 * rt2x00dev->lna_gain);
|
vgc = 0x24 + (2 * rt2x00dev->lna_gain);
|
||||||
@@ -4800,7 +4801,8 @@ static inline void rt2800_set_vgc(struct
|
@@ -4845,7 +4846,8 @@ static inline void rt2800_set_vgc(struct
|
||||||
{
|
{
|
||||||
if (qual->vgc_level != vgc_level) {
|
if (qual->vgc_level != vgc_level) {
|
||||||
if (rt2x00_rt(rt2x00dev, RT3572) ||
|
if (rt2x00_rt(rt2x00dev, RT3572) ||
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
rt2800_bbp_write_with_rx_chain(rt2x00dev, 66,
|
rt2800_bbp_write_with_rx_chain(rt2x00dev, 66,
|
||||||
vgc_level);
|
vgc_level);
|
||||||
} else if (rt2x00_rt(rt2x00dev, RT5592)) {
|
} else if (rt2x00_rt(rt2x00dev, RT5592)) {
|
||||||
@@ -4847,6 +4849,11 @@ void rt2800_link_tuner(struct rt2x00_dev
|
@@ -4892,6 +4894,11 @@ void rt2800_link_tuner(struct rt2x00_dev
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7597,7 +7597,8 @@ static int rt2800_validate_eeprom(struct
|
@@ -7620,7 +7620,8 @@ static int rt2800_validate_eeprom(struct
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
|
||||||
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
|
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
|
||||||
rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
|
rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
|
if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
|
||||||
rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
|
rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
|
||||||
rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
|
rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
|
||||||
@@ -7617,7 +7618,8 @@ static int rt2800_validate_eeprom(struct
|
@@ -7640,7 +7641,8 @@ static int rt2800_validate_eeprom(struct
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
|
||||||
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
|
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
|
||||||
rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
|
rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
|
if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
|
||||||
rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
|
rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
|
||||||
rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
|
rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
|
||||||
@@ -7625,7 +7627,8 @@ static int rt2800_validate_eeprom(struct
|
@@ -7648,7 +7650,8 @@ static int rt2800_validate_eeprom(struct
|
||||||
}
|
}
|
||||||
rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
|
rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -3958,6 +3958,9 @@ static u8 rt2800_compensate_txpower(stru
|
@@ -4003,6 +4003,9 @@ static u8 rt2800_compensate_txpower(stru
|
||||||
if (rt2x00_rt(rt2x00dev, RT3593))
|
if (rt2x00_rt(rt2x00dev, RT3593))
|
||||||
return min_t(u8, txpower, 0xc);
|
return min_t(u8, txpower, 0xc);
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -8405,7 +8405,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -8428,7 +8428,8 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@
|
||||||
DECLARE_KFIFO_PTR(txstatus_fifo, u32);
|
DECLARE_KFIFO_PTR(txstatus_fifo, u32);
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
@@ -1324,6 +1324,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
|
@@ -1327,6 +1327,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
|
||||||
INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
|
INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
|
||||||
INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
|
INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@
|
||||||
/*
|
/*
|
||||||
* Let the driver probe the device to detect the capabilities.
|
* Let the driver probe the device to detect the capabilities.
|
||||||
*/
|
*/
|
||||||
@@ -1454,6 +1458,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
|
@@ -1457,6 +1461,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
|
||||||
*/
|
*/
|
||||||
if (rt2x00dev->drv_data)
|
if (rt2x00dev->drv_data)
|
||||||
kfree(rt2x00dev->drv_data);
|
kfree(rt2x00dev->drv_data);
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#endif /* _RT2X00_PLATFORM_H */
|
#endif /* _RT2X00_PLATFORM_H */
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
@@ -937,6 +937,22 @@ static int rt2x00lib_probe_hw_modes(stru
|
@@ -940,6 +940,22 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||||
unsigned int num_rates;
|
unsigned int num_rates;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
int disable_5ghz;
|
int disable_5ghz;
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
@@ -928,6 +928,18 @@ static void rt2x00lib_rate(struct ieee80
|
@@ -931,6 +931,18 @@ static void rt2x00lib_rate(struct ieee80
|
||||||
entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
|
entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -3505,11 +3505,18 @@ static void rt2800_config_channel(struct
|
@@ -3550,11 +3550,18 @@ static void rt2800_config_channel(struct
|
||||||
/*
|
/*
|
||||||
* Change BBP settings
|
* Change BBP settings
|
||||||
*/
|
*/
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
} else if (rt2x00_rt(rt2x00dev, RT3593)) {
|
} else if (rt2x00_rt(rt2x00dev, RT3593)) {
|
||||||
if (rf->channel > 14) {
|
if (rf->channel > 14) {
|
||||||
/* Disable CCK Packet detection on 5GHz */
|
/* Disable CCK Packet detection on 5GHz */
|
||||||
@@ -6585,6 +6592,12 @@ static void rt2800_init_rfcsr_3290(struc
|
@@ -6608,6 +6615,12 @@ static void rt2800_init_rfcsr_3290(struc
|
||||||
|
|
||||||
static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev)
|
static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
rt2800_rf_init_calibration(rt2x00dev, 30);
|
rt2800_rf_init_calibration(rt2x00dev, 30);
|
||||||
|
|
||||||
rt2800_rfcsr_write(rt2x00dev, 0, 0xf0);
|
rt2800_rfcsr_write(rt2x00dev, 0, 0xf0);
|
||||||
@@ -6620,15 +6633,30 @@ static void rt2800_init_rfcsr_3352(struc
|
@@ -6643,15 +6656,30 @@ static void rt2800_init_rfcsr_3352(struc
|
||||||
rt2800_rfcsr_write(rt2x00dev, 31, 0x80);
|
rt2800_rfcsr_write(rt2x00dev, 31, 0x80);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 32, 0x80);
|
rt2800_rfcsr_write(rt2x00dev, 32, 0x80);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 33, 0x00);
|
rt2800_rfcsr_write(rt2x00dev, 33, 0x00);
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
rt2800_rfcsr_write(rt2x00dev, 43, 0xdb);
|
rt2800_rfcsr_write(rt2x00dev, 43, 0xdb);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 44, 0xdb);
|
rt2800_rfcsr_write(rt2x00dev, 44, 0xdb);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 45, 0xdb);
|
rt2800_rfcsr_write(rt2x00dev, 45, 0xdb);
|
||||||
@@ -6636,15 +6664,20 @@ static void rt2800_init_rfcsr_3352(struc
|
@@ -6659,15 +6687,20 @@ static void rt2800_init_rfcsr_3352(struc
|
||||||
rt2800_rfcsr_write(rt2x00dev, 47, 0x0d);
|
rt2800_rfcsr_write(rt2x00dev, 47, 0x0d);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 48, 0x14);
|
rt2800_rfcsr_write(rt2x00dev, 48, 0x14);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 49, 0x00);
|
rt2800_rfcsr_write(rt2x00dev, 49, 0x00);
|
||||||
|
@ -96,7 +96,7 @@
|
||||||
rt2800_rfcsr_write(rt2x00dev, 59, 0x00);
|
rt2800_rfcsr_write(rt2x00dev, 59, 0x00);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 60, 0x00);
|
rt2800_rfcsr_write(rt2x00dev, 60, 0x00);
|
||||||
rt2800_rfcsr_write(rt2x00dev, 61, 0x00);
|
rt2800_rfcsr_write(rt2x00dev, 61, 0x00);
|
||||||
@@ -7665,6 +7698,7 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7688,6 +7721,7 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
* RT53xx: defined in "EEPROM_CHIP_ID" field
|
* RT53xx: defined in "EEPROM_CHIP_ID" field
|
||||||
*/
|
*/
|
||||||
if (rt2x00_rt(rt2x00dev, RT3290) ||
|
if (rt2x00_rt(rt2x00dev, RT3290) ||
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
rt2x00_rt(rt2x00dev, RT5390) ||
|
rt2x00_rt(rt2x00dev, RT5390) ||
|
||||||
rt2x00_rt(rt2x00dev, RT5392))
|
rt2x00_rt(rt2x00dev, RT5392))
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
|
||||||
@@ -7759,7 +7793,8 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7782,7 +7816,8 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
/*
|
/*
|
||||||
* Detect if this device has Bluetooth co-existence.
|
* Detect if this device has Bluetooth co-existence.
|
||||||
*/
|
*/
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
__set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags);
|
__set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7788,6 +7823,22 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7811,6 +7846,22 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
EIRP_MAX_TX_POWER_LIMIT)
|
EIRP_MAX_TX_POWER_LIMIT)
|
||||||
__set_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags);
|
__set_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -8175,6 +8175,27 @@ static const struct rf_channel rf_vals_5
|
@@ -8198,6 +8198,27 @@ static const struct rf_channel rf_vals_5
|
||||||
{196, 83, 0, 12, 1},
|
{196, 83, 0, 12, 1},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
struct hw_mode_spec *spec = &rt2x00dev->spec;
|
struct hw_mode_spec *spec = &rt2x00dev->spec;
|
||||||
@@ -8262,7 +8283,10 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -8285,7 +8306,10 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
case RF5390:
|
case RF5390:
|
||||||
case RF5392:
|
case RF5392:
|
||||||
spec->num_channels = 14;
|
spec->num_channels = 14;
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RF3052:
|
case RF3052:
|
||||||
@@ -8445,6 +8469,19 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -8468,6 +8492,19 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
|
struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
|
||||||
@@ -8487,6 +8524,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
@@ -8510,6 +8547,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
||||||
rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
|
rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "rt2x00.h"
|
#include "rt2x00.h"
|
||||||
#include "rt2800lib.h"
|
#include "rt2800lib.h"
|
||||||
@@ -8471,13 +8472,14 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -8494,13 +8495,14 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
|
|
||||||
int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev)
|
int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#define RF5372 0x5372
|
#define RF5372 0x5372
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -2993,6 +2993,13 @@ static void rt2800_config_channel_rf53xx
|
@@ -3038,6 +3038,13 @@ static void rt2800_config_channel_rf53xx
|
||||||
|
|
||||||
rt2800_rfcsr_write(rt2x00dev, 59,
|
rt2800_rfcsr_write(rt2x00dev, 59,
|
||||||
r59_non_bt[idx]);
|
r59_non_bt[idx]);
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3471,6 +3478,7 @@ static void rt2800_config_channel(struct
|
@@ -3516,6 +3523,7 @@ static void rt2800_config_channel(struct
|
||||||
rt2800_config_channel_rf3853(rt2x00dev, conf, rf, info);
|
rt2800_config_channel_rf3853(rt2x00dev, conf, rf, info);
|
||||||
break;
|
break;
|
||||||
case RF3070:
|
case RF3070:
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -3488,6 +3496,7 @@ static void rt2800_config_channel(struct
|
@@ -3533,6 +3541,7 @@ static void rt2800_config_channel(struct
|
||||||
if (rt2x00_rf(rt2x00dev, RF3070) ||
|
if (rt2x00_rf(rt2x00dev, RF3070) ||
|
||||||
rt2x00_rf(rt2x00dev, RF3290) ||
|
rt2x00_rf(rt2x00dev, RF3290) ||
|
||||||
rt2x00_rf(rt2x00dev, RF3322) ||
|
rt2x00_rf(rt2x00dev, RF3322) ||
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
rt2x00_rf(rt2x00dev, RF5360) ||
|
rt2x00_rf(rt2x00dev, RF5360) ||
|
||||||
rt2x00_rf(rt2x00dev, RF5370) ||
|
rt2x00_rf(rt2x00dev, RF5370) ||
|
||||||
rt2x00_rf(rt2x00dev, RF5372) ||
|
rt2x00_rf(rt2x00dev, RF5372) ||
|
||||||
@@ -3765,7 +3774,8 @@ static void rt2800_config_channel(struct
|
@@ -3810,7 +3819,8 @@ static void rt2800_config_channel(struct
|
||||||
/*
|
/*
|
||||||
* Clear update flag
|
* Clear update flag
|
||||||
*/
|
*/
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
rt2800_bbp_read(rt2x00dev, 49, &bbp);
|
rt2800_bbp_read(rt2x00dev, 49, &bbp);
|
||||||
rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0);
|
rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0);
|
||||||
rt2800_bbp_write(rt2x00dev, 49, bbp);
|
rt2800_bbp_write(rt2x00dev, 49, bbp);
|
||||||
@@ -4644,6 +4654,7 @@ void rt2800_vco_calibration(struct rt2x0
|
@@ -4689,6 +4699,7 @@ void rt2800_vco_calibration(struct rt2x0
|
||||||
case RF3070:
|
case RF3070:
|
||||||
case RF3290:
|
case RF3290:
|
||||||
case RF3853:
|
case RF3853:
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -5078,6 +5089,8 @@ static int rt2800_init_registers(struct
|
@@ -5101,6 +5112,8 @@ static int rt2800_init_registers(struct
|
||||||
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
|
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
|
||||||
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
|
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
|
||||||
rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
|
rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
} else {
|
} else {
|
||||||
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000);
|
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000);
|
||||||
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
|
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
|
||||||
@@ -5733,9 +5746,13 @@ static void rt2800_init_bbp_3352(struct
|
@@ -5756,9 +5769,13 @@ static void rt2800_init_bbp_3352(struct
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 86, 0x38);
|
rt2800_bbp_write(rt2x00dev, 86, 0x38);
|
||||||
|
|
||||||
@@ -5749,9 +5766,13 @@ static void rt2800_init_bbp_3352(struct
|
@@ -5772,9 +5789,13 @@ static void rt2800_init_bbp_3352(struct
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 104, 0x92);
|
rt2800_bbp_write(rt2x00dev, 104, 0x92);
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 120, 0x50);
|
rt2800_bbp_write(rt2x00dev, 120, 0x50);
|
||||||
|
|
||||||
@@ -5776,6 +5797,13 @@ static void rt2800_init_bbp_3352(struct
|
@@ -5799,6 +5820,13 @@ static void rt2800_init_bbp_3352(struct
|
||||||
rt2800_bbp_write(rt2x00dev, 143, 0xa2);
|
rt2800_bbp_write(rt2x00dev, 143, 0xa2);
|
||||||
|
|
||||||
rt2800_bbp_write(rt2x00dev, 148, 0xc8);
|
rt2800_bbp_write(rt2x00dev, 148, 0xc8);
|
||||||
|
@ -115,7 +115,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
|
static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev)
|
||||||
@@ -6117,6 +6145,7 @@ static void rt2800_init_bbp(struct rt2x0
|
@@ -6140,6 +6168,7 @@ static void rt2800_init_bbp(struct rt2x0
|
||||||
rt2800_init_bbp_3290(rt2x00dev);
|
rt2800_init_bbp_3290(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
case RT3352:
|
case RT3352:
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
rt2800_init_bbp_3352(rt2x00dev);
|
rt2800_init_bbp_3352(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
case RT3390:
|
case RT3390:
|
||||||
@@ -7068,6 +7097,76 @@ static void rt2800_init_rfcsr_3883(struc
|
@@ -7091,6 +7120,76 @@ static void rt2800_init_rfcsr_3883(struc
|
||||||
rt2800_rfcsr_write(rt2x00dev, 20, rfcsr);
|
rt2800_rfcsr_write(rt2x00dev, 20, rfcsr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@
|
||||||
static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
|
static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
|
||||||
{
|
{
|
||||||
rt2800_rf_init_calibration(rt2x00dev, 2);
|
rt2800_rf_init_calibration(rt2x00dev, 2);
|
||||||
@@ -7308,6 +7407,9 @@ static void rt2800_init_rfcsr(struct rt2
|
@@ -7331,6 +7430,9 @@ static void rt2800_init_rfcsr(struct rt2
|
||||||
case RT3593:
|
case RT3593:
|
||||||
rt2800_init_rfcsr_3593(rt2x00dev);
|
rt2800_init_rfcsr_3593(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
case RT5390:
|
case RT5390:
|
||||||
rt2800_init_rfcsr_5390(rt2x00dev);
|
rt2800_init_rfcsr_5390(rt2x00dev);
|
||||||
break;
|
break;
|
||||||
@@ -7567,6 +7669,12 @@ static int rt2800_validate_eeprom(struct
|
@@ -7590,6 +7692,12 @@ static int rt2800_validate_eeprom(struct
|
||||||
rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820);
|
rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820);
|
||||||
rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
|
rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
|
||||||
rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word);
|
rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word);
|
||||||
|
@ -223,7 +223,7 @@
|
||||||
} else if (rt2x00_rt(rt2x00dev, RT2860) ||
|
} else if (rt2x00_rt(rt2x00dev, RT2860) ||
|
||||||
rt2x00_rt(rt2x00dev, RT2872)) {
|
rt2x00_rt(rt2x00dev, RT2872)) {
|
||||||
/*
|
/*
|
||||||
@@ -7705,6 +7813,8 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7728,6 +7836,8 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
|
rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
|
||||||
else if (rt2x00_rt(rt2x00dev, RT3883))
|
else if (rt2x00_rt(rt2x00dev, RT3883))
|
||||||
rf = RF3853;
|
rf = RF3853;
|
||||||
|
@ -232,7 +232,7 @@
|
||||||
else
|
else
|
||||||
rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
|
rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
|
||||||
|
|
||||||
@@ -7724,6 +7834,7 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7747,6 +7857,7 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
case RF3320:
|
case RF3320:
|
||||||
case RF3322:
|
case RF3322:
|
||||||
case RF3853:
|
case RF3853:
|
||||||
|
@ -240,7 +240,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -8278,6 +8389,7 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -8301,6 +8412,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
case RF3290:
|
case RF3290:
|
||||||
case RF3320:
|
case RF3320:
|
||||||
case RF3322:
|
case RF3322:
|
||||||
|
@ -248,7 +248,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -8416,6 +8528,7 @@ static int rt2800_probe_hw_mode(struct r
|
@@ -8439,6 +8551,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||||
case RF3070:
|
case RF3070:
|
||||||
case RF3290:
|
case RF3290:
|
||||||
case RF3853:
|
case RF3853:
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
case RF5360:
|
case RF5360:
|
||||||
case RF5370:
|
case RF5370:
|
||||||
case RF5372:
|
case RF5372:
|
||||||
@@ -8455,6 +8568,7 @@ static int rt2800_probe_rt(struct rt2x00
|
@@ -8478,6 +8591,7 @@ static int rt2800_probe_rt(struct rt2x00
|
||||||
case RT3572:
|
case RT3572:
|
||||||
case RT3593:
|
case RT3593:
|
||||||
case RT3883:
|
case RT3883:
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "rt2x00.h"
|
#include "rt2x00.h"
|
||||||
#include "rt2800lib.h"
|
#include "rt2800lib.h"
|
||||||
@@ -7923,6 +7924,17 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7946,6 +7947,17 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
|
rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
|
||||||
rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
|
rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||||
@@ -1262,7 +1262,7 @@ static inline void rt2x00lib_set_if_comb
|
@@ -1265,7 +1265,7 @@ static inline void rt2x00lib_set_if_comb
|
||||||
*/
|
*/
|
||||||
if_limit = &rt2x00dev->if_limits_ap;
|
if_limit = &rt2x00dev->if_limits_ap;
|
||||||
if_limit->max = rt2x00dev->ops->max_ap_intf;
|
if_limit->max = rt2x00dev->ops->max_ap_intf;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||||
@@ -7808,10 +7808,11 @@ static int rt2800_init_eeprom(struct rt2
|
@@ -7831,10 +7831,11 @@ static int rt2800_init_eeprom(struct rt2
|
||||||
* RT53xx: defined in "EEPROM_CHIP_ID" field
|
* RT53xx: defined in "EEPROM_CHIP_ID" field
|
||||||
*/
|
*/
|
||||||
if (rt2x00_rt(rt2x00dev, RT3290) ||
|
if (rt2x00_rt(rt2x00dev, RT3290) ||
|
||||||
|
|
Loading…
Reference in New Issue