rt2x00: Add antenna setting for RT3070/RT3090/RT3390 with RX antenna diversity support
PATCH 1/8 rt2x00: Add antenna setting for RT3070/RT3090/RT3390 with RX antenna diversity support
From: RA-Jay Hung <[email protected]>
For RT3070/RT3090/RT3390 with RX antenna diversity support, we must select default antenna using gpio control way even if we do not turn on antenna diversity feature.
Seperate the meaning of TX/RX chain and antenna. Some chips use 2x2 TX/RX chain but may have 3 RX antennas or 1x1 TX/RX chain but may have 2 RX antennas to do antenna diversity.
--- drivers/net/wireless/rt2x00/rt2800.h | 3 + drivers/net/wireless/rt2x00/rt2800lib.c | 74 +++++++++++++++++++++++++++---- drivers/net/wireless/rt2x00/rt2x00.h | 2 + 3 files changed, 70 insertions(+), 9 deletions(-)
drivers/net/wireless/rt2x00/rt2800.h +3 -0
@@ -270,6 +270,7 @@/* * GPIO_CTRL_CFG: +* GPIOD: GPIO direction, 0: Output, 1: Input */ #define GPIO_CTRL_CFG 0x0228#define GPIO_CTRL_CFG_BIT0 FIELD32(0x00000001)
@@ -281,6 +282,7 @@#define GPIO_CTRL_CFG_BIT6 FIELD32(0x00000040)#define GPIO_CTRL_CFG_BIT7 FIELD32(0x00000080)#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00000100) +#define GPIO_CTRL_CFG_GPIOD FIELD32(0x00000800)/* * MCU_CMD_CFG
@@ -2068,6 +2070,7 @@ struct mac_iveiv_entry {#define MCU_LED_LED_POLARITY 0x54#define MCU_RADAR 0x60#define MCU_BOOT_SIGNAL 0x72 +#define MCU_ANT_SELECT 0X73#define MCU_BBP_SIGNAL 0x80#define MCU_POWER_SAVE 0x83
drivers/net/wireless/rt2x00/rt2800lib.c +65 -9
127 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2x00.h +2 -0
@@ -225,6 +225,8 @@ struct channel_info {struct antenna_setup {enum antenna rx;enum antenna tx; +u8 rx_chain_num; +u8 tx_chain_num; };/*
Signature · 1 line
1.7.2.3
PATCH 2/8 rt2x00: Fix rt2800 txpower setting to correct value
From: RA-Jay Hung <[email protected]>
TX_PWR_CFG_* setting need to consider below cases -compesate 20M/40M tx power delta for 2.4/5GHZ band -limit maximum EIRP tx power to power_level of
regulatory requirement
--- drivers/net/wireless/rt2x00/rt2800.h | 39 ++++-- drivers/net/wireless/rt2x00/rt2800lib.c | 236 ++++++++++++++++++++++-------- drivers/net/wireless/rt2x00/rt2x00.h | 1 + 3 files changed, 199 insertions(+), 77 deletions(-)
drivers/net/wireless/rt2x00/rt2800.h +25 -14
@@ -1703,11 +1703,14 @@ struct mac_iveiv_entry {*/ /* -* BBP 1: TX Antenna & Power -* POWER: 0 - normal, 1 - drop tx power by 6dBm, 2 - drop tx power by 12dBm, -* 3 - increase tx power by 6dBm -*/ -#define BBP1_TX_POWER FIELD8(0x07) +* BBP 1: TX Antenna & Power Control +* POWER_CTRL: +* 0 - normal, +* 1 - drop tx power by 6dBm, +* 2 - drop tx power by 12dBm, +* 3 - increase tx power by 6dBm +*/ +#define BBP1_TX_POWER_CTRL FIELD8(0x07)#define BBP1_TX_ANTENNA FIELD8(0x18)/*
@@ -2001,23 +2004,26 @@ struct mac_iveiv_entry {#define EEPROM_RSSI_A2_LNA_A2 FIELD16(0xff00)/* -* EEPROM Maximum TX power values +* EEPROM EIRP Maximum TX power values(unit: dbm) */ -#define EEPROM_MAX_TX_POWER 0x0027 -#define EEPROM_MAX_TX_POWER_24GHZ FIELD16(0x00ff) -#define EEPROM_MAX_TX_POWER_5GHZ FIELD16(0xff00) +#define EEPROM_EIRP_MAX_TX_POWER 0x0027 +#define EEPROM_EIRP_MAX_TX_POWER_2GHZ FIELD16(0x00ff) +#define EEPROM_EIRP_MAX_TX_POWER_5GHZ FIELD16(0xff00)/* * EEPROM TXpower delta: 20MHZ AND 40 MHZ use different power. * This is delta in 40MHZ. -* VALUE: Tx Power dalta value (MAX=4) +* VALUE: Tx Power dalta value, MAX=4(unit: dbm) * TYPE: 1: Plus the delta value, 0: minus the delta value -* TXPOWER: Enable: +* ENABLE: enable tx power compensation for 40BW */ #define EEPROM_TXPOWER_DELTA 0x0028 -#define EEPROM_TXPOWER_DELTA_VALUE FIELD16(0x003f) -#define EEPROM_TXPOWER_DELTA_TYPE FIELD16(0x0040) -#define EEPROM_TXPOWER_DELTA_TXPOWER FIELD16(0x0080) +#define EEPROM_TXPOWER_DELTA_VALUE_2G FIELD16(0x003f) +#define EEPROM_TXPOWER_DELTA_TYPE_2G FIELD16(0x0040) +#define EEPROM_TXPOWER_DELTA_ENABLE_2G FIELD16(0x0080) +#define EEPROM_TXPOWER_DELTA_VALUE_5G FIELD16(0x3f00) +#define EEPROM_TXPOWER_DELTA_TYPE_5G FIELD16(0x4000) +#define EEPROM_TXPOWER_DELTA_ENABLE_5G FIELD16(0x8000)/* * EEPROM TXPOWER 802.11BG
@@ -2215,4 +2221,9 @@ struct mac_iveiv_entry {#define TXPOWER_A_TO_DEV (__txpower) \ clamp_t(char, __txpower, MIN_A_TXPOWER, MAX_A_TXPOWER) +/* +* Board's maximun TX power limitation +*/ +#define EIRP_MAX_TX_POWER_LIMIT 0x50 +#endif /* RT2800_H */
drivers/net/wireless/rt2x00/rt2800lib.c +173 -63
339 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2x00.h +1 -0
@@ -667,6 +667,7 @@ enum rt2x00_flags {*/ CONFIG_SUPPORT_HW_BUTTON ,CONFIG_SUPPORT_HW_CRYPTO , +CONFIG_SUPPORT_POWER_LIMIT ,DRIVER_SUPPORT_CONTROL_FILTERS ,DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL , DRIVER_SUPPORT_PRE_TBTT_INTERRUPT,
Signature · 1 line
1.7.2.3
PATCH 3/8 rt2x00: Minor optimization for devices with RTS/CTS offload
From: Helmut Schaa <[email protected]>
Only devices that don't have RTS/CTS offload need to check for IEEE80211_TX_RC_USE_RTS_CTS and IEEE80211_TX_RC_USE_CTS_PROTECT.
By swapping both conditions we keep the same number of needed conditionals for devices without RTS/CTS offload but save one conditional on devices with RTS/CTS offload.
--- drivers/net/wireless/rt2x00/rt2x00mac.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/rt2x00/rt2x00mac.c +3 -3
@@ -139,9 +139,9 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)* either RTS or CTS-to-self frame and handles everything * inside the hardware. */ -if ((tx_info->control.rates[0 ].flags & (IEEE80211_TX_RC_USE_RTS_CTS | -IEEE80211_TX_RC_USE_CTS_PROTECT )) && - !rt2x00dev->ops->hw->set_rts_threshold) { +if (!rt2x00dev->ops->hw->set_rts_threshold && + (tx_info->control.rates[0 ].flags & (IEEE80211_TX_RC_USE_RTS_CTS | +IEEE80211_TX_RC_USE_CTS_PROTECT ))) {if (rt2x00queue_available (queue) <=1 ) goto exit_fail;
Signature · 1 line
1.7.2.3
PATCH 4/8 Revert "rt2x00 : avoid timestamp for monitor injected frame."
From: Helmut Schaa <[email protected]>
This reverts commit e81e0aef32bfa7f593b14479b9c7eaa7196798ac "rt2x00 : avoid timestamp for monitor injected frame." as it breaks proper timestamp insertion into probe responses injected by hostapd for example.
--- drivers/net/wireless/rt2x00/rt2x00queue.c | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-)
drivers/net/wireless/rt2x00/rt2x00queue.c +3 -6
@@ -365,13 +365,10 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,/* * Beacons and probe responses require the tsf timestamp -* to be inserted into the frame, except for a frame that has been injected -* through a monitor interface. This latter is needed for testing a -* monitor interface. +* to be inserted into the frame. */ -if ((ieee80211_is_beacon (hdr->frame_control) || -ieee80211_is_probe_resp (hdr->frame_control)) && - (!(tx_info->flags &IEEE80211_TX_CTL_INJECTED ))) +if (ieee80211_is_beacon (hdr->frame_control) || +ieee80211_is_probe_resp (hdr->frame_control))__set_bit (ENTRY_TXD_REQ_TIMESTAMP , &txdesc->flags);/*
Signature · 1 line
1.7.2.3
PATCH 5/8 rt2x00: Remove superfluos empty line
From: Helmut Schaa <[email protected]>
--- drivers/net/wireless/rt2x00/rt2x00ht.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/net/wireless/rt2x00/rt2x00ht.c +0 -1
@@ -69,7 +69,6 @@ void rt2x00ht_create_tx_descriptor(struct queue_entry *entry, txdesc->mcs |=0x08 ; } -/* * This frame is eligible for an AMPDU, however, don't aggregate * frames that are intended to probe a specific tx rate.
Signature · 1 line
1.7.2.3
PATCH 6/8 rt2x00: Add/Modify protection related register definitions
From: Shiang Tu <[email protected]>
Make the definition of protection related registers more precisely
--- drivers/net/wireless/rt2x00/rt2800.h | 22 ++++++++++++++-------- drivers/net/wireless/rt2x00/rt2800lib.c | 12 ++++++------ 2 files changed, 20 insertions(+), 14 deletions(-)
drivers/net/wireless/rt2x00/rt2800.h +14 -8
@@ -1138,8 +1138,8 @@* PROTECT_RATE: Protection control frame rate for CCK TX(RTS/CTS/CFEnd) * PROTECT_CTRL: Protection control frame type for CCK TX * 0:none, 1:RTS/CTS, 2:CTS-to-self -* PROTECT_NAV: TXOP protection type for CCK TX -* 0:none, 1:ShortNAVprotect, 2:LongNAVProtect +* PROTECT_NAV_SHORT: TXOP protection type for CCK TX with short NAV +* PROTECT_NAV_LONG: TXOP protection type for CCK TX with long NAV * TX_OP_ALLOW_CCK: CCK TXOP allowance, 0:disallow * TX_OP_ALLOW_OFDM: CCK TXOP allowance, 0:disallow * TX_OP_ALLOW_MM20: CCK TXOP allowance, 0:disallow
@@ -1151,7 +1151,8 @@#define CCK_PROT_CFG 0x1364#define CCK_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)#define CCK_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000) -#define CCK_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000) +#define CCK_PROT_CFG_PROTECT_NAV_SHORT FIELD32(0x00040000) +#define CCK_PROT_CFG_PROTECT_NAV_LONG FIELD32(0x00080000)#define CCK_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)#define CCK_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)#define CCK_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
@@ -1166,7 +1167,8 @@#define OFDM_PROT_CFG 0x1368#define OFDM_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)#define OFDM_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000) -#define OFDM_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000) +#define OFDM_PROT_CFG_PROTECT_NAV_SHORT FIELD32(0x00040000) +#define OFDM_PROT_CFG_PROTECT_NAV_LONG FIELD32(0x00080000)#define OFDM_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)#define OFDM_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)#define OFDM_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
@@ -1181,7 +1183,8 @@#define MM20_PROT_CFG 0x136c#define MM20_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)#define MM20_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000) -#define MM20_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000) +#define MM20_PROT_CFG_PROTECT_NAV_SHORT FIELD32(0x00040000) +#define MM20_PROT_CFG_PROTECT_NAV_LONG FIELD32(0x00080000)#define MM20_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)#define MM20_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)#define MM20_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
@@ -1196,7 +1199,8 @@#define MM40_PROT_CFG 0x1370#define MM40_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)#define MM40_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000) -#define MM40_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000) +#define MM40_PROT_CFG_PROTECT_NAV_SHORT FIELD32(0x00040000) +#define MM40_PROT_CFG_PROTECT_NAV_LONG FIELD32(0x00080000)#define MM40_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)#define MM40_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)#define MM40_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
@@ -1211,7 +1215,8 @@#define GF20_PROT_CFG 0x1374#define GF20_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)#define GF20_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000) -#define GF20_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000) +#define GF20_PROT_CFG_PROTECT_NAV_SHORT FIELD32(0x00040000) +#define GF20_PROT_CFG_PROTECT_NAV_LONG FIELD32(0x00080000)#define GF20_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)#define GF20_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)#define GF20_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
@@ -1226,7 +1231,8 @@#define GF40_PROT_CFG 0x1378#define GF40_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)#define GF40_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000) -#define GF40_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000) +#define GF40_PROT_CFG_PROTECT_NAV_SHORT FIELD32(0x00040000) +#define GF40_PROT_CFG_PROTECT_NAV_LONG FIELD32(0x00080000)#define GF40_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)#define GF40_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)#define GF40_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
drivers/net/wireless/rt2x00/rt2800lib.c +6 -6
@@ -2185,7 +2185,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_read (rt2x00dev,CCK_PROT_CFG , ®);rt2x00_set_field32 (®,CCK_PROT_CFG_PROTECT_RATE ,3 );rt2x00_set_field32 (®,CCK_PROT_CFG_PROTECT_CTRL ,0 ); -rt2x00_set_field32 (®,CCK_PROT_CFG_PROTECT_NAV ,1 ); +rt2x00_set_field32 (®,CCK_PROT_CFG_PROTECT_NAV_SHORT ,1 );rt2x00_set_field32 (®,CCK_PROT_CFG_TX_OP_ALLOW_CCK ,1 );rt2x00_set_field32 (®,CCK_PROT_CFG_TX_OP_ALLOW_OFDM ,1 );rt2x00_set_field32 (®,CCK_PROT_CFG_TX_OP_ALLOW_MM20 ,1 );
@@ -2198,7 +2198,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_read (rt2x00dev,OFDM_PROT_CFG , ®);rt2x00_set_field32 (®,OFDM_PROT_CFG_PROTECT_RATE ,3 );rt2x00_set_field32 (®,OFDM_PROT_CFG_PROTECT_CTRL ,0 ); -rt2x00_set_field32 (®,OFDM_PROT_CFG_PROTECT_NAV ,1 ); +rt2x00_set_field32 (®,OFDM_PROT_CFG_PROTECT_NAV_SHORT ,1 );rt2x00_set_field32 (®,OFDM_PROT_CFG_TX_OP_ALLOW_CCK ,1 );rt2x00_set_field32 (®,OFDM_PROT_CFG_TX_OP_ALLOW_OFDM ,1 );rt2x00_set_field32 (®,OFDM_PROT_CFG_TX_OP_ALLOW_MM20 ,1 );
@@ -2211,7 +2211,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_read (rt2x00dev,MM20_PROT_CFG , ®);rt2x00_set_field32 (®,MM20_PROT_CFG_PROTECT_RATE ,0x4004 );rt2x00_set_field32 (®,MM20_PROT_CFG_PROTECT_CTRL ,0 ); -rt2x00_set_field32 (®,MM20_PROT_CFG_PROTECT_NAV ,1 ); +rt2x00_set_field32 (®,MM20_PROT_CFG_PROTECT_NAV_SHORT ,1 );rt2x00_set_field32 (®,MM20_PROT_CFG_TX_OP_ALLOW_CCK ,1 );rt2x00_set_field32 (®,MM20_PROT_CFG_TX_OP_ALLOW_OFDM ,1 );rt2x00_set_field32 (®,MM20_PROT_CFG_TX_OP_ALLOW_MM20 ,1 );
@@ -2224,7 +2224,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_read (rt2x00dev,MM40_PROT_CFG , ®);rt2x00_set_field32 (®,MM40_PROT_CFG_PROTECT_RATE ,0x4084 );rt2x00_set_field32 (®,MM40_PROT_CFG_PROTECT_CTRL ,0 ); -rt2x00_set_field32 (®,MM40_PROT_CFG_PROTECT_NAV ,1 ); +rt2x00_set_field32 (®,MM40_PROT_CFG_PROTECT_NAV_SHORT ,1 );rt2x00_set_field32 (®,MM40_PROT_CFG_TX_OP_ALLOW_CCK ,1 );rt2x00_set_field32 (®,MM40_PROT_CFG_TX_OP_ALLOW_OFDM ,1 );rt2x00_set_field32 (®,MM40_PROT_CFG_TX_OP_ALLOW_MM20 ,1 );
@@ -2237,7 +2237,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_read (rt2x00dev,GF20_PROT_CFG , ®);rt2x00_set_field32 (®,GF20_PROT_CFG_PROTECT_RATE ,0x4004 );rt2x00_set_field32 (®,GF20_PROT_CFG_PROTECT_CTRL ,0 ); -rt2x00_set_field32 (®,GF20_PROT_CFG_PROTECT_NAV ,1 ); +rt2x00_set_field32 (®,GF20_PROT_CFG_PROTECT_NAV_SHORT ,1 );rt2x00_set_field32 (®,GF20_PROT_CFG_TX_OP_ALLOW_CCK ,1 );rt2x00_set_field32 (®,GF20_PROT_CFG_TX_OP_ALLOW_OFDM ,1 );rt2x00_set_field32 (®,GF20_PROT_CFG_TX_OP_ALLOW_MM20 ,1 );
@@ -2250,7 +2250,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_read (rt2x00dev,GF40_PROT_CFG , ®);rt2x00_set_field32 (®,GF40_PROT_CFG_PROTECT_RATE ,0x4084 );rt2x00_set_field32 (®,GF40_PROT_CFG_PROTECT_CTRL ,0 ); -rt2x00_set_field32 (®,GF40_PROT_CFG_PROTECT_NAV ,1 ); +rt2x00_set_field32 (®,GF40_PROT_CFG_PROTECT_NAV_SHORT ,1 );rt2x00_set_field32 (®,GF40_PROT_CFG_TX_OP_ALLOW_CCK ,1 );rt2x00_set_field32 (®,GF40_PROT_CFG_TX_OP_ALLOW_OFDM ,1 );rt2x00_set_field32 (®,GF40_PROT_CFG_TX_OP_ALLOW_MM20 ,1 );
Signature · 1 line
1.7.2.3
PATCH 7/8 rt2x00: Add/Modify the GPIO register definition
From: Shiang Tu <[email protected]>
Revise/Add GPIO register related definitions
--- drivers/net/wireless/rt2x00/rt2800.h | 10 ++++++++-- drivers/net/wireless/rt2x00/rt2800lib.c | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-)
drivers/net/wireless/rt2x00/rt2800.h +8 -2
@@ -281,8 +281,14 @@#define GPIO_CTRL_CFG_BIT5 FIELD32(0x00000020)#define GPIO_CTRL_CFG_BIT6 FIELD32(0x00000040)#define GPIO_CTRL_CFG_BIT7 FIELD32(0x00000080) -#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00000100) -#define GPIO_CTRL_CFG_GPIOD FIELD32(0x00000800) +#define GPIO_CTRL_CFG_GPIOD_BIT0 FIELD32(0x00000100) +#define GPIO_CTRL_CFG_GPIOD_BIT1 FIELD32(0x00000200) +#define GPIO_CTRL_CFG_GPIOD_BIT2 FIELD32(0x00000400) +#define GPIO_CTRL_CFG_GPIOD_BIT3 FIELD32(0x00000800) +#define GPIO_CTRL_CFG_GPIOD_BIT4 FIELD32(0x00001000) +#define GPIO_CTRL_CFG_GPIOD_BIT5 FIELD32(0x00002000) +#define GPIO_CTRL_CFG_GPIOD_BIT6 FIELD32(0x00004000) +#define GPIO_CTRL_CFG_GPIOD_BIT7 FIELD32(0x00008000)/* * MCU_CMD_CFG
drivers/net/wireless/rt2x00/rt2800lib.c +1 -1
@@ -1384,7 +1384,7 @@ static void rt2800_set_ant_diversity(struct rt2x00_dev *rt2x00dev, eesk_pin, 0);rt2800_register_read (rt2x00dev,GPIO_CTRL_CFG , ®); -rt2x00_set_field32 (®,GPIO_CTRL_CFG_GPIOD ,0 ); +rt2x00_set_field32 (®,GPIO_CTRL_CFG_GPIOD_BIT3 ,0 );rt2x00_set_field32 (®,GPIO_CTRL_CFG_BIT3 , gpio_bit3);rt2800_register_write (rt2x00dev,GPIO_CTRL_CFG , reg); }
Signature · 1 line
1.7.2.3
PATCH 8/8 rt2x00: Add support for RT5390 chip
From: RA-Shiang Tu <[email protected]>
Add new RT5390 chip support
--- drivers/net/wireless/rt2x00/Kconfig | 12 + drivers/net/wireless/rt2x00/rt2800.h | 59 +++++- drivers/net/wireless/rt2x00/rt2800lib.c | 413 +++++++++++++++++++++++++++---- drivers/net/wireless/rt2x00/rt2800pci.c | 10 + drivers/net/wireless/rt2x00/rt2x00.h | 1 + 5 files changed, 440 insertions(+), 55 deletions(-)
drivers/net/wireless/rt2x00/Kconfig +12 -0
@@ -97,6 +97,18 @@ config RT2800PCI_RT35XX Support for these devices is non-functional at the moment and is intended for testers and developers. +config RT2800PCI_RT53XX + bool "rt2800-pci - Include support for rt53xx devices (EXPERIMENTAL)" + depends on EXPERIMENTAL + default n + ---help--- + This adds support for rt53xx wireless chipset family to the + rt2800pci driver. + Supported chips: RT5390 + + Support for these devices is non-functional at the moment and is + intended for testers and developers. + endif config RT2500USB
drivers/net/wireless/rt2x00/rt2800.h +58 -1
143 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2800lib.c +359 -54
570 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2800pci.c +10 -0
@@ -493,6 +493,13 @@ static int rt2800pci_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_write (rt2x00dev,PBF_SYS_CTRL ,0x00000e1f );rt2800_register_write (rt2x00dev,PBF_SYS_CTRL ,0x00000e00 ); +if (rt2x00_rt (rt2x00dev,RT5390 )) { +rt2800_register_read (rt2x00dev,AUX_CTRL , ®); +rt2x00_set_field32 (®,AUX_CTRL_FORCE_PCIE_CLK ,1 ); +rt2x00_set_field32 (®,AUX_CTRL_WAKE_PCIE_EN ,1 ); +rt2800_register_write (rt2x00dev,AUX_CTRL , reg); + } +rt2800_register_write (rt2x00dev,PWR_PIN_CFG ,0x00000003 );rt2800_register_read (rt2x00dev,MAC_SYS_CTRL , ®);
@@ -1125,6 +1132,9 @@ static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = { { PCI_DEVICE(0x1814, 0x3592), PCI_DEVICE_DATA(&rt2800pci_ops) }, { PCI_DEVICE(0x1814, 0x3593), PCI_DEVICE_DATA(&rt2800pci_ops) }, #endif +#ifdef CONFIG_RT2800PCI_RT53XX + { PCI_DEVICE(0x1814, 0x5390), PCI_DEVICE_DATA(&rt2800pci_ops) }, +#endif { 0, } }; #endif /* CONFIG_PCI */
drivers/net/wireless/rt2x00/rt2x00.h +1 -0
@@ -189,6 +189,7 @@ struct rt2x00_chip {#define RT3572 0x3572#define RT3593 0x3593/* PCIe */ #define RT3883 0x3883/* WSOC */ +#define RT5390 0x5390/* 2.4GHz */ u16 rf;u16 rev;
Signature · 1 line
1.7.2.3