| 
					
				 | 
			
			
				@@ -1,3348 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Contains the following changes from wireless-testing/master-2013-08-26: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 8951b79a4e6d8228babf56ae79a345e4abc5ac82 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 11:25:52 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: introduce rt2800_eeprom_word enum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 3e38d3daf881a78ac13e93504a8ac5777040797e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 11:25:53 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: introduce local EEPROM access functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 022138ca93f016374d5d3f69c070c75596c5ecac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 11:25:54 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: introduce rt2800_eeprom_read_from_array helper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 379448fe34e289fdcc473399d4f6cac19e757fb8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 11:25:55 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: introduce rt2800_eeprom_word_index helper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit fa31d157f83ef71b6530aacf0400bafe7816acbd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 11:25:56 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add EEPROM map for the RT3593 chipset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 1706d15d82f4a579119b419cd673987af60f1d9b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:16 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add MAC register initialization for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit b189a1814135bc52f516ca61a1fa161914d57a54 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:17 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add BBP register initialization for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit ab7078ac3d920e0d49b17e92f327f3ada25600e8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:18 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add RFCSR register initialization for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit d63f7e8ca560dc9a76a15c323cb9cba14b25f430 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:19 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add BBP post initialization for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 34542ff5a665061d548c3f860807df341f718adf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:20 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add TX power configuration for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 4788ac1e4842d8ef46ee620cfccf96c426043177 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:21 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: fix BBP1_TX_ANTENNA field configuration for 3T devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 5cddb3c2d5102d9a6b1b809e1518da54c8be8296 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:22 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: fix antenna configuration for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 97aa03f15e83174df74aa468eea127c5cee480f0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:23 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add rt2800_txpower_to_dev helper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit fc739cfe0f305647677edbf99a76d9ece96e3795 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:24 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: fix default TX power values for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit a3f1625dae58f06c5df1ec0094b275e9a46fd8b3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:25 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: introduce rt2800_get_txmixer_gain_{24,5}g helpers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 6316c786cc8aff762530ea740233bf2da10fea33 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:26 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: hardcode TX mixer gain values for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit f36bb0ca1be5bcb7148ad32263626f8609dfc0d7 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:27 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: fix LNA_A[12] gain values for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit c0a14369ebd3e7940e70e397ecc3dd7eaf81e9ab 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:28 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add default_power3 field for three-chain devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit c8b9d3dc83cab569de6054a10e355a143e2b52a0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:29 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add rf_vals for RF3053 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit f42b046578efb018064302fd9b66586f5da7d75b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:30 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add channel configuration for RF3053 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 1095df07bfc5924e100f1748e6ebc9e5a5881565 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:31 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: enable VCO recalibration for RF3053 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 0f5af26a49c8d6a50ecec2f1b66174069c9f9581 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:32 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: enable RF3053 support 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 2dc2bd2f8aa8eb79184fb3c7e5f530006500897f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:33 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: enable RT3593 support 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 65d3c0d5cffb9f1227927544e418a9ac231eae42 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:34 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800usb: use correct [RT]XWI size for RT3593 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit d02433d15566f542e42e3c469dfade0de332dc7b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Jul 8 16:08:35 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800usb: add USB device ID for Linksys AE3000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 637065267eab4817c0b06cbf3c7fc80842acab99 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Xose Vazquez Perez <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Tue Jul 23 14:55:15 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      wireless: rt2x00: rt2800usb: add RT3573 devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit ae1b1c5dcdef1ebd4b37a7d56ad767add757a660 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Fri Aug 16 10:23:29 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: introduce rt2800_get_txwi_rxwi_size helper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 41caa760d6acaf47cbd44c3d78307fb9be089111 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Fri Aug 16 10:23:30 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800pci: fix AUX_CTRL register setup for RT3090/3390/3593/5592 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 91a3fa39ddf2f85a15cb20ccc3a54c1f0497af1e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 00:15:49 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800: rename HW_BEACON_OFFSET macro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 77f7c0f3b8f2d464e841c5c35f3da8b4999a885c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 00:15:50 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: pass beacon index to rt2800_clear_beacon_register 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit c1fada4e5e53d88a8edd3ff01cee9d316cbf6025 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 14:09:28 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: fix frequency offset boundary calculation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 6af1bdccabe956a08a37f2ae049d37307ec0c91c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 14:09:29 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: optimize frequency offset adjustment 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 76773f301f2210dcc20c466aebda7118062673eb 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 14:09:30 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: use a MCU command for frequency adjustment on USB devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 8d38eca8e089179b6858ca5f3ea03f571a5892a5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 14:09:31 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: use step-by-step frequency offset adjustment on MMIO devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 3f1b8739a498c7570ca2fae6c49fd1561ef2358c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 14:09:32 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: move rt2800_adjust_freq_offset function 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit e979a8ab204edbf7b0815162109ee9c85e4d7ea5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Sat Aug 17 14:09:33 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: adjust frequency offset for RF3053 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 21c6af6b69b609b7934caaccda1b4535dceb402c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Thu Aug 22 20:53:21 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: add rt2800_hw_beacon_base helper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 634b80595fef79071d82bc231b7f82c4f808a1e8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Gabor Juhos <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Thu Aug 22 20:53:22 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2x00: rt2800lib: don't hardcode beacon offsets 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  commit 6e956da2027c767859128b9bfef085cf2a8e233b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Author: Stanislaw Gruszka <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Date:   Mon Aug 26 15:18:53 2013 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rt2800: fix wrong TX power compensation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/Kconfig 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/Kconfig 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -174,6 +174,12 @@ config RT2800USB_RT35XX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	  rt2800usb driver. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	  Supported chips: RT3572 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+config RT2800USB_RT3573 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	bool "rt2800usb - Include support for rt3573 devices (EXPERIMENTAL)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	---help--- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	  This enables support for RT3573 chipset based wireless USB devices 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	  in the rt2800usb driver. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- config RT2800USB_RT53XX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        bool "rt2800usb - Include support for rt53xx devices (EXPERIMENTAL)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ---help--- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/rt2800.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/rt2800.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -88,6 +88,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define REV_RT3071E			0x0211 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define REV_RT3090E			0x0211 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define REV_RT3390E			0x0211 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define REV_RT3593E			0x0211 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define REV_RT5390F			0x0502 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define REV_RT5390R			0x1502 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define REV_RT5592C			0x0221 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1082,6 +1083,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_0_9MBS		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_0_12MBS		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_0_18MBS		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for 3T devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_CCK1_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_CCK1_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_CCK5_CH0		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_CCK5_CH1		FIELD32(0x0000f000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_OFDM6_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_OFDM6_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_OFDM12_CH0		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_OFDM12_CH1		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TX_PWR_CFG_1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1095,6 +1105,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_1_MCS1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_1_MCS2		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_1_MCS3		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for 3T devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_OFDM24_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_OFDM24_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_OFDM48_CH0		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_OFDM48_CH1		FIELD32(0x0000f000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_MCS0_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_MCS0_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_MCS2_CH0		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_MCS2_CH1		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TX_PWR_CFG_2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1108,6 +1127,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_2_MCS9		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_2_MCS10		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_2_MCS11		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for 3T devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS4_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS4_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS6_CH0		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS6_CH1		FIELD32(0x0000f000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS8_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS8_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS10_CH0		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_MCS10_CH1		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TX_PWR_CFG_3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1121,6 +1149,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_3_UKNOWN2		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_3_UKNOWN3		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_3_UKNOWN4		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for 3T devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_MCS12_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_MCS12_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_MCS14_CH0		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_MCS14_CH1		FIELD32(0x0000f000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC0_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC0_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC2_CH0		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC2_CH1		FIELD32(0xf0000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TX_PWR_CFG_4: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1130,6 +1167,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_4_UKNOWN6		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_4_UKNOWN7		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TX_PWR_CFG_4_UKNOWN8		FIELD32(0x0000f000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for 3T devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC4_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC4_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC6_CH0		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_STBC6_CH1		FIELD32(0x0000f000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TX_PIN_CFG: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1451,6 +1493,81 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EXP_ACK_TIME			0x1380 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5			0x1384 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5_MCS16_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5_MCS16_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5_MCS16_CH2		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5_MCS18_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5_MCS18_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_5_MCS18_CH2		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6			0x1388 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6_MCS20_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6_MCS20_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6_MCS20_CH2		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6_MCS22_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6_MCS22_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_6_MCS22_CH2		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_0_EXT */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_EXT		0x1390 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_EXT_CCK1_CH2	FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_EXT_CCK5_CH2	FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_EXT_OFDM6_CH2	FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_0_EXT_OFDM12_CH2	FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_1_EXT */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_EXT		0x1394 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_EXT_OFDM24_CH2	FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_EXT_OFDM48_CH2	FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_EXT_MCS0_CH2	FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_1_EXT_MCS2_CH2	FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_2_EXT */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_EXT		0x1398 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_EXT_MCS4_CH2	FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_EXT_MCS6_CH2	FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_EXT_MCS8_CH2	FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_2_EXT_MCS10_CH2	FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_3_EXT */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_EXT		0x139c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_EXT_MCS12_CH2	FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_EXT_MCS14_CH2	FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_EXT_STBC0_CH2	FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_3_EXT_STBC2_CH2	FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_4_EXT */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_4_EXT		0x13a0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_4_EXT_STBC4_CH2	FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_4_EXT_STBC6_CH2	FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_7 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7			0x13d4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7_OFDM54_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7_OFDM54_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7_OFDM54_CH2		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7_MCS7_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7_MCS7_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_7_MCS7_CH2		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_8 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8			0x13d8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8_MCS15_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8_MCS15_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8_MCS15_CH2		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8_MCS23_CH0		FIELD32(0x000f0000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8_MCS23_CH1		FIELD32(0x00f00000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_8_MCS23_CH2		FIELD32(0x0f000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TX_PWR_CFG_9 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_9			0x13dc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_9_STBC7_CH0		FIELD32(0x0000000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_9_STBC7_CH1		FIELD32(0x000000f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define TX_PWR_CFG_9_STBC7_CH2		FIELD32(0x00000f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RX_FILTER_CFG: RX configuration register. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1902,11 +2019,13 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define HW_BEACON_BASE6			0x5dc0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define HW_BEACON_BASE7			0x5bc0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define HW_BEACON_OFFSET(__index) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define HW_BEACON_BASE(__index) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	(((__index) < 4) ? (HW_BEACON_BASE0 + (__index * 0x0200)) : \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	  (((__index) < 6) ? (HW_BEACON_BASE4 + ((__index - 4) * 0x0200)) : \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	  (HW_BEACON_BASE6 - ((__index - 6) * 0x0200)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define BEACON_BASE_TO_OFFSET(_base)	(((_base) - 0x4000) / 64) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * BBP registers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * The wordsize of the BBP is 8 bits. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1975,6 +2094,10 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define BBP109_TX0_POWER		FIELD8(0x0f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define BBP109_TX1_POWER		FIELD8(0xf0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* BBP 110 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define BBP110_TX2_POWER		FIELD8(0x0f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * BBP 138: Unknown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2024,6 +2147,12 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR3_PA2_CASCODE_BIAS_CCKK	FIELD8(0x80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* Bits for RF3290/RF5360/RF5370/RF5372/RF5390/RF5392 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR3_VCOCAL_EN		FIELD8(0x80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* Bits for RF3050 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR3_BIT1			FIELD8(0x02) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR3_BIT2			FIELD8(0x04) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR3_BIT3			FIELD8(0x08) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR3_BIT4			FIELD8(0x10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR3_BIT5			FIELD8(0x20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * FRCSR 5: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2036,6 +2165,8 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR6_R1			FIELD8(0x03) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR6_R2			FIELD8(0x40) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR6_TXDIV		FIELD8(0x0c) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for RF3053 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR6_VCO_IC			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 7: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2060,7 +2191,12 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 11: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR11_R			FIELD8(0x03) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR11_PLL_MOD			FIELD8(0x0c) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR11_MOD			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for RF3053 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* TODO: verify RFCSR11_MOD usage on other chips */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR11_PLL_IDOH		FIELD8(0x40) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 12: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2092,6 +2228,10 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR17_R			FIELD8(0x20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR17_CODE                   FIELD8(0x7f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* RFCSR 18 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR18_XO_TUNE_BYPASS		FIELD8(0x40) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 20: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2152,6 +2292,12 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR31_RX_H20M			FIELD8(0x20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR31_RX_CALIB		FIELD8(0x7f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* RFCSR 32 bits for RF3053 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR32_TX_AGC_FC		FIELD8(0xf8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* RFCSR 36 bits for RF3053 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR36_RF_BS			FIELD8(0x80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 38: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2160,6 +2306,7 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 39: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR39_RX_DIV			FIELD8(0x40) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR39_RX_LO2_EN		FIELD8(0x80) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2167,12 +2314,36 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR49_TX			FIELD8(0x3f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR49_EP			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for RT3593 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR49_TX_LO1_IC		FIELD8(0x1c) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR49_TX_DIV			FIELD8(0x20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RFCSR 50: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR50_TX			FIELD8(0x3f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RFCSR50_EP			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for RT3593 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR50_TX_LO1_EN		FIELD8(0x20) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR50_TX_LO2_EN		FIELD8(0x10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* RFCSR 51 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* bits for RT3593 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR51_BITS01			FIELD8(0x03) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR51_BITS24			FIELD8(0x1c) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR51_BITS57			FIELD8(0xe0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR53_TX_POWER		FIELD8(0x3f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR53_UNKNOWN			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR54_TX_POWER		FIELD8(0x3f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR54_UNKNOWN			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR55_TX_POWER		FIELD8(0x3f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR55_UNKNOWN			FIELD8(0xc0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RFCSR57_DRV_CC			FIELD8(0xfc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RF registers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2206,28 +2377,67 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * The wordsize of the EEPROM is 16 bits. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- * Chip ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_CHIP_ID			0x0000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+enum rt2800_eeprom_word { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_CHIP_ID = 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_VERSION, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_MAC_ADDR_0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_MAC_ADDR_1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_MAC_ADDR_2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_NIC_CONF0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_NIC_CONF1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_FREQ, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_LED_AG_CONF, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_LED_ACT_CONF, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_LED_POLARITY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_NIC_CONF2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_LNA, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_RSSI_BG, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_RSSI_BG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXMIXER_GAIN_BG, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_RSSI_A, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_RSSI_A2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXMIXER_GAIN_A, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_EIRP_MAX_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXPOWER_DELTA, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXPOWER_BG1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXPOWER_BG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_BG1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_BG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_BG3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_BG4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_BG5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXPOWER_A1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXPOWER_A2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_A1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_A2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_A3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_A4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TSSI_BOUND_A5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_BBP_START, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* IDs for extended EEPROM format used by three-chain devices */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_EXT_LNA2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_EXT_TXPOWER_BG3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_EXT_TXPOWER_A3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* New values must be added before this */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	EEPROM_WORD_COUNT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM Version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_VERSION			0x0001 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_VERSION_FAE		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_VERSION_VERSION		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * HW MAC address. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_MAC_ADDR_0		0x0002 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_MAC_ADDR_BYTE0		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_MAC_ADDR_BYTE1		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_MAC_ADDR_1		0x0003 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_MAC_ADDR_BYTE2		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_MAC_ADDR_BYTE3		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_MAC_ADDR_2		0x0004 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_MAC_ADDR_BYTE4		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_MAC_ADDR_BYTE5		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2237,7 +2447,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TXPATH: 1: 1T, 2: 2T, 3: 3T 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * RF_TYPE: RFIC type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define	EEPROM_NIC_CONF0		0x001a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF0_RXPATH		FIELD16(0x000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF0_TXPATH		FIELD16(0x00f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF0_RF_TYPE		FIELD16(0x0f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2261,7 +2470,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * BT_COEXIST: 0: disable, 1: enable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * DAC_TEST: 0: disable, 1: enable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define	EEPROM_NIC_CONF1		0x001b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF1_HW_RADIO		FIELD16(0x0001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF1_EXTERNAL_TX_ALC		FIELD16(0x0002) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF1_EXTERNAL_LNA_2G		FIELD16(0x0004) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2281,7 +2489,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM frequency 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define	EEPROM_FREQ			0x001d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_FREQ_OFFSET		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_FREQ_LED_MODE		FIELD16(0x7f00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_FREQ_LED_POLARITY	FIELD16(0x1000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2298,9 +2505,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * POLARITY_GPIO_4: Polarity GPIO4 setting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * LED_MODE: Led mode. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_LED_AG_CONF		0x001e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_LED_ACT_CONF		0x001f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_LED_POLARITY		0x0020 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_LED_POLARITY_RDY_BG	FIELD16(0x0001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_LED_POLARITY_RDY_A	FIELD16(0x0002) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_LED_POLARITY_ACT		FIELD16(0x0004) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2317,7 +2521,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TX_STREAM: 0: Reserved, 1: 1 Stream, 2: 2 Stream 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * CRYSTAL: 00: Reserved, 01: One crystal, 10: Two crystal, 11: Reserved 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_NIC_CONF2		0x0021 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF2_RX_STREAM		FIELD16(0x000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF2_TX_STREAM		FIELD16(0x00f0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_NIC_CONF2_CRYSTAL		FIELD16(0x0600) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2325,54 +2528,46 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM LNA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_LNA			0x0022 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_LNA_BG			FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_LNA_A0			FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM RSSI BG offset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_RSSI_BG			0x0023 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_BG_OFFSET0		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_BG_OFFSET1		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM RSSI BG2 offset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_RSSI_BG2			0x0024 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_BG2_OFFSET2		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_BG2_LNA_A1		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM TXMIXER GAIN BG offset (note overlaps with EEPROM RSSI BG2). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TXMIXER_GAIN_BG		0x0024 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXMIXER_GAIN_BG_VAL	FIELD16(0x0007) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM RSSI A offset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_RSSI_A			0x0025 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_A_OFFSET0		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_A_OFFSET1		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM RSSI A2 offset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_RSSI_A2			0x0026 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_A2_OFFSET2		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_RSSI_A2_LNA_A2		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM TXMIXER GAIN A offset (note overlaps with EEPROM RSSI A2). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TXMIXER_GAIN_A		0x0026 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXMIXER_GAIN_A_VAL	FIELD16(0x0007) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM EIRP Maximum TX power values(unit: dbm) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2383,7 +2578,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * TYPE: 1: Plus the delta value, 0: minus the delta value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * ENABLE: enable tx power compensation for 40BW 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TXPOWER_DELTA		0x0028 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_DELTA_VALUE_2G	FIELD16(0x003f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_DELTA_TYPE_2G	FIELD16(0x0040) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_DELTA_ENABLE_2G	FIELD16(0x0080) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2394,8 +2588,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM TXPOWER 802.11BG 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define	EEPROM_TXPOWER_BG1		0x0029 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define	EEPROM_TXPOWER_BG2		0x0030 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_BG_SIZE		7 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_BG_1		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_BG_2		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2407,7 +2599,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * MINUS3: If the actual TSSI is below this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *         reduced by (agc_step * -3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_BG1		0x0037 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG1_MINUS4	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG1_MINUS3	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2418,7 +2609,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * MINUS1: If the actual TSSI is below this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *         reduced by (agc_step * -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_BG2		0x0038 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG2_MINUS2	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG2_MINUS1	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2428,7 +2618,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * PLUS1: If the actual TSSI is above this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *        increased by (agc_step * 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_BG3		0x0039 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG3_REF	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG3_PLUS1	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2439,7 +2628,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * PLUS3: If the actual TSSI is above this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *        increased by (agc_step * 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_BG4		0x003a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG4_PLUS2	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG4_PLUS3	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2449,19 +2637,20 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *        increased by (agc_step * 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * AGC_STEP: Temperature compensation step. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_BG5		0x003b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG5_PLUS4	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_BG5_AGC_STEP	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM TXPOWER 802.11A 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TXPOWER_A1		0x003c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TXPOWER_A2		0x0053 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_A_SIZE		6 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_A_1		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_A_2		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* EEPROM_TXPOWER_{A,G} fields for RT3593 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define EEPROM_TXPOWER_ALC		FIELD8(0x1f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define EEPROM_TXPOWER_FINE_CTRL	FIELD8(0xe0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM temperature compensation boundaries 802.11A 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * MINUS4: If the actual TSSI is below this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2469,7 +2658,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * MINUS3: If the actual TSSI is below this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *         reduced by (agc_step * -3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_A1		0x006a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A1_MINUS4	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A1_MINUS3	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2480,7 +2668,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * MINUS1: If the actual TSSI is below this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *         reduced by (agc_step * -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_A2		0x006b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A2_MINUS2	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A2_MINUS1	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2490,7 +2677,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * PLUS1: If the actual TSSI is above this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *        increased by (agc_step * 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_A3		0x006c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A3_REF	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A3_PLUS1	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2501,7 +2687,6 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * PLUS3: If the actual TSSI is above this boundary, tx power needs to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *        increased by (agc_step * 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_A4		0x006d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A4_PLUS2	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A4_PLUS3	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2511,14 +2696,12 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *        increased by (agc_step * 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * AGC_STEP: Temperature compensation step. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TSSI_BOUND_A5		0x006e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A5_PLUS4	FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TSSI_BOUND_A5_AGC_STEP	FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM TXPOWER by rate: tx power per tx rate for HT20 mode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define EEPROM_TXPOWER_BYRATE		0x006f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_BYRATE_SIZE	9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_TXPOWER_BYRATE_RATE0	FIELD16(0x000f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2529,11 +2712,14 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM BBP. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define	EEPROM_BBP_START		0x0078 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_BBP_SIZE			16 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_BBP_VALUE		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define EEPROM_BBP_REG_ID		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+/* EEPROM_EXT_LNA2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define EEPROM_EXT_LNA2_A1		FIELD16(0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define EEPROM_EXT_LNA2_A2		FIELD16(0xff00) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM IQ Calibration, unlike other entries those are byte addresses. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2610,6 +2796,7 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MCU_RADAR			0x60 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MCU_BOOT_SIGNAL			0x72 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MCU_ANT_SELECT			0X73 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define MCU_FREQ_OFFSET			0x74 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MCU_BBP_SIGNAL			0x80 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MCU_POWER_SAVE			0x83 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MCU_BAND_SELECT		0x91 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2630,6 +2817,7 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TXWI_DESC_SIZE_5WORDS		(5 * sizeof(__le32)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RXWI_DESC_SIZE_4WORDS		(4 * sizeof(__le32)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define RXWI_DESC_SIZE_5WORDS		(5 * sizeof(__le32)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define RXWI_DESC_SIZE_6WORDS		(6 * sizeof(__le32)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2750,18 +2938,15 @@ struct mac_iveiv_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define MAX_A_TXPOWER	15 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define DEFAULT_TXPOWER	5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define MIN_A_TXPOWER_3593	0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define MAX_A_TXPOWER_3593	31 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TXPOWER_G_FROM_DEV(__txpower) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	((__txpower) > MAX_G_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define TXPOWER_G_TO_DEV(__txpower) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	clamp_t(char, __txpower, MIN_G_TXPOWER, MAX_G_TXPOWER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #define TXPOWER_A_FROM_DEV(__txpower) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	((__txpower) > MAX_A_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define TXPOWER_A_TO_DEV(__txpower) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	clamp_t(char, __txpower, MIN_A_TXPOWER, MAX_A_TXPOWER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  *  Board's maximun TX power limitation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/rt2800lib.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/rt2800lib.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -221,6 +221,157 @@ static void rt2800_rf_write(struct rt2x0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	mutex_unlock(&rt2x00dev->csr_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_CHIP_ID]		= 0x0000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_VERSION]		= 0x0001, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_MAC_ADDR_0]		= 0x0002, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_MAC_ADDR_1]		= 0x0003, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_MAC_ADDR_2]		= 0x0004, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_NIC_CONF0]		= 0x001a, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_NIC_CONF1]		= 0x001b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_FREQ]			= 0x001d, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LED_AG_CONF]		= 0x001e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LED_ACT_CONF]		= 0x001f, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LED_POLARITY]		= 0x0020, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_NIC_CONF2]		= 0x0021, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LNA]			= 0x0022, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_BG]		= 0x0023, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_BG2]		= 0x0024, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXMIXER_GAIN_BG]	= 0x0024, /* overlaps with RSSI_BG2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_A]			= 0x0025, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_A2]		= 0x0026, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXMIXER_GAIN_A]		= 0x0026, /* overlaps with RSSI_A2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_EIRP_MAX_TX_POWER]	= 0x0027, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_DELTA]		= 0x0028, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_BG1]		= 0x0029, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_BG2]		= 0x0030, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG1]		= 0x0037, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG2]		= 0x0038, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG3]		= 0x0039, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG4]		= 0x003a, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG5]		= 0x003b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_A1]		= 0x003c, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_A2]		= 0x0053, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A1]		= 0x006a, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A2]		= 0x006b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A3]		= 0x006c, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A4]		= 0x006d, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A5]		= 0x006e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_BYRATE]		= 0x006f, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_BBP_START]		= 0x0078, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static const unsigned int rt2800_eeprom_map_ext[EEPROM_WORD_COUNT] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_CHIP_ID]		= 0x0000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_VERSION]		= 0x0001, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_MAC_ADDR_0]		= 0x0002, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_MAC_ADDR_1]		= 0x0003, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_MAC_ADDR_2]		= 0x0004, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_NIC_CONF0]		= 0x001a, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_NIC_CONF1]		= 0x001b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_NIC_CONF2]		= 0x001c, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_EIRP_MAX_TX_POWER]	= 0x0020, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_FREQ]			= 0x0022, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LED_AG_CONF]		= 0x0023, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LED_ACT_CONF]		= 0x0024, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LED_POLARITY]		= 0x0025, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_LNA]			= 0x0026, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_EXT_LNA2]		= 0x0027, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_BG]		= 0x0028, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_DELTA]		= 0x0028, /* Overlaps with RSSI_BG */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_BG2]		= 0x0029, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXMIXER_GAIN_BG]	= 0x0029, /* Overlaps with RSSI_BG2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_A]			= 0x002a, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_RSSI_A2]		= 0x002b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXMIXER_GAIN_A]		= 0x002b, /* Overlaps with RSSI_A2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_BG1]		= 0x0030, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_BG2]		= 0x0037, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_EXT_TXPOWER_BG3]	= 0x003e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG1]		= 0x0045, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG2]		= 0x0046, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG3]		= 0x0047, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG4]		= 0x0048, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_BG5]		= 0x0049, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_A1]		= 0x004b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_A2]		= 0x0065, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_EXT_TXPOWER_A3]		= 0x007f, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A1]		= 0x009a, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A2]		= 0x009b, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A3]		= 0x009c, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A4]		= 0x009d, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TSSI_BOUND_A5]		= 0x009e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	[EEPROM_TXPOWER_BYRATE]		= 0x00a0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					     const enum rt2800_eeprom_word word) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	const unsigned int *map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (WARN_ONCE(word >= EEPROM_WORD_COUNT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		      "%s: invalid EEPROM word %d\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		      wiphy_name(rt2x00dev->hw->wiphy), word)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		map = rt2800_eeprom_map_ext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		map = rt2800_eeprom_map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	index = map[word]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Index 0 is valid only for EEPROM_CHIP_ID. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * Otherwise it means that the offset of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * given word is not initialized in the map, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * or that the field is not usable on the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * actual chipset. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	WARN_ONCE(word != EEPROM_CHIP_ID && index == 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		  "%s: invalid access of EEPROM word %d\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		  wiphy_name(rt2x00dev->hw->wiphy), word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	return index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void *rt2800_eeprom_addr(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				const enum rt2800_eeprom_word word) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	index = rt2800_eeprom_word_index(rt2x00dev, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	return rt2x00_eeprom_addr(rt2x00dev, index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_eeprom_read(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			       const enum rt2800_eeprom_word word, u16 *data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	index = rt2800_eeprom_word_index(rt2x00dev, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_eeprom_read(rt2x00dev, index, data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				const enum rt2800_eeprom_word word, u16 data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	index = rt2800_eeprom_word_index(rt2x00dev, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_eeprom_write(rt2x00dev, index, data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					  const enum rt2800_eeprom_word array, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					  unsigned int offset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					  u16 *data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	index = rt2800_eeprom_word_index(rt2x00dev, array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_eeprom_read(rt2x00dev, index + offset, data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u32 reg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -370,6 +521,29 @@ void rt2800_disable_wpdma(struct rt2x00_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- EXPORT_SYMBOL_GPL(rt2800_disable_wpdma); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+void rt2800_get_txwi_rxwi_size(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			       unsigned short *txwi_size, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			       unsigned short *rxwi_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	switch (rt2x00dev->chip.rt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RT3593: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		*txwi_size = TXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		*rxwi_size = RXWI_DESC_SIZE_5WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RT5592: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		*txwi_size = TXWI_DESC_SIZE_5WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		*rxwi_size = RXWI_DESC_SIZE_6WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		*txwi_size = TXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		*rxwi_size = RXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+EXPORT_SYMBOL_GPL(rt2800_get_txwi_rxwi_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static bool rt2800_check_firmware_crc(const u8 *data, const size_t len) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u16 fw_crc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -609,16 +783,16 @@ static int rt2800_agc_to_rssi(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 offset2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_OFFSET2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_OFFSET2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -766,6 +940,18 @@ void rt2800_txdone_entry(struct queue_en 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- EXPORT_SYMBOL_GPL(rt2800_txdone_entry); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static unsigned int rt2800_hw_beacon_base(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					  unsigned int index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	return HW_BEACON_BASE(index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static inline u8 rt2800_get_beacon_offset(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					  unsigned int index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	return BEACON_BASE_TO_OFFSET(rt2800_hw_beacon_base(rt2x00dev, index)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -818,7 +1004,8 @@ void rt2800_write_beacon(struct queue_en 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	beacon_base = HW_BEACON_OFFSET(entry->entry_idx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	beacon_base = rt2800_hw_beacon_base(rt2x00dev, entry->entry_idx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_register_multiwrite(rt2x00dev, beacon_base, entry->skb->data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				   entry->skb->len + padding_len); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -837,10 +1024,13 @@ void rt2800_write_beacon(struct queue_en 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- EXPORT_SYMBOL_GPL(rt2800_write_beacon); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static inline void rt2800_clear_beacon_register(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--						unsigned int beacon_base) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						unsigned int index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	const int txwi_desc_size = rt2x00dev->bcn->winfo_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int beacon_base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	beacon_base = rt2800_hw_beacon_base(rt2x00dev, index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * For the Beacon base registers we only need to clear 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -867,8 +1057,7 @@ void rt2800_clear_beacon(struct queue_en 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Clear beacon. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				     HW_BEACON_OFFSET(entry->entry_idx)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_clear_beacon_register(rt2x00dev, entry->entry_idx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Enabled beaconing again. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -890,6 +1079,9 @@ const struct rt2x00debug rt2800_rt2x00de 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		.word_count	= CSR_REG_SIZE / sizeof(u32), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	.eeprom	= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* NOTE: The local EEPROM access functions can't 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		 * be used here, use the generic versions instead. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		.read		= rt2x00_eeprom_read, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		.write		= rt2x00_eeprom_write, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		.word_base	= EEPROM_BASE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1547,7 +1739,7 @@ static void rt2800_config_3572bt_ant(str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	led_r_mode = rt2x00_get_field32(reg, LED_CFG_LED_POLAR) ? 0 : 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (led_g_mode != rt2x00_get_field32(reg, LED_CFG_G_LED_MODE) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	    led_r_mode != rt2x00_get_field32(reg, LED_CFG_R_LED_MODE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		led_ctrl = rt2x00_get_field16(eeprom, EEPROM_FREQ_LED_MODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (led_ctrl == 0 || led_ctrl > 0x40) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2x00_set_field32(®, LED_CFG_G_LED_MODE, led_g_mode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1609,7 +1801,7 @@ void rt2800_config_ant(struct rt2x00_dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case 3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1622,7 +1814,7 @@ void rt2800_config_ant(struct rt2x00_dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		    rt2x00_rt(rt2x00dev, RT3090) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		    rt2x00_rt(rt2x00dev, RT3352) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		    rt2x00_rt(rt2x00dev, RT3390)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			rt2x00_eeprom_read(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					   EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			if (rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 						EEPROM_NIC_CONF1_ANT_DIVERSITY)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1649,6 +1841,13 @@ void rt2800_config_ant(struct rt2x00_dev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp_write(rt2x00dev, 3, r3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp_write(rt2x00dev, 1, r1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (ant->rx_chain_num == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 86, 0x00); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 86, 0x46); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- EXPORT_SYMBOL_GPL(rt2800_config_ant); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1659,22 +1858,73 @@ static void rt2800_config_lna_gain(struc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	short lna_gain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (libconf->rf.channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_BG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else if (libconf->rf.channel <= 64) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else if (libconf->rf.channel <= 128) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_LNA_A1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			lna_gain = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						      EEPROM_EXT_LNA2_A1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			lna_gain = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						      EEPROM_RSSI_BG2_LNA_A1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_LNA_A2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			lna_gain = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						      EEPROM_EXT_LNA2_A2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			lna_gain = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						      EEPROM_RSSI_A2_LNA_A2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2x00dev->lna_gain = lna_gain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define FREQ_OFFSET_BOUND	0x5f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_adjust_freq_offset(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 freq_offset, prev_freq_offset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 rfcsr, prev_rfcsr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	freq_offset = rt2x00_get_field8(rt2x00dev->freq_offset, RFCSR17_CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	freq_offset = min_t(u8, freq_offset, FREQ_OFFSET_BOUND); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	prev_rfcsr = rfcsr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR17_CODE, freq_offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rfcsr == prev_rfcsr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_is_usb(rt2x00dev)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_mcu_request(rt2x00dev, MCU_FREQ_OFFSET, 0xff, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				   freq_offset, prev_rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	prev_freq_offset = rt2x00_get_field8(prev_rfcsr, RFCSR17_CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	while (prev_freq_offset != freq_offset) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (prev_freq_offset < freq_offset) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			prev_freq_offset++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			prev_freq_offset--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR17_CODE, prev_freq_offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 17, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		usleep_range(1000, 1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800_config_channel_rf2xxx(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					 struct ieee80211_conf *conf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					 struct rf_channel *rf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1993,22 +2243,306 @@ static void rt2800_config_channel_rf3052 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_rfcsr_write(rt2x00dev, 7, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define POWER_BOUND		0x27 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define POWER_BOUND_5G		0x2b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--#define FREQ_OFFSET_BOUND	0x5f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--static void rt2800_adjust_freq_offset(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_config_channel_rf3053(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 struct ieee80211_conf *conf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 struct rf_channel *rf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 struct channel_info *info) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 txrx_agc_fc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 txrx_h20m; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 rfcsr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 bbp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	const bool txbf_enabled = false; /* TODO */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (rt2x00dev->freq_offset > FREQ_OFFSET_BOUND) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_set_field8(&rfcsr, RFCSR17_CODE, FREQ_OFFSET_BOUND); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* TODO: use TX{0,1,2}FinePowerControl values from EEPROM */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_read(rt2x00dev, 109, &bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&bbp, BBP109_TX0_POWER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&bbp, BBP109_TX1_POWER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 109, bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_read(rt2x00dev, 110, &bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&bbp, BBP110_TX2_POWER, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 110, bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* Restore BBP 25 & 26 for 2.4 GHz */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 25, drv_data->bbp25); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 26, drv_data->bbp26); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* Hard code BBP 25 & 26 for 5GHz */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* Enable IQ Phase correction */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 25, 0x09); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* Setup IQ Phase correction value */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 26, 0xff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 8, rf->rf1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 9, rf->rf3 & 0xf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 11, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR11_R, (rf->rf2 & 0x3)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 11, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 11, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR11_PLL_IDOH, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR11_PLL_MOD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_set_field8(&rfcsr, RFCSR17_CODE, rt2x00dev->freq_offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_rfcsr_write(rt2x00dev, 17, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR11_PLL_MOD, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 11, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 53, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR53_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  info->default_power1 & 0x1f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_is_usb(rt2x00dev)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rfcsr = 0x40; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR53_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  ((info->default_power1 & 0x18) << 1) | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  (info->default_power1 & 7)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 53, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 55, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR55_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  info->default_power2 & 0x1f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_is_usb(rt2x00dev)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rfcsr = 0x40; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR55_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  ((info->default_power2 & 0x18) << 1) | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  (info->default_power2 & 7)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 55, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 54, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR54_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  info->default_power3 & 0x1f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_is_usb(rt2x00dev)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rfcsr = 0x40; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR54_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  ((info->default_power3 & 0x18) << 1) | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  (info->default_power3 & 7)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 54, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_PLL_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	switch (rt2x00dev->default_ant.tx_chain_num) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case 3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR1_TX2_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* fallthrough */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* fallthrough */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	switch (rt2x00dev->default_ant.rx_chain_num) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case 3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* fallthrough */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* fallthrough */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 1, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_adjust_freq_offset(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (conf_is_ht40(conf)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		txrx_agc_fc = rt2x00_get_field8(drv_data->calibration_bw40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						RFCSR24_TX_AGC_FC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		txrx_h20m = rt2x00_get_field8(drv_data->calibration_bw40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      RFCSR24_TX_H20M); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		txrx_agc_fc = rt2x00_get_field8(drv_data->calibration_bw20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						RFCSR24_TX_AGC_FC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		txrx_h20m = rt2x00_get_field8(drv_data->calibration_bw20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      RFCSR24_TX_H20M); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* NOTE: the reference driver does not writes the new value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * back to RFCSR 32 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 32, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR32_TX_AGC_FC, txrx_agc_fc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0xa0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x80; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 31, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR30_TX_H20M, txrx_h20m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR30_RX_H20M, txrx_h20m); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 30, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Band selection */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 36, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR36_RF_BS, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR36_RF_BS, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 36, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 34, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x3c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x20; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 34, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 12, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x1a; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x12; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 12, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 6, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel >= 1 && rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else if (rf->channel >= 36 && rf->channel <= 64) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else if (rf->channel >= 100 && rf->channel <= 128) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR6_VCO_IC, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 6, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR30_RX_VCM, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 30, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 46, 0x60); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 10, 0xd3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 13, 0x12); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 10, 0xd8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 13, 0x23); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 51, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR51_BITS01, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 51, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 51, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR51_BITS24, 5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR51_BITS57, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR51_BITS24, 4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR51_BITS57, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 51, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 49, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR49_TX_LO1_IC, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR49_TX_LO1_IC, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (txbf_enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR49_TX_DIV, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 49, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 50, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR50_TX_LO1_EN, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 50, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 57, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR57_DRV_CC, 0x1b); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR57_DRV_CC, 0x0f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 57, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 44, 0x93); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 52, 0x45); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 44, 0x9b); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 52, 0x05); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Initiate VCO calibration */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 3, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_BIT1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_BIT2, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_BIT3, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_BIT4, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_BIT5, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 3, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rf->channel >= 1 && rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x23; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (txbf_enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field8(&rfcsr, RFCSR39_RX_DIV, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 39, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 45, 0xbb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else if (rf->channel >= 36 && rf->channel <= 64) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x36; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (txbf_enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field8(&rfcsr, RFCSR39_RX_DIV, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 39, 0x36); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 45, 0xeb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else if (rf->channel >= 100 && rf->channel <= 128) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x32; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (txbf_enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field8(&rfcsr, RFCSR39_RX_DIV, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 39, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 45, 0xb3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rfcsr = 0x30; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (txbf_enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field8(&rfcsr, RFCSR39_RX_DIV, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 39, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_rfcsr_write(rt2x00dev, 45, 0x9b); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define POWER_BOUND		0x27 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#define POWER_BOUND_5G		0x2b 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800_config_channel_rf3290(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					 struct ieee80211_conf *conf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					 struct rf_channel *rf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2563,6 +3097,23 @@ static void rt2800_iq_calibrate(struct r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp_write(rt2x00dev, 159, cal != 0xff ? cal : 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static char rt2800_txpower_to_dev(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  unsigned int channel, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  char txpower) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		txpower = rt2x00_get_field8(txpower, EEPROM_TXPOWER_ALC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return clamp_t(char, txpower, MIN_G_TXPOWER, MAX_G_TXPOWER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return clamp_t(char, txpower, MIN_A_TXPOWER_3593, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			       MAX_A_TXPOWER_3593); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				  struct ieee80211_conf *conf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				  struct rf_channel *rf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2572,13 +3123,14 @@ static void rt2800_config_channel(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	unsigned int tx_pin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 bbp, rfcsr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (rf->channel <= 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		info->default_power1 = TXPOWER_G_TO_DEV(info->default_power1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		info->default_power2 = TXPOWER_G_TO_DEV(info->default_power2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		info->default_power1 = TXPOWER_A_TO_DEV(info->default_power1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		info->default_power2 = TXPOWER_A_TO_DEV(info->default_power2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	info->default_power1 = rt2800_txpower_to_dev(rt2x00dev, rf->channel, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						     info->default_power1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	info->default_power2 = rt2800_txpower_to_dev(rt2x00dev, rf->channel, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						     info->default_power2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00dev->default_ant.tx_chain_num > 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		info->default_power3 = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_txpower_to_dev(rt2x00dev, rf->channel, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      info->default_power3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	switch (rt2x00dev->chip.rf) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF2020: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2591,6 +3143,9 @@ static void rt2800_config_channel(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3052: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_config_channel_rf3052(rt2x00dev, conf, rf, info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RF3053: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_config_channel_rf3053(rt2x00dev, conf, rf, info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3290: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_config_channel_rf3290(rt2x00dev, conf, rf, info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2636,6 +3191,23 @@ static void rt2800_config_channel(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 66, 0x26 + rt2x00dev->lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 27, 0x20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 66, 0x26 + rt2x00dev->lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rf->channel > 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			/* Disable CCK Packet detection on 5GHz */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 70, 0x00); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 70, 0x0a); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (conf_is_ht40(conf)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 105, 0x04); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 105, 0x34); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 62, 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, 77, 0x98); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2651,16 +3223,27 @@ static void rt2800_config_channel(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				rt2800_bbp_write(rt2x00dev, 82, 0x62); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				rt2800_bbp_write(rt2x00dev, 75, 0x46); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				rt2800_bbp_write(rt2x00dev, 82, 0x84); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					rt2800_bbp_write(rt2x00dev, 82, 0x62); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					rt2800_bbp_write(rt2x00dev, 82, 0x84); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				rt2800_bbp_write(rt2x00dev, 75, 0x50); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2800_bbp_write(rt2x00dev, 83, 0x8a); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (rt2x00_rt(rt2x00dev, RT3572)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2800_bbp_write(rt2x00dev, 82, 0x94); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		else if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 82, 0x82); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2800_bbp_write(rt2x00dev, 82, 0xf2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_bbp_write(rt2x00dev, 83, 0x9a); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (test_bit(CAPABILITY_EXTERNAL_LNA_A, &rt2x00dev->cap_flags)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2800_bbp_write(rt2x00dev, 75, 0x46); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2731,6 +3314,41 @@ static void rt2800_config_channel(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_rt(rt2x00dev, RT3572)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_rfcsr_write(rt2x00dev, 8, 0x80); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_is_usb(rt2x00dev)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_register_read(rt2x00dev, GPIO_CTRL, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			/* Band selection. GPIO #8 controls all paths */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field32(®, GPIO_CTRL_DIR8, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2x00_set_field32(®, GPIO_CTRL_VAL8, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2x00_set_field32(®, GPIO_CTRL_VAL8, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field32(®, GPIO_CTRL_DIR4, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field32(®, GPIO_CTRL_DIR7, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			/* LNA PE control. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			* GPIO #4 controls PE0 and PE1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			* GPIO #7 controls PE2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field32(®, GPIO_CTRL_VAL4, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field32(®, GPIO_CTRL_VAL7, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_register_write(rt2x00dev, GPIO_CTRL, reg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* AGC init */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rf->channel <= 14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			reg = 0x1c + 2 * rt2x00dev->lna_gain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			reg = 0x22 + ((rt2x00dev->lna_gain * 5) / 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, reg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		usleep_range(1000, 1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_rt(rt2x00dev, RT5592)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 195, 141); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_write(rt2x00dev, 196, conf_is_ht40(conf) ? 0x10 : 0x1a); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2790,6 +3408,13 @@ static int rt2800_get_gain_calibration_d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * First check if temperature compensation is supported. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (!rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_EXTERNAL_TX_ALC)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Read TSSI boundaries for temperature compensation from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * the EEPROM. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2798,62 +3423,62 @@ static int rt2800_get_gain_calibration_d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Example TSSI bounds  0xF0 0xD0 0xB5 0xA0 0x88 0x45 0x25 0x15 0x00 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[0] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG1_MINUS4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[1] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG1_MINUS3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[2] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG2_MINUS2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[3] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG2_MINUS1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG3, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG3, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[4] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG3_REF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[5] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG3_PLUS1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG4, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG4, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[6] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG4_PLUS2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[7] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG4_PLUS3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG5, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG5, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[8] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_BG5_PLUS4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		step = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					  EEPROM_TSSI_BOUND_BG5_AGC_STEP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[0] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A1_MINUS4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[1] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A1_MINUS3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[2] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A2_MINUS2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[3] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A2_MINUS1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A3, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A3, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[4] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A3_REF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[5] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A3_PLUS1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A4, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A4, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[6] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A4_PLUS2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[7] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A4_PLUS3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A5, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A5, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		tssi_bounds[8] = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EEPROM_TSSI_BOUND_A5_PLUS4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2899,7 +3524,7 @@ static int rt2800_get_txpower_bw_comp(st 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 comp_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	int comp_value = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_DELTA, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_DELTA, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * HT40 compensation not required. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2966,6 +3591,9 @@ static u8 rt2800_compensate_txpower(stru 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 eirp_txpower_criterion; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 reg_limit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return min_t(u8, txpower, 0xc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (test_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 * Check if eirp txpower exceed txpower_limit. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -2974,12 +3602,12 @@ static u8 rt2800_compensate_txpower(stru 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 * .11b data rate need add additional 4dbm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 * when calculating eirp txpower. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		criterion = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					       EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (band == IEEE80211_BAND_2GHZ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3001,6 +3629,412 @@ static u8 rt2800_compensate_txpower(stru 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	return min_t(u8, txpower, 0xc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+enum { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_0_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_1_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_2_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_3_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_4_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_5_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_6_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_7_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_8_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_9_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_0_EXT_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_1_EXT_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_2_EXT_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_3_EXT_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_4_EXT_IDX, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	TX_PWR_CFG_IDX_COUNT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_config_txpower_rt3593(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 struct ieee80211_channel *chan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 int power_level) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 txpower; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u16 eeprom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u32 regs[TX_PWR_CFG_IDX_COUNT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned int offset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	enum ieee80211_band band = chan->band; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	int delta; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	memset(regs, '\0', sizeof(regs)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* TODO: adapt TX power reduction from the rt28xx code */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* calculate temperature compensation delta */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	delta = rt2800_get_gain_calibration_delta(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (band == IEEE80211_BAND_5GHZ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		offset = 16; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		offset = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		offset += 8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* CCK 1MBS,2MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 1, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_CCK1_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_CCK1_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_EXT_CCK1_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* CCK 5.5MBS,11MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 1, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_CCK5_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_CCK5_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_EXT_CCK5_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* OFDM 6MBS,9MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_OFDM6_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_OFDM6_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_EXT_OFDM6_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* OFDM 12MBS,18MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_OFDM12_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_OFDM12_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_0_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_0_EXT_OFDM12_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* OFDM 24MBS,36MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_OFDM24_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_OFDM24_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_EXT_OFDM24_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* OFDM 48MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_OFDM48_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_OFDM48_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_EXT_OFDM48_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* OFDM 54MBS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_7_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_7_OFDM54_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_7_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_7_OFDM54_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_7_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_7_OFDM54_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 2, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 0,1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_MCS0_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_MCS0_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_EXT_MCS0_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 2,3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_MCS2_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_MCS2_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_1_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_1_EXT_MCS2_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 4,5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS4_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS4_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_EXT_MCS4_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS6_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS6_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_EXT_MCS6_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 3, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 7 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_7_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_7_MCS7_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_7_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_7_MCS7_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_7_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_7_MCS7_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 8,9 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS8_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS8_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_EXT_MCS8_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 10,11 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS10_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_MCS10_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_2_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_2_EXT_MCS10_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 12,13 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_MCS12_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_MCS12_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_EXT_MCS12_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 4, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 14 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_MCS14_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_MCS14_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_EXT_MCS14_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 15 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_8_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_8_MCS15_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_8_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_8_MCS15_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_8_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_8_MCS15_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 16,17 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_5_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_5_MCS16_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_5_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_5_MCS16_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_5_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_5_MCS16_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 18,19 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_5_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_5_MCS18_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_5_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_5_MCS18_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_5_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_5_MCS18_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 5, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 20,21 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_6_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_6_MCS20_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_6_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_6_MCS20_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_6_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_6_MCS20_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 22 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_6_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_6_MCS22_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_6_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_6_MCS22_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_6_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_6_MCS22_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* MCS 23 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_8_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_8_MCS23_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_8_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_8_MCS23_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_8_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_8_MCS23_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 6, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* STBC, MCS 0,1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_STBC0_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_STBC0_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_EXT_STBC0_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* STBC, MCS 2,3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_STBC2_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_STBC2_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_3_EXT_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_3_EXT_STBC2_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* STBC, MCS 4,5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_4_IDX], TX_PWR_CFG_RATE0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_4_IDX], TX_PWR_CFG_RATE1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_4_EXT_IDX], TX_PWR_CFG_RATE0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* STBC, MCS 6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_4_IDX], TX_PWR_CFG_RATE2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_4_IDX], TX_PWR_CFG_RATE3, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_4_EXT_IDX], TX_PWR_CFG_RATE2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				      offset + 7, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* STBC, MCS 7 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2x00_get_field16(eeprom, EEPROM_TXPOWER_BYRATE_RATE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	txpower = rt2800_compensate_txpower(rt2x00dev, 0, band, power_level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					    txpower, delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_9_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_9_STBC7_CH0, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_9_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_9_STBC7_CH1, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®s[TX_PWR_CFG_9_IDX], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   TX_PWR_CFG_9_STBC7_CH2, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_0, regs[TX_PWR_CFG_0_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_1, regs[TX_PWR_CFG_1_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_2, regs[TX_PWR_CFG_2_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_3, regs[TX_PWR_CFG_3_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_4, regs[TX_PWR_CFG_4_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_5, regs[TX_PWR_CFG_5_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_6, regs[TX_PWR_CFG_6_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_7, regs[TX_PWR_CFG_7_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_8, regs[TX_PWR_CFG_8_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_9, regs[TX_PWR_CFG_9_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_0_EXT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			      regs[TX_PWR_CFG_0_EXT_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_1_EXT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			      regs[TX_PWR_CFG_1_EXT_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_2_EXT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			      regs[TX_PWR_CFG_2_EXT_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_3_EXT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			      regs[TX_PWR_CFG_3_EXT_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, TX_PWR_CFG_4_EXT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			      regs[TX_PWR_CFG_4_EXT_IDX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	for (i = 0; i < TX_PWR_CFG_IDX_COUNT; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_dbg(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   "band:%cGHz, BW:%c0MHz, TX_PWR_CFG_%d%s = %08lx\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   (band == IEEE80211_BAND_5GHZ) ? '5' : '2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   (test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags)) ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+								'4' : '2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   (i > TX_PWR_CFG_9_IDX) ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					(i - TX_PWR_CFG_9_IDX - 1) : i, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   (i > TX_PWR_CFG_9_IDX) ? "_EXT" : "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			   (unsigned long) regs[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * We configure transmit power using MAC TX_PWR_CFG_{0,...,N} registers and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * BBP R1 register. TX_PWR_CFG_X allow to configure per rate TX power values, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3010,9 +4044,9 @@ static u8 rt2800_compensate_txpower(stru 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * EEPROM_TXPOWER_BYRATE offset. We adjust them and BBP R1 settings according to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  * current conditions (i.e. band, bandwidth, temperature, user settings). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				  struct ieee80211_channel *chan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				  int power_level) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_config_txpower_rt28xx(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 struct ieee80211_channel *chan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					 int power_level) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 txpower, r1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u16 eeprom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3080,8 +4114,8 @@ static void rt2800_config_txpower(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_register_read(rt2x00dev, offset, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      i, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		is_rate_b = i ? 0 : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3129,8 +4163,8 @@ static void rt2800_config_txpower(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field32(®, TX_PWR_CFG_RATE3, txpower); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/* read the next four txpower values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      i + 1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		is_rate_b = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3184,6 +4218,16 @@ static void rt2800_config_txpower(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  struct ieee80211_channel *chan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				  int power_level) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_config_txpower_rt3593(rt2x00dev, chan, power_level); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_config_txpower_rt28xx(rt2x00dev, chan, power_level); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- void rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_config_txpower(rt2x00dev, rt2x00dev->hw->conf.chandef.chan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3219,6 +4263,7 @@ void rt2800_vco_calibration(struct rt2x0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_rfcsr_write(rt2x00dev, 7, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RF3053: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3290: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF5360: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF5370: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3442,17 +4487,25 @@ static int rt2800_init_registers(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		return ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_register_read(rt2x00dev, BCN_OFFSET0, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET0_BCN0, 0xe0); /* 0x3800 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET0_BCN1, 0xe8); /* 0x3a00 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET0_BCN2, 0xf0); /* 0x3c00 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET0_BCN3, 0xf8); /* 0x3e00 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	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, 0xc8); /* 0x3200 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET1_BCN5, 0xd0); /* 0x3400 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET1_BCN6, 0x77); /* 0x1dc0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_set_field32(®, BCN_OFFSET1_BCN7, 0x6f); /* 0x1bc0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3528,7 +4581,8 @@ static int rt2800_init_registers(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		    rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		    rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_DAC_TEST)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				rt2800_register_write(rt2x00dev, TX_SW_CFG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 						      0x0000002c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3559,6 +4613,23 @@ static int rt2800_init_registers(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else if (rt2x00_rt(rt2x00dev, RT3572)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000402); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_rt_rev_lt(rt2x00dev, RT3593, REV_RT3593E)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			if (rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					       EEPROM_NIC_CONF1_DAC_TEST)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2800_register_write(rt2x00dev, TX_SW_CFG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						      0x0000001f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2800_register_write(rt2x00dev, TX_SW_CFG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						      0x0000000f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_register_write(rt2x00dev, TX_SW_CFG2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      0x00000000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else if (rt2x00_rt(rt2x00dev, RT5390) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		   rt2x00_rt(rt2x00dev, RT5392) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		   rt2x00_rt(rt2x00dev, RT5592)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3786,14 +4857,8 @@ static int rt2800_init_registers(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Clear all beacons 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE6); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2800_clear_beacon_register(rt2x00dev, HW_BEACON_BASE7); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	for (i = 0; i < 8; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_clear_beacon_register(rt2x00dev, i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_is_usb(rt2x00dev)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_register_read(rt2x00dev, US_CYC_CNT, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -3989,7 +5054,7 @@ static void rt2800_disable_unused_dac_ad 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp_read(rt2x00dev, 138, &value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		value |= 0x20; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4332,6 +5397,22 @@ static void rt2800_init_bbp_3572(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_disable_unused_dac_adc(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_init_bbp_3593(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_init_bbp_early(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 79, 0x13); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 80, 0x05); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 81, 0x33); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 137, 0x0f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 84, 0x19); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Enable DC filter */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt_rev_gte(rt2x00dev, RT3593, REV_RT3593E)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 103, 0xc0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	int ant, div_mode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4402,7 +5483,7 @@ static void rt2800_init_bbp_53xx(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_disable_unused_dac_adc(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	div_mode = rt2x00_get_field16(eeprom, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				      EEPROM_NIC_CONF1_ANT_DIVERSITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	ant = (div_mode == 3) ? 1 : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4488,7 +5569,7 @@ static void rt2800_init_bbp_5592(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp4_mac_if_ctrl(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	div_mode = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_ANT_DIVERSITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	ant = (div_mode == 3) ? 1 : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp_read(rt2x00dev, 152, &value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4547,6 +5628,9 @@ static void rt2800_init_bbp(struct rt2x0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT3572: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_init_bbp_3572(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RT3593: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_init_bbp_3593(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT5390: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT5392: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_init_bbp_53xx(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4557,7 +5641,8 @@ static void rt2800_init_bbp(struct rt2x0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	for (i = 0; i < EEPROM_BBP_SIZE; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_BBP_START, i, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					      &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (eeprom != 0xffff && eeprom != 0x0000) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			reg_id = rt2x00_get_field16(eeprom, EEPROM_BBP_REG_ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4728,7 +5813,7 @@ static void rt2800_normal_mode_setup_3xx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_rt(rt2x00dev, RT3090)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		/*  Turn off unused DAC1 and ADC1 to reduce power consumption */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_bbp_read(rt2x00dev, 138, &bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2x00_set_field8(&bbp, BBP138_RX_ADC1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4771,6 +5856,42 @@ static void rt2800_normal_mode_setup_3xx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_normal_mode_setup_3593(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 rfcsr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 tx_gain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 50, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR50_TX_LO2_EN, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 50, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 51, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	tx_gain = rt2x00_get_field8(drv_data->txmixer_gain_24g, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				    RFCSR17_TXMIXER_GAIN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR51_BITS24, tx_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 51, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 38, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR38_RX_LO1_EN, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 38, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 39, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR39_RX_LO2_EN, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 39, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR1_PLL_PD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 1, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR30_RX_VCM, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 30, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* TODO: enable stream mode */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800_normal_mode_setup_5xxx(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u8 reg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4778,7 +5899,7 @@ static void rt2800_normal_mode_setup_5xx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/*  Turn off unused DAC1 and ADC1 to reduce power consumption */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_bbp_read(rt2x00dev, 138, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field8(®, BBP138_RX_ADC1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -4884,7 +6005,8 @@ static void rt2800_init_rfcsr_30xx(struc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field32(®, LDO_CFG0_BGSEL, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		    rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_DAC_TEST)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				rt2x00_set_field32(®, LDO_CFG0_LDO_CORE_VLEVEL, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5152,6 +6274,136 @@ static void rt2800_init_rfcsr_3572(struc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_normal_mode_setup_3xxx(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt3593_post_bbp_init(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 bbp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	bool txbf_enabled = false; /* FIXME */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_read(rt2x00dev, 105, &bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00dev->default_ant.rx_chain_num == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&bbp, BBP105_MLD, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2x00_set_field8(&bbp, BBP105_MLD, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 105, bbp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp4_mac_if_ctrl(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 92, 0x02); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 82, 0x82); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 106, 0x05); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 104, 0x92); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 88, 0x90); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 148, 0xc8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 47, 0x48); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 120, 0x50); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (txbf_enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 163, 0xbd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_bbp_write(rt2x00dev, 163, 0x9d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* SNR mapping */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 142, 6); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 143, 160); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 142, 7); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 143, 161); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 142, 8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 143, 162); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* ADC/DAC control */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 31, 0x08); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* RX AGC energy lower bound in log2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 68, 0x0b); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* FIXME: BBP 105 owerwrite? */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_write(rt2x00dev, 105, 0x04); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static void rt2800_init_rfcsr_3593(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u32 reg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u8 rfcsr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Disable GPIO #4 and #7 function for LAN PE control */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_read(rt2x00dev, GPIO_SWITCH, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®, GPIO_SWITCH_4, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®, GPIO_SWITCH_7, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, GPIO_SWITCH, reg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Initialize default register values */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 1, 0x03); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 3, 0x80); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 5, 0x00); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 6, 0x40); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 8, 0xf1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 9, 0x02); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 10, 0xd3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 11, 0x40); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 12, 0x4e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 13, 0x12); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 18, 0x40); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 22, 0x20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 30, 0x10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 31, 0x80); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 32, 0x78); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 33, 0x3b); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 34, 0x3c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 35, 0xe0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 38, 0x86); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 39, 0x23); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 44, 0xd3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 45, 0xbb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 46, 0x60); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 49, 0x8e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 50, 0x86); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 51, 0x75); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 52, 0x45); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 53, 0x18); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 54, 0x18); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 55, 0x18); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 56, 0xdb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 57, 0x6e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Initiate calibration */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* TODO: use rt2800_rf_init_calibration ? */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 2, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR2_RESCAL_EN, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 2, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_adjust_freq_offset(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_read(rt2x00dev, 18, &rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field8(&rfcsr, RFCSR18_XO_TUNE_BYPASS, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_rfcsr_write(rt2x00dev, 18, rfcsr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_read(rt2x00dev, LDO_CFG0, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®, LDO_CFG0_LDO_CORE_VLEVEL, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®, LDO_CFG0_BGSEL, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, LDO_CFG0, reg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	usleep_range(1000, 1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_read(rt2x00dev, LDO_CFG0, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2x00_set_field32(®, LDO_CFG0_LDO_CORE_VLEVEL, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_register_write(rt2x00dev, LDO_CFG0, reg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Set initial values for RX filter calibration */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	drv_data->calibration_bw20 = 0x1f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	drv_data->calibration_bw40 = 0x2f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Save BBP 25 & 26 values for later use in channel switching */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_read(rt2x00dev, 25, &drv_data->bbp25); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_bbp_read(rt2x00dev, 26, &drv_data->bbp26); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_led_open_drain_enable(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_normal_mode_setup_3593(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt3593_post_bbp_init(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* TODO: enable stream mode support */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_rf_init_calibration(rt2x00dev, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5380,6 +6632,9 @@ static void rt2800_init_rfcsr(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT3572: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_init_rfcsr_3572(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RT3593: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_init_rfcsr_3593(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT5390: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_init_rfcsr_5390(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5404,19 +6659,20 @@ int rt2800_enable_radio(struct rt2x00_de 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		     rt2800_init_registers(rt2x00dev))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		return -EIO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return -EIO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Send signal to firmware during boot time. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (rt2x00_is_usb(rt2x00dev)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_is_usb(rt2x00dev)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2800_register_write(rt2x00dev, H2M_INT_SRC, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	msleep(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		     rt2800_wait_bbp_ready(rt2x00dev))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (unlikely(rt2800_wait_bbp_ready(rt2x00dev))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		return -EIO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_init_bbp(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5456,15 +6712,15 @@ int rt2800_enable_radio(struct rt2x00_de 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Initialize LED control 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_AG_CONF, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_LED_AG_CONF, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_mcu_request(rt2x00dev, MCU_LED_AG_CONF, 0xff, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			   word & 0xff, (word >> 8) & 0xff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_ACT_CONF, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_LED_ACT_CONF, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_mcu_request(rt2x00dev, MCU_LED_ACT_CONF, 0xff, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			   word & 0xff, (word >> 8) & 0xff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_POLARITY, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_LED_POLARITY, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2800_mcu_request(rt2x00dev, MCU_LED_LED_POLARITY, 0xff, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			   word & 0xff, (word >> 8) & 0xff); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5560,6 +6816,34 @@ int rt2800_read_eeprom_efuse(struct rt2x 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- EXPORT_SYMBOL_GPL(rt2800_read_eeprom_efuse); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static u8 rt2800_get_txmixer_gain_24g(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u16 word; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if ((word & 0x00ff) != 0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_BG_VAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static u8 rt2800_get_txmixer_gain_5g(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	u16 word; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if ((word & 0x00ff) != 0x00ff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		return rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_A_VAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	struct rt2800_drv_data *drv_data = rt2x00dev->drv_data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5578,18 +6862,18 @@ static int rt2800_validate_eeprom(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Start validation of the data that has been read. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	mac = rt2800_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (!is_valid_ether_addr(mac)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		eth_random_addr(mac); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (word == 0xffff) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF0_TXPATH, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else if (rt2x00_rt(rt2x00dev, RT2860) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		   rt2x00_rt(rt2x00dev, RT2872)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5598,10 +6882,10 @@ static int rt2800_validate_eeprom(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		if (rt2x00_get_field16(word, EEPROM_NIC_CONF0_RXPATH) > 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (word == 0xffff) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF1_HW_RADIO, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF1_EXTERNAL_TX_ALC, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5618,24 +6902,24 @@ static int rt2800_validate_eeprom(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF1_INTERNAL_TX_ALC, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF1_BT_COEXIST, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_NIC_CONF1_DAC_TEST, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF1, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF1, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_eeprom_dbg(rt2x00dev, "NIC: 0x%04x\n", word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if ((word & 0x00ff) == 0x00ff) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_FREQ_OFFSET, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_FREQ, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_eeprom_dbg(rt2x00dev, "Freq: 0x%04x\n", word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if ((word & 0xff00) == 0xff00) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_FREQ_LED_MODE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 				   LED_MODE_TXRX_ACTIVITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_FREQ_LED_POLARITY, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_AG_CONF, 0x5555); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_ACT_CONF, 0x2221); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_POLARITY, 0xa9f8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_FREQ, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_LED_AG_CONF, 0x5555); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_LED_ACT_CONF, 0x2221); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_LED_POLARITY, 0xa9f8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_eeprom_dbg(rt2x00dev, "Led Mode: 0x%04x\n", word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5644,56 +6928,61 @@ static int rt2800_validate_eeprom(struct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * lna0 as correct value. Note that EEPROM_LNA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * is never validated. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	default_lna_gain = rt2x00_get_field16(word, EEPROM_LNA_A0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET0)) > 10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET1)) > 10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if ((word & 0x00ff) != 0x00ff) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		drv_data->txmixer_gain_24g = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_BG_VAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		drv_data->txmixer_gain_24g = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	drv_data->txmixer_gain_24g = rt2800_get_txmixer_gain_24g(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	    rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				   default_lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if ((word & 0x00ff) != 0x00ff) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		drv_data->txmixer_gain_5g = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--			rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_A_VAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		drv_data->txmixer_gain_5g = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (!rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		    rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   default_lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	drv_data->txmixer_gain_5g = rt2800_get_txmixer_gain_5g(rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET0)) > 10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET1)) > 10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	    rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				   default_lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (!rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		    rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   default_lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00_rt(rt2x00dev, RT3593)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_EXT_LNA2, &word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_get_field16(word, EEPROM_EXT_LNA2_A1) == 0x00 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		    rt2x00_get_field16(word, EEPROM_EXT_LNA2_A1) == 0xff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field16(&word, EEPROM_EXT_LNA2_A1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   default_lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00_get_field16(word, EEPROM_EXT_LNA2_A2) == 0x00 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		    rt2x00_get_field16(word, EEPROM_EXT_LNA2_A2) == 0xff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			rt2x00_set_field16(&word, EEPROM_EXT_LNA2_A1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+					   default_lna_gain); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_write(rt2x00dev, EEPROM_EXT_LNA2, word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5707,7 +6996,7 @@ static int rt2800_init_eeprom(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Read EEPROM word for configuration. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Identify RF chipset by EEPROM value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5717,7 +7006,7 @@ static int rt2800_init_eeprom(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_rt(rt2x00dev, RT3290) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	    rt2x00_rt(rt2x00dev, RT5390) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	    rt2x00_rt(rt2x00dev, RT5392)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5731,6 +7020,7 @@ static int rt2800_init_eeprom(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3021: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3022: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3052: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RF3053: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3290: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3320: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3322: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5757,7 +7047,7 @@ static int rt2800_init_eeprom(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2x00dev->default_ant.rx_chain_num = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	    rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_rt(rt2x00dev, RT3070) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	    rt2x00_rt(rt2x00dev, RT3090) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5810,7 +7100,7 @@ static int rt2800_init_eeprom(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Read frequency offset and RF programming sequence. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2x00dev->freq_offset = rt2x00_get_field16(eeprom, EEPROM_FREQ_OFFSET); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -5827,7 +7117,7 @@ static int rt2800_init_eeprom(struct rt2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Check if support EIRP tx power limit feature. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_get_field16(eeprom, EEPROM_EIRP_MAX_TX_POWER_2GHZ) < 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 					EIRP_MAX_TX_POWER_LIMIT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6109,12 +7399,79 @@ static const struct rf_channel rf_vals_5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	{196, 83, 0, 12, 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+static const struct rf_channel rf_vals_3053[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Channel, N, R, K */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{1, 241, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{2, 241, 2, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{3, 242, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{4, 242, 2, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{5, 243, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{6, 243, 2, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{7, 244, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{8, 244, 2, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{9, 245, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{10, 245, 2, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{11, 246, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{12, 246, 2, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{13, 247, 2, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{14, 248, 2, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{36, 0x56, 0, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{38, 0x56, 0, 6}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{40, 0x56, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{44, 0x57, 0, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{46, 0x57, 0, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{48, 0x57, 0, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{52, 0x57, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{54, 0x57, 0, 10}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{56, 0x58, 0, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{60, 0x58, 0, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{62, 0x58, 0, 6}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{64, 0x58, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{100, 0x5B, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{102, 0x5B, 0, 10}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{104, 0x5C, 0, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{108, 0x5C, 0, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{110, 0x5C, 0, 6}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{112, 0x5C, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* NOTE: Channel 114 has been removed intentionally. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * The EEPROM contains no TX power values for that, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 * and it is disabled in the vendor driver as well. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{116, 0x5D, 0, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{118, 0x5D, 0, 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{120, 0x5D, 0, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{124, 0x5D, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{126, 0x5D, 0, 10}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{128, 0x5E, 0, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{132, 0x5E, 0, 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{134, 0x5E, 0, 6}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{136, 0x5E, 0, 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{140, 0x5F, 0, 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{149, 0x5F, 0, 9}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{151, 0x5F, 0, 11}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{153, 0x60, 0, 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{157, 0x60, 0, 5}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{159, 0x60, 0, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{161, 0x60, 0, 9}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{165, 0x61, 0, 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{167, 0x61, 0, 3}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{169, 0x61, 0, 5}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{171, 0x61, 0, 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{173, 0x61, 0, 9}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	struct hw_mode_spec *spec = &rt2x00dev->spec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	struct channel_info *info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	char *default_power1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	char *default_power2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	char *default_power3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	unsigned int i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u16 eeprom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	u32 reg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6149,7 +7506,7 @@ static int rt2800_probe_hw_mode(struct r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	SET_IEEE80211_PERM_ADDR(rt2x00dev->hw, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--				rt2x00_eeprom_addr(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2800_eeprom_addr(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 						   EEPROM_MAC_ADDR_0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6165,7 +7522,7 @@ static int rt2800_probe_hw_mode(struct r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2x00dev->hw->max_report_rates = 7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2x00dev->hw->max_rate_tries = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	 * Initialize hw_mode information. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6200,6 +7557,10 @@ static int rt2800_probe_hw_mode(struct r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		spec->supported_bands |= SUPPORT_BAND_5GHZ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		spec->num_channels = ARRAY_SIZE(rf_vals_3x); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		spec->channels = rf_vals_3x; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	} else if (rt2x00_rf(rt2x00dev, RF3053)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		spec->supported_bands |= SUPPORT_BAND_5GHZ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		spec->num_channels = ARRAY_SIZE(rf_vals_3053); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		spec->channels = rf_vals_3053; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} else if (rt2x00_rf(rt2x00dev, RF5592)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		spec->supported_bands |= SUPPORT_BAND_5GHZ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6265,21 +7626,40 @@ static int rt2800_probe_hw_mode(struct r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	spec->channels_info = info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	default_power1 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	default_power2 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	if (rt2x00dev->default_ant.tx_chain_num > 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		default_power3 = rt2800_eeprom_addr(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						    EEPROM_EXT_TXPOWER_BG3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		default_power3 = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	for (i = 0; i < 14; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		info[i].default_power1 = default_power1[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		info[i].default_power2 = default_power2[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (default_power3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			info[i].default_power3 = default_power3[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (spec->num_channels > 14) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		default_power1 = rt2800_eeprom_addr(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						    EEPROM_TXPOWER_A1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		default_power2 = rt2800_eeprom_addr(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						    EEPROM_TXPOWER_A2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		if (rt2x00dev->default_ant.tx_chain_num > 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			default_power3 = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				rt2800_eeprom_addr(rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+						   EEPROM_EXT_TXPOWER_A3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			default_power3 = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		for (i = 14; i < spec->num_channels; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			info[i].default_power1 = default_power1[i - 14]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			info[i].default_power2 = default_power2[i - 14]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			if (default_power3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+				info[i].default_power3 = default_power3[i - 14]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6290,6 +7670,7 @@ static int rt2800_probe_hw_mode(struct r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3022: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3320: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3052: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RF3053: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF3290: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF5360: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RF5370: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -6328,6 +7709,7 @@ static int rt2800_probe_rt(struct rt2x00 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT3352: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT3390: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT3572: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	case RT3593: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT5390: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT5392: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case RT5592: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/rt2800lib.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/rt2800lib.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -226,4 +226,8 @@ int rt2800_get_survey(struct ieee80211_h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		      struct survey_info *survey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+void rt2800_get_txwi_rxwi_size(struct rt2x00_dev *rt2x00dev, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			       unsigned short *txwi_size, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+			       unsigned short *rxwi_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #endif /* RT2800LIB_H */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/rt2800pci.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/rt2800pci.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -507,9 +507,13 @@ static int rt2800pci_init_registers(stru 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	rt2x00mmio_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2x00_is_pcie(rt2x00dev) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	    (rt2x00_rt(rt2x00dev, RT3572) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	    (rt2x00_rt(rt2x00dev, RT3090) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	     rt2x00_rt(rt2x00dev, RT3390) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	     rt2x00_rt(rt2x00dev, RT3572) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	     rt2x00_rt(rt2x00dev, RT3593) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	     rt2x00_rt(rt2x00dev, RT5390) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	     rt2x00_rt(rt2x00dev, RT5392))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	     rt2x00_rt(rt2x00dev, RT5392) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	     rt2x00_rt(rt2x00dev, RT5592))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00mmio_register_read(rt2x00dev, AUX_CTRL, ®); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field32(®, AUX_CTRL_FORCE_PCIE_CLK, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		rt2x00_set_field32(®, AUX_CTRL_WAKE_PCIE_EN, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1189,12 +1193,17 @@ static const struct rt2x00lib_ops rt2800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- static void rt2800pci_queue_init(struct data_queue *queue) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	unsigned short txwi_size, rxwi_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	switch (queue->qid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case QID_RX: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->limit = 128; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->data_size = AGGREGATION_SIZE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->desc_size = RXD_DESC_SIZE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		queue->winfo_size = RXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		queue->winfo_size = rxwi_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->priv_size = sizeof(struct queue_entry_priv_mmio); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1205,7 +1214,7 @@ static void rt2800pci_queue_init(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->limit = 64; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->data_size = AGGREGATION_SIZE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->desc_size = TXD_DESC_SIZE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		queue->winfo_size = TXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		queue->winfo_size = txwi_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->priv_size = sizeof(struct queue_entry_priv_mmio); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1213,7 +1222,7 @@ static void rt2800pci_queue_init(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->limit = 8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->data_size = 0; /* No DMA required for beacons */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->desc_size = TXD_DESC_SIZE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		queue->winfo_size = TXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		queue->winfo_size = txwi_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue->priv_size = sizeof(struct queue_entry_priv_mmio); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/rt2800usb.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/rt2800usb.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -176,8 +176,8 @@ static bool rt2800usb_tx_sta_fifo_read_c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (rt2800usb_txstatus_pending(rt2x00dev)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		/* Read register after 250 us */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 250000), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		/* Read register after 1 ms */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+		hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 1000000), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 			      HRTIMER_MODE_REL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -202,8 +202,8 @@ static void rt2800usb_async_read_tx_stat 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	if (test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	/* Read TX_STA_FIFO register after 500 us */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 500000), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Read TX_STA_FIFO register after 2 ms */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 2000000), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 		      HRTIMER_MODE_REL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -854,13 +854,7 @@ static void rt2800usb_queue_init(struct  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	struct rt2x00_dev *rt2x00dev = queue->rt2x00dev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	unsigned short txwi_size, rxwi_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	if (rt2x00_rt(rt2x00dev, RT5592)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		txwi_size = TXWI_DESC_SIZE_5WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rxwi_size = RXWI_DESC_SIZE_6WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		txwi_size = TXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--		rxwi_size = RXWI_DESC_SIZE_4WORDS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				--	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	switch (queue->qid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	case QID_RX: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -1194,6 +1188,40 @@ static struct usb_device_id rt2800usb_de 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* Zinwell */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	{ USB_DEVICE(0x5a57, 0x0284) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#ifdef CPTCFG_RT2800USB_RT3573 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* AirLive */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x1b75, 0x7733) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* ASUS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0b05, 0x17bc) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0b05, 0x17ad) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Belkin */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x050d, 0x1103) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Cameo */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x148f, 0xf301) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Edimax */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x7392, 0x7733) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Hawking */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0e66, 0x0020) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0e66, 0x0021) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* I-O DATA */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x04bb, 0x094e) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Linksys */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x13b1, 0x003b) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Logitec */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0789, 0x016b) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* NETGEAR */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0846, 0x9012) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0846, 0x9019) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Planex */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x2019, 0xed19) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Ralink */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x148f, 0x3573) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* Sitecom */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0df6, 0x0067) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0df6, 0x006a) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	/* ZyXEL */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	{ USB_DEVICE(0x0586, 0x3421) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- #ifdef CPTCFG_RT2800USB_RT53XX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	/* Arcadyan */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	{ USB_DEVICE(0x043e, 0x7a12) }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- a/drivers/net/wireless/rt2x00/rt2x00.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@@ -211,6 +211,7 @@ struct channel_info { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	short max_power; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	short default_power1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	short default_power2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-+	short default_power3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- /* 
			 |