linux-next.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-07-22  1:59 Stephen Rothwell
  2009-07-22  2:05 ` Zhu Yi
  2009-07-22  3:04 ` David Miller
  0 siblings, 2 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-07-22  1:59 UTC (permalink / raw)
  To: David Miller
  Cc: linux-next, linux-kernel, Samuel Ortiz, Zhu Yi, John W. Linville

Hi David,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwmc3200wifi/netdev.c between commit
513a2396d8e8327aff1ce50bea3fb4f16ff3455b ("iwmc3200wifi: fix NULL pointer
dereference in iwm_if_free") from the wireless-current tree and commit
3549716484a95fd16f7fcf8b68699bd4c803b382 ("iwmc3200wifi: cache keys when
interface is down") from the net tree.

Just context changes.   I fixed it up (see below) and can carry the fix
as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwmc3200wifi/netdev.c
index aea5ccf,e94e969..0000000
--- a/drivers/net/wireless/iwmc3200wifi/netdev.c
+++ b/drivers/net/wireless/iwmc3200wifi/netdev.c
@@@ -151,8 -156,10 +156,10 @@@ void iwm_if_free(struct iwm_priv *iwm
  		return;
  
  	free_netdev(iwm_to_ndev(iwm));
 -	iwm_wdev_free(iwm);
  	iwm_priv_deinit(iwm);
 +	iwm_wdev_free(iwm);
+ 	kfree(iwm->umac_profile);
+ 	iwm->umac_profile = NULL;
  }
  
  int iwm_if_add(struct iwm_priv *iwm)

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2011-09-27  2:51 Stephen Rothwell
  2011-09-27 13:09 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2011-09-27  2:51 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Johannes Berg, John W. Linville,
	Wey-Yi Guy, Emmanuel Grumbach

Hi all,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl-scan.c between commit 6c80c39d9a69
("iwlagn: fix dangling scan request") from the wireless-current tree and
commits 63013ae30159 ("iwlagn: priv->status moves to iwl_shared") and
6ac2f839b0b2 ("iwlagn: priv->mutex moves to iwl_shared") from the net
tree.

I fixed it up (see below) and can carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwlwifi/iwl-scan.c
index 77e528f,fc5af34..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@@ -403,8 -413,19 +413,8 @@@ int iwl_mac_hw_scan(struct ieee80211_h
  	if (req->n_channels == 0)
  		return -EINVAL;
  
- 	mutex_lock(&priv->mutex);
+ 	mutex_lock(&priv->shrd->mutex);
  
 -	if (test_bit(STATUS_SCANNING, &priv->shrd->status) &&
 -	    priv->scan_type != IWL_SCAN_NORMAL) {
 -		IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");
 -		ret = -EAGAIN;
 -		goto out_unlock;
 -	}
 -
 -	/* mac80211 will only ask for one band at a time */
 -	priv->scan_request = req;
 -	priv->scan_vif = vif;
 -
  	/*
  	 * If an internal scan is in progress, just set
  	 * up the scan_request as per above.
@@@ -432,7 -439,8 +442,7 @@@
  
  	IWL_DEBUG_MAC80211(priv, "leave\n");
  
- 	mutex_unlock(&priv->mutex);
 -out_unlock:
+ 	mutex_unlock(&priv->shrd->mutex);
  
  	return ret;
  }

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2011-07-06  2:53 Stephen Rothwell
  2011-07-06 11:07 ` Gustavo Padovan
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2011-07-06  2:53 UTC (permalink / raw)
  To: David Miller, netdev; +Cc: linux-next, linux-kernel, Gustavo F. Padovan

Hi all,

Today's linux-next merge of the net tree got a conflict in
net/bluetooth/l2cap_core.c between commit 9fa7e4f76f36 ("Bluetooth: Fix
regression with incoming L2CAP connections") from the wireless-current
tree and commit 89bc500e41fc ("Bluetooth: Add state tracking to struct
l2cap_chan") from the net tree.

I fixed it up (I think - see below) and can carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc net/bluetooth/l2cap_core.c
index ebff14c,9ec9c8c..0000000
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@@ -2323,8 -2530,7 +2530,8 @@@ static inline int l2cap_config_req(stru
  
  	sk = chan->sk;
  
- 	if ((bt_sk(sk)->defer_setup && sk->sk_state != BT_CONNECT2) ||
- 		 (!bt_sk(sk)->defer_setup && sk->sk_state != BT_CONFIG)) {
 -	if (chan->state != BT_CONFIG) {
++	if ((bt_sk(sk)->defer_setup && chan->state != BT_CONNECT2) ||
++		 (!bt_sk(sk)->defer_setup && chan->state != BT_CONFIG)) {
  		struct l2cap_cmd_rej rej;
  
  		rej.reason = cpu_to_le16(0x0002);

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2011-06-28  4:02 Stephen Rothwell
  2011-06-28 14:57 ` Guy, Wey-Yi
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2011-06-28  4:02 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Johannes Berg, Wey-Yi Guy,
	John W. Linville, Emmanuel Grumbach

Hi all,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl-tx.c between commits 1107a08a1a3e
("iwlagn: fix cmd queue unmap"), e815407d395e ("iwlagn: map command
buffers BIDI") and 2627c002cbed ("iwlagn: use PCI_DMA_* for pci_*
operations") from the wireless-current tree and commit 795414db8607
("iwlagn: don't use the PCI wrappers for DMA operation") from the net
tree.

I fixed it up (I think - see below) and can carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwlwifi/iwl-tx.c
index 9eee978,fd8aee9..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@@ -126,9 -126,8 +126,8 @@@ static inline u8 iwl_tfd_get_num_tbs(st
  }
  
  static void iwlagn_unmap_tfd(struct iwl_priv *priv, struct iwl_cmd_meta *meta,
 -			     struct iwl_tfd *tfd)
 +			     struct iwl_tfd *tfd, enum dma_data_direction dma_dir)
  {
- 	struct pci_dev *dev = priv->pci_dev;
  	int i;
  	int num_tbs;
  
@@@ -150,8 -149,8 +149,8 @@@
  
  	/* Unmap chunks, if any. */
  	for (i = 1; i < num_tbs; i++)
- 		pci_unmap_single(dev, iwl_tfd_tb_get_addr(tfd, i),
+ 		dma_unmap_single(priv->bus.dev, iwl_tfd_tb_get_addr(tfd, i),
 -				iwl_tfd_tb_get_len(tfd, i), DMA_TO_DEVICE);
 +				iwl_tfd_tb_get_len(tfd, i), dma_dir);
  }
  
  /**
@@@ -167,8 -166,7 +166,8 @@@ void iwlagn_txq_free_tfd(struct iwl_pri
  	struct iwl_tfd *tfd_tmp = txq->tfds;
  	int index = txq->q.read_ptr;
  
 -	iwlagn_unmap_tfd(priv, &txq->meta[index], &tfd_tmp[index]);
 +	iwlagn_unmap_tfd(priv, &txq->meta[index], &tfd_tmp[index],
- 			 PCI_DMA_TODEVICE);
++			 DMA_TO_DEVICE);
  
  	/* free SKB */
  	if (txq->txb) {
@@@ -311,8 -309,10 +310,8 @@@ void iwl_cmd_queue_unmap(struct iwl_pri
  		i = get_cmd_index(q, q->read_ptr);
  
  		if (txq->meta[i].flags & CMD_MAPPED) {
 -			dma_unmap_single(priv->bus.dev,
 -					 dma_unmap_addr(&txq->meta[i], mapping),
 -					 dma_unmap_len(&txq->meta[i], len),
 +			iwlagn_unmap_tfd(priv, &txq->meta[i], &txq->tfds[i],
- 					 PCI_DMA_BIDIRECTIONAL);
+ 					 DMA_BIDIRECTIONAL);
  			txq->meta[i].flags = 0;
  		}
  
@@@ -693,12 -698,11 +692,12 @@@ int iwl_enqueue_hcmd(struct iwl_priv *p
  			continue;
  		if (!(cmd->dataflags[i] & IWL_HCMD_DFL_NOCOPY))
  			continue;
- 		phys_addr = pci_map_single(priv->pci_dev, (void *)cmd->data[i],
- 					   cmd->len[i], PCI_DMA_BIDIRECTIONAL);
- 		if (pci_dma_mapping_error(priv->pci_dev, phys_addr)) {
+ 		phys_addr = dma_map_single(priv->bus.dev, (void *)cmd->data[i],
 -					   cmd->len[i], DMA_TO_DEVICE);
++					   cmd->len[i], DMA_BIDIRECTIONAL);
+ 		if (dma_mapping_error(priv->bus.dev, phys_addr)) {
  			iwlagn_unmap_tfd(priv, out_meta,
 -					 &txq->tfds[q->write_ptr]);
 +					 &txq->tfds[q->write_ptr],
- 					 PCI_DMA_BIDIRECTIONAL);
++					 DMA_BIDIRECTIONAL);
  			idx = -ENOMEM;
  			goto out;
  		}
@@@ -802,7 -806,7 +801,7 @@@ void iwl_tx_cmd_complete(struct iwl_pri
  	cmd = txq->cmd[cmd_index];
  	meta = &txq->meta[cmd_index];
  
- 	iwlagn_unmap_tfd(priv, meta, &txq->tfds[index], PCI_DMA_BIDIRECTIONAL);
 -	iwlagn_unmap_tfd(priv, meta, &txq->tfds[index]);
++	iwlagn_unmap_tfd(priv, meta, &txq->tfds[index], DMA_BIDIRECTIONAL);
  
  	/* Input error checking is done when commands are added to queue. */
  	if (meta->flags & CMD_WANT_SKB) {

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-12-02 23:45 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2010-12-02 23:45 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Senthil Balasubramanian, Felix Fietkau,
	John W. Linville

Hi all,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c between commit
e702ba18f25887c76d26c8a85cc1706463c62e9a ("ath9k_hw: fix endian issues
with CTLs on AR9003") from the wireless-current tree and commits
3092354970381fb8b6439fb4def0c34632277ae9 ("ath9k_hw: add eeprom templates
for ar9003 family chipsets") and f4475a6e52fce8d951a96c763f36b835bf89fdec
("ath9k_hw: Enable strong signal detection for AR9003") from the net tree.

There have been many more fields added that will need to be wrapped in
CTL().  I just fixed up the conflicting case.  It looks like this has
been fixed up by the wireless-current tree being merged into the wireless
tree and and so will go away when the wireless tree is merged into the
net tree again.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
index a7b82f0,3161a59..0000000
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
@@@ -55,17 -57,2327 +57,2329 @@@
  #define SUB_NUM_CTL_MODES_AT_5G_40 2    /* excluding HT40, EXT-OFDM */
  #define SUB_NUM_CTL_MODES_AT_2G_40 3    /* excluding HT40, EXT-OFDM, EXT-CCK */
  
 +#define CTL(_tpower, _flag) ((_tpower) | ((_flag) << 6))
 +
+ static int ar9003_hw_power_interpolate(int32_t x,
+ 				       int32_t *px, int32_t *py, u_int16_t np);
  static const struct ar9300_eeprom ar9300_default = {
  	.eepromVersion = 2,
- 	.templateVersion = 2,
- 	.macAddr = {1, 2, 3, 4, 5, 6},
- 	.custData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 		     0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ 	.templateVersion = 2,
+ 	.macAddr = {1, 2, 3, 4, 5, 6},
+ 	.custData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		     0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ 	.baseEepHeader = {
+ 		.regDmn = { LE16(0), LE16(0x1f) },
+ 		.txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
+ 		.opCapFlags = {
+ 			.opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
+ 			.eepMisc = 0,
+ 		},
+ 		.rfSilent = 0,
+ 		.blueToothOptions = 0,
+ 		.deviceCap = 0,
+ 		.deviceType = 5, /* takes lower byte in eeprom location */
+ 		.pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
+ 		.params_for_tuning_caps = {0, 0},
+ 		.featureEnable = 0x0c,
+ 		 /*
+ 		  * bit0 - enable tx temp comp - disabled
+ 		  * bit1 - enable tx volt comp - disabled
+ 		  * bit2 - enable fastClock - enabled
+ 		  * bit3 - enable doubling - enabled
+ 		  * bit4 - enable internal regulator - disabled
+ 		  * bit5 - enable pa predistortion - disabled
+ 		  */
+ 		.miscConfiguration = 0, /* bit0 - turn down drivestrength */
+ 		.eepromWriteEnableGpio = 3,
+ 		.wlanDisableGpio = 0,
+ 		.wlanLedGpio = 8,
+ 		.rxBandSelectGpio = 0xff,
+ 		.txrxgain = 0,
+ 		.swreg = 0,
+ 	 },
+ 	.modalHeader2G = {
+ 	/* ar9300_modal_eep_header  2g */
+ 		/* 4 idle,t1,t2,b(4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x110),
+ 		/* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
+ 		.antCtrlCommon2 = LE32(0x22222),
+ 
+ 		/*
+ 		 * antCtrlChain[AR9300_MAX_CHAINS]; 6 idle, t, r,
+ 		 * rx1, rx12, b (2 bits each)
+ 		 */
+ 		.antCtrlChain = { LE16(0x150), LE16(0x150), LE16(0x150) },
+ 
+ 		/*
+ 		 * xatten1DB[AR9300_MAX_CHAINS];  3 xatten1_db
+ 		 * for ar9280 (0xa20c/b20c 5:0)
+ 		 */
+ 		.xatten1DB = {0, 0, 0},
+ 
+ 		/*
+ 		 * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
+ 		 * for ar9280 (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0, 0, 0},
+ 		.tempSlope = 36,
+ 		.voltSlope = 0,
+ 
+ 		/*
+ 		 * spurChans[OSPREY_EEPROM_MODAL_SPURS]; spur
+ 		 * channels in usual fbin coding format
+ 		 */
+ 		.spurChans = {0, 0, 0, 0, 0},
+ 
+ 		/*
+ 		 * noiseFloorThreshCh[AR9300_MAX_CHAINS]; 3 Check
+ 		 * if the register is per chain
+ 		 */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {1, 1, 1},/* 3 chain */
+ 		.db_stage2 = {1, 1, 1}, /* 3 chain  */
+ 		.db_stage3 = {0, 0, 0},
+ 		.db_stage4 = {0, 0, 0},
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2c,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0cf0e0e0),
+ 		.papdRateMaskHt40 = LE32(0x6cf0e0e0),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	 },
+ 	.base_ext1 = {
+ 		.ant_div_control = 0,
+ 		.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+ 	},
+ 	.calFreqPier2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1),
+ 	 },
+ 	/* ar9300_cal_data_per_freq_op_loop 2g */
+ 	.calPierData2G = {
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 	 },
+ 	.calTarget_freqbin_Cck = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2484, 1),
+ 	 },
+ 	.calTarget_freqbin_2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	 },
+ 	.calTarget_freqbin_2GHT20 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	 },
+ 	.calTarget_freqbin_2GHT40 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	 },
+ 	.calTargetPowerCck = {
+ 		 /* 1L-5L,5S,11L,11S */
+ 		 { {36, 36, 36, 36} },
+ 		 { {36, 36, 36, 36} },
+ 	},
+ 	.calTargetPower2G = {
+ 		 /* 6-24,36,48,54 */
+ 		 { {32, 32, 28, 24} },
+ 		 { {32, 32, 28, 24} },
+ 		 { {32, 32, 28, 24} },
+ 	},
+ 	.calTargetPower2GHT20 = {
+ 		{ {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
+ 		{ {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
+ 		{ {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
+ 	},
+ 	.calTargetPower2GHT40 = {
+ 		{ {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
+ 		{ {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
+ 		{ {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
+ 	},
+ 	.ctlIndex_2G =  {
+ 		0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
+ 		0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
+ 	},
+ 	.ctl_freqbin_2G = {
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2457, 1),
+ 			FREQ2FBIN(2462, 1)
+ 		},
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 		{
+ 			FREQ2FBIN(2422, 1),
+ 			FREQ2FBIN(2427, 1),
+ 			FREQ2FBIN(2447, 1),
+ 			FREQ2FBIN(2452, 1)
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			/* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(2484, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[9].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[9].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[9].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[10].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[10].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[10].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[11].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[11].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[11].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[11].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
+ 		}
+ 	 },
+ 	.ctlPowerData_2G = {
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
+ 
+ 		 { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		 { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 		 { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 	 },
+ 	.modalHeader5G = {
+ 		/* 4 idle,t1,t2,b (4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x110),
+ 		/* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
+ 		.antCtrlCommon2 = LE32(0x22222),
+ 		 /* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
+ 		.antCtrlChain = {
+ 			LE16(0x000), LE16(0x000), LE16(0x000),
+ 		},
+ 		 /* xatten1DB 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
+ 		.xatten1DB = {0, 0, 0},
+ 
+ 		/*
+ 		 * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
+ 		 * for merlin (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0, 0, 0},
+ 		.tempSlope = 68,
+ 		.voltSlope = 0,
+ 		/* spurChans spur channels in usual fbin coding format */
+ 		.spurChans = {0, 0, 0, 0, 0},
+ 		/* noiseFloorThreshCh Check if the register is per chain */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {3, 3, 3}, /* 3 chain */
+ 		.db_stage2 = {3, 3, 3}, /* 3 chain */
+ 		.db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
+ 		.db_stage4 = {3, 3, 3},	 /* don't exist for 2G */
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2d,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0c80c080),
+ 		.papdRateMaskHt40 = LE32(0x0080c080),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	 },
+ 	.base_ext2 = {
+ 		.tempSlopeLow = 0,
+ 		.tempSlopeHigh = 0,
+ 		.xatten1DBLow = {0, 0, 0},
+ 		.xatten1MarginLow = {0, 0, 0},
+ 		.xatten1DBHigh = {0, 0, 0},
+ 		.xatten1MarginHigh = {0, 0, 0}
+ 	},
+ 	.calFreqPier5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calPierData5G = {
+ 			{
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 			},
+ 			{
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 			},
+ 			{
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 			},
+ 
+ 	},
+ 	.calTarget_freqbin_5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT20 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT40 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	 },
+ 	.calTargetPower5G = {
+ 		/* 6-24,36,48,54 */
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 		{ {20, 20, 20, 10} },
+ 	 },
+ 	.calTargetPower5GHT20 = {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 	 },
+ 	.calTargetPower5GHT40 =  {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 		{ {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
+ 	 },
+ 	.ctlIndex_5G =  {
+ 		0x10, 0x16, 0x18, 0x40, 0x46,
+ 		0x48, 0x30, 0x36, 0x38
+ 	},
+ 	.ctl_freqbin_5G =  {
+ 		{
+ 			/* Data[0].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[0].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[0].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[0].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[0].ctlEdges[4].bChannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[0].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[0].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[0].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 		{
+ 			/* Data[1].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[1].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[1].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[1].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[1].ctlEdges[4].bChannel */ FREQ2FBIN(5520, 0),
+ 			/* Data[1].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[1].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[1].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[2].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[2].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[2].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[2].ctlEdges[3].bChannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[2].ctlEdges[4].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[2].ctlEdges[5].bChannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[2].ctlEdges[6].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[2].ctlEdges[7].bChannel */ FREQ2FBIN(5755, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[3].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[3].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[3].ctlEdges[2].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[3].ctlEdges[3].bChannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[3].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[3].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[3].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[3].ctlEdges[7].bChannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[4].ctlEdges[4].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[5].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[7].bChannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[5].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[5].ctlEdges[4].bChannel */ FREQ2FBIN(5590, 0),
+ 			/* Data[5].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[5].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[5].ctlEdges[7].bChannel */ 0xFF
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[6].ctlEdges[2].bChannel */ FREQ2FBIN(5220, 0),
+ 			/* Data[6].ctlEdges[3].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[6].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[6].ctlEdges[5].bChannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[6].ctlEdges[6].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[6].ctlEdges[7].bChannel */ FREQ2FBIN(5745, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[7].ctlEdges[4].bChannel */ FREQ2FBIN(5560, 0),
+ 			/* Data[7].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[7].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[7].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[8].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[8].ctlEdges[4].bChannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[8].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[8].ctlEdges[6].bChannel */ FREQ2FBIN(5755, 0),
+ 			/* Data[8].ctlEdges[7].bChannel */ FREQ2FBIN(5795, 0)
+ 		}
+ 	 },
+ 	.ctlPowerData_5G = {
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 0}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 0}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 			}
+ 		},
+ 	 }
+ };
+ 
+ static const struct ar9300_eeprom ar9300_x113 = {
+ 	.eepromVersion = 2,
+ 	.templateVersion = 6,
+ 	.macAddr = {0x00, 0x03, 0x7f, 0x0, 0x0, 0x0},
+ 	.custData = {"x113-023-f0000"},
+ 	.baseEepHeader = {
+ 		.regDmn = { LE16(0), LE16(0x1f) },
+ 		.txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
+ 		.opCapFlags = {
+ 			.opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
+ 			.eepMisc = 0,
+ 		},
+ 		.rfSilent = 0,
+ 		.blueToothOptions = 0,
+ 		.deviceCap = 0,
+ 		.deviceType = 5, /* takes lower byte in eeprom location */
+ 		.pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
+ 		.params_for_tuning_caps = {0, 0},
+ 		.featureEnable = 0x0d,
+ 		 /*
+ 		  * bit0 - enable tx temp comp - disabled
+ 		  * bit1 - enable tx volt comp - disabled
+ 		  * bit2 - enable fastClock - enabled
+ 		  * bit3 - enable doubling - enabled
+ 		  * bit4 - enable internal regulator - disabled
+ 		  * bit5 - enable pa predistortion - disabled
+ 		  */
+ 		.miscConfiguration = 0, /* bit0 - turn down drivestrength */
+ 		.eepromWriteEnableGpio = 6,
+ 		.wlanDisableGpio = 0,
+ 		.wlanLedGpio = 8,
+ 		.rxBandSelectGpio = 0xff,
+ 		.txrxgain = 0x21,
+ 		.swreg = 0,
+ 	 },
+ 	.modalHeader2G = {
+ 	/* ar9300_modal_eep_header  2g */
+ 		/* 4 idle,t1,t2,b(4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x110),
+ 		/* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
+ 		.antCtrlCommon2 = LE32(0x44444),
+ 
+ 		/*
+ 		 * antCtrlChain[AR9300_MAX_CHAINS]; 6 idle, t, r,
+ 		 * rx1, rx12, b (2 bits each)
+ 		 */
+ 		.antCtrlChain = { LE16(0x150), LE16(0x150), LE16(0x150) },
+ 
+ 		/*
+ 		 * xatten1DB[AR9300_MAX_CHAINS];  3 xatten1_db
+ 		 * for ar9280 (0xa20c/b20c 5:0)
+ 		 */
+ 		.xatten1DB = {0, 0, 0},
+ 
+ 		/*
+ 		 * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
+ 		 * for ar9280 (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0, 0, 0},
+ 		.tempSlope = 25,
+ 		.voltSlope = 0,
+ 
+ 		/*
+ 		 * spurChans[OSPREY_EEPROM_MODAL_SPURS]; spur
+ 		 * channels in usual fbin coding format
+ 		 */
+ 		.spurChans = {FREQ2FBIN(2464, 1), 0, 0, 0, 0},
+ 
+ 		/*
+ 		 * noiseFloorThreshCh[AR9300_MAX_CHAINS]; 3 Check
+ 		 * if the register is per chain
+ 		 */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {1, 1, 1},/* 3 chain */
+ 		.db_stage2 = {1, 1, 1}, /* 3 chain  */
+ 		.db_stage3 = {0, 0, 0},
+ 		.db_stage4 = {0, 0, 0},
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2c,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0c80c080),
+ 		.papdRateMaskHt40 = LE32(0x0080c080),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	 },
+ 	 .base_ext1 = {
+ 		.ant_div_control = 0,
+ 		.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+ 	 },
+ 	.calFreqPier2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1),
+ 	 },
+ 	/* ar9300_cal_data_per_freq_op_loop 2g */
+ 	.calPierData2G = {
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 	 },
+ 	.calTarget_freqbin_Cck = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2472, 1),
+ 	 },
+ 	.calTarget_freqbin_2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	 },
+ 	.calTarget_freqbin_2GHT20 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	 },
+ 	.calTarget_freqbin_2GHT40 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	 },
+ 	.calTargetPowerCck = {
+ 		 /* 1L-5L,5S,11L,11S */
+ 		 { {34, 34, 34, 34} },
+ 		 { {34, 34, 34, 34} },
+ 	},
+ 	.calTargetPower2G = {
+ 		 /* 6-24,36,48,54 */
+ 		 { {34, 34, 32, 32} },
+ 		 { {34, 34, 32, 32} },
+ 		 { {34, 34, 32, 32} },
+ 	},
+ 	.calTargetPower2GHT20 = {
+ 		{ {32, 32, 32, 32, 32, 28, 32, 32, 30, 28, 0, 0, 0, 0} },
+ 		{ {32, 32, 32, 32, 32, 28, 32, 32, 30, 28, 0, 0, 0, 0} },
+ 		{ {32, 32, 32, 32, 32, 28, 32, 32, 30, 28, 0, 0, 0, 0} },
+ 	},
+ 	.calTargetPower2GHT40 = {
+ 		{ {30, 30, 30, 30, 30, 28, 30, 30, 28, 26, 0, 0, 0, 0} },
+ 		{ {30, 30, 30, 30, 30, 28, 30, 30, 28, 26, 0, 0, 0, 0} },
+ 		{ {30, 30, 30, 30, 30, 28, 30, 30, 28, 26, 0, 0, 0, 0} },
+ 	},
+ 	.ctlIndex_2G =  {
+ 		0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
+ 		0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
+ 	},
+ 	.ctl_freqbin_2G = {
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2457, 1),
+ 			FREQ2FBIN(2462, 1)
+ 		},
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 		{
+ 			FREQ2FBIN(2422, 1),
+ 			FREQ2FBIN(2427, 1),
+ 			FREQ2FBIN(2447, 1),
+ 			FREQ2FBIN(2452, 1)
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			/* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(2484, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[9].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[9].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[9].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[10].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[10].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[10].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[11].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[11].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[11].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[11].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
+ 		}
+ 	 },
+ 	.ctlPowerData_2G = {
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
+ 
+ 		 { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		 { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		 { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		 { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 		 { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 	 },
+ 	.modalHeader5G = {
+ 		/* 4 idle,t1,t2,b (4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x220),
+ 		/* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
+ 		.antCtrlCommon2 = LE32(0x11111),
+ 		 /* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
+ 		.antCtrlChain = {
+ 			LE16(0x150), LE16(0x150), LE16(0x150),
+ 		},
+ 		 /* xatten1DB 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
+ 		.xatten1DB = {0, 0, 0},
+ 
+ 		/*
+ 		 * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
+ 		 * for merlin (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0, 0, 0},
+ 		.tempSlope = 68,
+ 		.voltSlope = 0,
+ 		/* spurChans spur channels in usual fbin coding format */
+ 		.spurChans = {FREQ2FBIN(5500, 0), 0, 0, 0, 0},
+ 		/* noiseFloorThreshCh Check if the register is per chain */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {3, 3, 3}, /* 3 chain */
+ 		.db_stage2 = {3, 3, 3}, /* 3 chain */
+ 		.db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
+ 		.db_stage4 = {3, 3, 3},	 /* don't exist for 2G */
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2d,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0cf0e0e0),
+ 		.papdRateMaskHt40 = LE32(0x6cf0e0e0),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	 },
+ 	.base_ext2 = {
+ 		.tempSlopeLow = 72,
+ 		.tempSlopeHigh = 105,
+ 		.xatten1DBLow = {0, 0, 0},
+ 		.xatten1MarginLow = {0, 0, 0},
+ 		.xatten1DBHigh = {0, 0, 0},
+ 		.xatten1MarginHigh = {0, 0, 0}
+ 	 },
+ 	.calFreqPier5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5785, 0)
+ 	},
+ 	.calPierData5G = {
+ 			{
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 			},
+ 			{
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 			},
+ 			{
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 				{0, 0, 0, 0, 0},
+ 			},
+ 
+ 	},
+ 	.calTarget_freqbin_5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5785, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT20 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT40 = {
+ 		FREQ2FBIN(5190, 0),
+ 		FREQ2FBIN(5230, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5410, 0),
+ 		FREQ2FBIN(5510, 0),
+ 		FREQ2FBIN(5670, 0),
+ 		FREQ2FBIN(5755, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	 },
+ 	.calTargetPower5G = {
+ 		/* 6-24,36,48,54 */
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 		{ {42, 40, 40, 34} },
+ 	 },
+ 	.calTargetPower5GHT20 = {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {40, 40, 40, 40, 32, 28, 40, 40, 32, 28, 40, 40, 32, 20} },
+ 		{ {40, 40, 40, 40, 32, 28, 40, 40, 32, 28, 40, 40, 32, 20} },
+ 		{ {40, 40, 40, 40, 32, 28, 40, 40, 32, 28, 40, 40, 32, 20} },
+ 		{ {40, 40, 40, 40, 32, 28, 40, 40, 32, 28, 40, 40, 32, 20} },
+ 		{ {40, 40, 40, 40, 32, 28, 40, 40, 32, 28, 40, 40, 32, 20} },
+ 		{ {40, 40, 40, 40, 32, 28, 40, 40, 32, 28, 40, 40, 32, 20} },
+ 		{ {38, 38, 38, 38, 32, 28, 38, 38, 32, 28, 38, 38, 32, 26} },
+ 		{ {36, 36, 36, 36, 32, 28, 36, 36, 32, 28, 36, 36, 32, 26} },
+ 	 },
+ 	.calTargetPower5GHT40 =  {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {40, 40, 40, 38, 30, 26, 40, 40, 30, 26, 40, 40, 30, 24} },
+ 		{ {40, 40, 40, 38, 30, 26, 40, 40, 30, 26, 40, 40, 30, 24} },
+ 		{ {40, 40, 40, 38, 30, 26, 40, 40, 30, 26, 40, 40, 30, 24} },
+ 		{ {40, 40, 40, 38, 30, 26, 40, 40, 30, 26, 40, 40, 30, 24} },
+ 		{ {40, 40, 40, 38, 30, 26, 40, 40, 30, 26, 40, 40, 30, 24} },
+ 		{ {40, 40, 40, 38, 30, 26, 40, 40, 30, 26, 40, 40, 30, 24} },
+ 		{ {36, 36, 36, 36, 30, 26, 36, 36, 30, 26, 36, 36, 30, 24} },
+ 		{ {34, 34, 34, 34, 30, 26, 34, 34, 30, 26, 34, 34, 30, 24} },
+ 	 },
+ 	.ctlIndex_5G =  {
+ 		0x10, 0x16, 0x18, 0x40, 0x46,
+ 		0x48, 0x30, 0x36, 0x38
+ 	},
+ 	.ctl_freqbin_5G =  {
+ 		{
+ 			/* Data[0].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[0].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[0].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[0].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[0].ctlEdges[4].bChannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[0].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[0].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[0].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 		{
+ 			/* Data[1].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[1].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[1].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[1].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[1].ctlEdges[4].bChannel */ FREQ2FBIN(5520, 0),
+ 			/* Data[1].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[1].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[1].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[2].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[2].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[2].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[2].ctlEdges[3].bChannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[2].ctlEdges[4].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[2].ctlEdges[5].bChannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[2].ctlEdges[6].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[2].ctlEdges[7].bChannel */ FREQ2FBIN(5755, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[3].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[3].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[3].ctlEdges[2].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[3].ctlEdges[3].bChannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[3].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[3].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[3].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[3].ctlEdges[7].bChannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[4].ctlEdges[4].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[5].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[7].bChannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[5].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[5].ctlEdges[4].bChannel */ FREQ2FBIN(5590, 0),
+ 			/* Data[5].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[5].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[5].ctlEdges[7].bChannel */ 0xFF
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[6].ctlEdges[2].bChannel */ FREQ2FBIN(5220, 0),
+ 			/* Data[6].ctlEdges[3].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[6].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[6].ctlEdges[5].bChannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[6].ctlEdges[6].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[6].ctlEdges[7].bChannel */ FREQ2FBIN(5745, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[7].ctlEdges[4].bChannel */ FREQ2FBIN(5560, 0),
+ 			/* Data[7].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[7].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[7].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[8].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[8].ctlEdges[4].bChannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[8].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[8].ctlEdges[6].bChannel */ FREQ2FBIN(5755, 0),
+ 			/* Data[8].ctlEdges[7].bChannel */ FREQ2FBIN(5795, 0)
+ 		}
+ 	 },
+ 	.ctlPowerData_5G = {
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 0}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 0}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 			}
+ 		},
+ 	 }
+ };
+ 
+ 
+ static const struct ar9300_eeprom ar9300_h112 = {
+ 	.eepromVersion = 2,
+ 	.templateVersion = 3,
+ 	.macAddr = {0x00, 0x03, 0x7f, 0x0, 0x0, 0x0},
+ 	.custData = {"h112-241-f0000"},
+ 	.baseEepHeader = {
+ 		.regDmn = { LE16(0), LE16(0x1f) },
+ 		.txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
+ 		.opCapFlags = {
+ 			.opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
+ 			.eepMisc = 0,
+ 		},
+ 		.rfSilent = 0,
+ 		.blueToothOptions = 0,
+ 		.deviceCap = 0,
+ 		.deviceType = 5, /* takes lower byte in eeprom location */
+ 		.pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
+ 		.params_for_tuning_caps = {0, 0},
+ 		.featureEnable = 0x0d,
+ 		/*
+ 		 * bit0 - enable tx temp comp - disabled
+ 		 * bit1 - enable tx volt comp - disabled
+ 		 * bit2 - enable fastClock - enabled
+ 		 * bit3 - enable doubling - enabled
+ 		 * bit4 - enable internal regulator - disabled
+ 		 * bit5 - enable pa predistortion - disabled
+ 		 */
+ 		.miscConfiguration = 0, /* bit0 - turn down drivestrength */
+ 		.eepromWriteEnableGpio = 6,
+ 		.wlanDisableGpio = 0,
+ 		.wlanLedGpio = 8,
+ 		.rxBandSelectGpio = 0xff,
+ 		.txrxgain = 0x10,
+ 		.swreg = 0,
+ 	},
+ 	.modalHeader2G = {
+ 		/* ar9300_modal_eep_header  2g */
+ 		/* 4 idle,t1,t2,b(4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x110),
+ 		/* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
+ 		.antCtrlCommon2 = LE32(0x44444),
+ 
+ 		/*
+ 		 * antCtrlChain[AR9300_MAX_CHAINS]; 6 idle, t, r,
+ 		 * rx1, rx12, b (2 bits each)
+ 		 */
+ 		.antCtrlChain = { LE16(0x150), LE16(0x150), LE16(0x150) },
+ 
+ 		/*
+ 		 * xatten1DB[AR9300_MAX_CHAINS];  3 xatten1_db
+ 		 * for ar9280 (0xa20c/b20c 5:0)
+ 		 */
+ 		.xatten1DB = {0, 0, 0},
+ 
+ 		/*
+ 		 * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
+ 		 * for ar9280 (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0, 0, 0},
+ 		.tempSlope = 25,
+ 		.voltSlope = 0,
+ 
+ 		/*
+ 		 * spurChans[OSPREY_EEPROM_MODAL_SPURS]; spur
+ 		 * channels in usual fbin coding format
+ 		 */
+ 		.spurChans = {FREQ2FBIN(2464, 1), 0, 0, 0, 0},
+ 
+ 		/*
+ 		 * noiseFloorThreshCh[AR9300_MAX_CHAINS]; 3 Check
+ 		 * if the register is per chain
+ 		 */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {1, 1, 1},/* 3 chain */
+ 		.db_stage2 = {1, 1, 1}, /* 3 chain  */
+ 		.db_stage3 = {0, 0, 0},
+ 		.db_stage4 = {0, 0, 0},
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2c,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x80c080),
+ 		.papdRateMaskHt40 = LE32(0x80c080),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	},
+ 	.base_ext1 = {
+ 		.ant_div_control = 0,
+ 		.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+ 	},
+ 	.calFreqPier2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1),
+ 	},
+ 	/* ar9300_cal_data_per_freq_op_loop 2g */
+ 	.calPierData2G = {
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 	},
+ 	.calTarget_freqbin_Cck = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2484, 1),
+ 	},
+ 	.calTarget_freqbin_2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	},
+ 	.calTarget_freqbin_2GHT20 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	},
+ 	.calTarget_freqbin_2GHT40 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	},
+ 	.calTargetPowerCck = {
+ 		/* 1L-5L,5S,11L,11S */
+ 		{ {34, 34, 34, 34} },
+ 		{ {34, 34, 34, 34} },
+ 	},
+ 	.calTargetPower2G = {
+ 		/* 6-24,36,48,54 */
+ 		{ {34, 34, 32, 32} },
+ 		{ {34, 34, 32, 32} },
+ 		{ {34, 34, 32, 32} },
+ 	},
+ 	.calTargetPower2GHT20 = {
+ 		{ {32, 32, 32, 32, 32, 30, 32, 32, 30, 28, 28, 28, 28, 24} },
+ 		{ {32, 32, 32, 32, 32, 30, 32, 32, 30, 28, 28, 28, 28, 24} },
+ 		{ {32, 32, 32, 32, 32, 30, 32, 32, 30, 28, 28, 28, 28, 24} },
+ 	},
+ 	.calTargetPower2GHT40 = {
+ 		{ {30, 30, 30, 30, 30, 28, 30, 30, 28, 26, 26, 26, 26, 22} },
+ 		{ {30, 30, 30, 30, 30, 28, 30, 30, 28, 26, 26, 26, 26, 22} },
+ 		{ {30, 30, 30, 30, 30, 28, 30, 30, 28, 26, 26, 26, 26, 22} },
+ 	},
+ 	.ctlIndex_2G =  {
+ 		0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
+ 		0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
+ 	},
+ 	.ctl_freqbin_2G = {
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2457, 1),
+ 			FREQ2FBIN(2462, 1)
+ 		},
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 		{
+ 			FREQ2FBIN(2422, 1),
+ 			FREQ2FBIN(2427, 1),
+ 			FREQ2FBIN(2447, 1),
+ 			FREQ2FBIN(2452, 1)
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			/* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(2484, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[9].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[9].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[9].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[10].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[10].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[10].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[11].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[11].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[11].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[11].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
+ 		}
+ 	},
+ 	.ctlPowerData_2G = {
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
+ 
+ 		{ { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		{ { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 		{ { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 	},
+ 	.modalHeader5G = {
+ 		/* 4 idle,t1,t2,b (4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x220),
+ 		/* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
+ 		.antCtrlCommon2 = LE32(0x44444),
+ 		/* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
+ 		.antCtrlChain = {
+ 			LE16(0x150), LE16(0x150), LE16(0x150),
+ 		},
+ 		/* xatten1DB 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
+ 		.xatten1DB = {0, 0, 0},
+ 
+ 		/*
+ 		 * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
+ 		 * for merlin (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0, 0, 0},
+ 		.tempSlope = 45,
+ 		.voltSlope = 0,
+ 		/* spurChans spur channels in usual fbin coding format */
+ 		.spurChans = {0, 0, 0, 0, 0},
+ 		/* noiseFloorThreshCh Check if the register is per chain */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {3, 3, 3}, /* 3 chain */
+ 		.db_stage2 = {3, 3, 3}, /* 3 chain */
+ 		.db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
+ 		.db_stage4 = {3, 3, 3},	 /* don't exist for 2G */
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2d,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0cf0e0e0),
+ 		.papdRateMaskHt40 = LE32(0x6cf0e0e0),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	},
+ 	.base_ext2 = {
+ 		.tempSlopeLow = 40,
+ 		.tempSlopeHigh = 50,
+ 		.xatten1DBLow = {0, 0, 0},
+ 		.xatten1MarginLow = {0, 0, 0},
+ 		.xatten1DBHigh = {0, 0, 0},
+ 		.xatten1MarginHigh = {0, 0, 0}
+ 	},
+ 	.calFreqPier5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calPierData5G = {
+ 		{
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 		},
+ 		{
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 		},
+ 		{
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 		},
+ 
+ 	},
+ 	.calTarget_freqbin_5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT20 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT40 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5240, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5745, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTargetPower5G = {
+ 		/* 6-24,36,48,54 */
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 		{ {30, 30, 28, 24} },
+ 	},
+ 	.calTargetPower5GHT20 = {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {30, 30, 30, 28, 24, 20, 30, 28, 24, 20, 20, 20, 20, 16} },
+ 		{ {30, 30, 30, 28, 24, 20, 30, 28, 24, 20, 20, 20, 20, 16} },
+ 		{ {30, 30, 30, 26, 22, 18, 30, 26, 22, 18, 18, 18, 18, 16} },
+ 		{ {30, 30, 30, 26, 22, 18, 30, 26, 22, 18, 18, 18, 18, 16} },
+ 		{ {30, 30, 30, 24, 20, 16, 30, 24, 20, 16, 16, 16, 16, 14} },
+ 		{ {30, 30, 30, 24, 20, 16, 30, 24, 20, 16, 16, 16, 16, 14} },
+ 		{ {30, 30, 30, 22, 18, 14, 30, 22, 18, 14, 14, 14, 14, 12} },
+ 		{ {30, 30, 30, 22, 18, 14, 30, 22, 18, 14, 14, 14, 14, 12} },
+ 	},
+ 	.calTargetPower5GHT40 =  {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {28, 28, 28, 26, 22, 18, 28, 26, 22, 18, 18, 18, 18, 14} },
+ 		{ {28, 28, 28, 26, 22, 18, 28, 26, 22, 18, 18, 18, 18, 14} },
+ 		{ {28, 28, 28, 24, 20, 16, 28, 24, 20, 16, 16, 16, 16, 12} },
+ 		{ {28, 28, 28, 24, 20, 16, 28, 24, 20, 16, 16, 16, 16, 12} },
+ 		{ {28, 28, 28, 22, 18, 14, 28, 22, 18, 14, 14, 14, 14, 10} },
+ 		{ {28, 28, 28, 22, 18, 14, 28, 22, 18, 14, 14, 14, 14, 10} },
+ 		{ {28, 28, 28, 20, 16, 12, 28, 20, 16, 12, 12, 12, 12, 8} },
+ 		{ {28, 28, 28, 20, 16, 12, 28, 20, 16, 12, 12, 12, 12, 8} },
+ 	},
+ 	.ctlIndex_5G =  {
+ 		0x10, 0x16, 0x18, 0x40, 0x46,
+ 		0x48, 0x30, 0x36, 0x38
+ 	},
+ 	.ctl_freqbin_5G =  {
+ 		{
+ 			/* Data[0].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[0].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[0].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[0].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[0].ctlEdges[4].bChannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[0].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[0].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[0].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 		{
+ 			/* Data[1].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[1].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[1].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[1].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[1].ctlEdges[4].bChannel */ FREQ2FBIN(5520, 0),
+ 			/* Data[1].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[1].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[1].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[2].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[2].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[2].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[2].ctlEdges[3].bChannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[2].ctlEdges[4].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[2].ctlEdges[5].bChannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[2].ctlEdges[6].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[2].ctlEdges[7].bChannel */ FREQ2FBIN(5755, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[3].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[3].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[3].ctlEdges[2].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[3].ctlEdges[3].bChannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[3].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[3].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[3].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[3].ctlEdges[7].bChannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[4].ctlEdges[4].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[5].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[4].ctlEdges[7].bChannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[5].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[5].ctlEdges[4].bChannel */ FREQ2FBIN(5590, 0),
+ 			/* Data[5].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[5].ctlEdges[6].bChannel */ 0xFF,
+ 			/* Data[5].ctlEdges[7].bChannel */ 0xFF
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[6].ctlEdges[2].bChannel */ FREQ2FBIN(5220, 0),
+ 			/* Data[6].ctlEdges[3].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[6].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[6].ctlEdges[5].bChannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[6].ctlEdges[6].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[6].ctlEdges[7].bChannel */ FREQ2FBIN(5745, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[7].ctlEdges[4].bChannel */ FREQ2FBIN(5560, 0),
+ 			/* Data[7].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[7].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[7].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[8].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[8].ctlEdges[4].bChannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[8].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[8].ctlEdges[6].bChannel */ FREQ2FBIN(5755, 0),
+ 			/* Data[8].ctlEdges[7].bChannel */ FREQ2FBIN(5795, 0)
+ 		}
+ 	},
+ 	.ctlPowerData_5G = {
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 0}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 0}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 			}
+ 		},
+ 	}
+ };
+ 
+ 
+ static const struct ar9300_eeprom ar9300_x112 = {
+ 	.eepromVersion = 2,
+ 	.templateVersion = 5,
+ 	.macAddr = {0x00, 0x03, 0x7f, 0x0, 0x0, 0x0},
+ 	.custData = {"x112-041-f0000"},
+ 	.baseEepHeader = {
+ 		.regDmn = { LE16(0), LE16(0x1f) },
+ 		.txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
+ 		.opCapFlags = {
+ 			.opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
+ 			.eepMisc = 0,
+ 		},
+ 		.rfSilent = 0,
+ 		.blueToothOptions = 0,
+ 		.deviceCap = 0,
+ 		.deviceType = 5, /* takes lower byte in eeprom location */
+ 		.pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
+ 		.params_for_tuning_caps = {0, 0},
+ 		.featureEnable = 0x0d,
+ 		/*
+ 		 * bit0 - enable tx temp comp - disabled
+ 		 * bit1 - enable tx volt comp - disabled
+ 		 * bit2 - enable fastclock - enabled
+ 		 * bit3 - enable doubling - enabled
+ 		 * bit4 - enable internal regulator - disabled
+ 		 * bit5 - enable pa predistortion - disabled
+ 		 */
+ 		.miscConfiguration = 0, /* bit0 - turn down drivestrength */
+ 		.eepromWriteEnableGpio = 6,
+ 		.wlanDisableGpio = 0,
+ 		.wlanLedGpio = 8,
+ 		.rxBandSelectGpio = 0xff,
+ 		.txrxgain = 0x0,
+ 		.swreg = 0,
+ 	},
+ 	.modalHeader2G = {
+ 		/* ar9300_modal_eep_header  2g */
+ 		/* 4 idle,t1,t2,b(4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x110),
+ 		/* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
+ 		.antCtrlCommon2 = LE32(0x22222),
+ 
+ 		/*
+ 		 * antCtrlChain[ar9300_max_chains]; 6 idle, t, r,
+ 		 * rx1, rx12, b (2 bits each)
+ 		 */
+ 		.antCtrlChain = { LE16(0x10), LE16(0x10), LE16(0x10) },
+ 
+ 		/*
+ 		 * xatten1DB[AR9300_max_chains];  3 xatten1_db
+ 		 * for ar9280 (0xa20c/b20c 5:0)
+ 		 */
+ 		.xatten1DB = {0x1b, 0x1b, 0x1b},
+ 
+ 		/*
+ 		 * xatten1Margin[ar9300_max_chains]; 3 xatten1_margin
+ 		 * for ar9280 (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0x15, 0x15, 0x15},
+ 		.tempSlope = 50,
+ 		.voltSlope = 0,
+ 
+ 		/*
+ 		 * spurChans[OSPrey_eeprom_modal_sPURS]; spur
+ 		 * channels in usual fbin coding format
+ 		 */
+ 		.spurChans = {FREQ2FBIN(2464, 1), 0, 0, 0, 0},
+ 
+ 		/*
+ 		 * noiseFloorThreshch[ar9300_max_cHAINS]; 3 Check
+ 		 * if the register is per chain
+ 		 */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {1, 1, 1},/* 3 chain */
+ 		.db_stage2 = {1, 1, 1}, /* 3 chain  */
+ 		.db_stage3 = {0, 0, 0},
+ 		.db_stage4 = {0, 0, 0},
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2c,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0c80c080),
+ 		.papdRateMaskHt40 = LE32(0x0080c080),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	},
+ 	.base_ext1 = {
+ 		.ant_div_control = 0,
+ 		.future = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+ 	},
+ 	.calFreqPier2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1),
+ 	},
+ 	/* ar9300_cal_data_per_freq_op_loop 2g */
+ 	.calPierData2G = {
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 		{ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
+ 	},
+ 	.calTarget_freqbin_Cck = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2472, 1),
+ 	},
+ 	.calTarget_freqbin_2G = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	},
+ 	.calTarget_freqbin_2GHT20 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	},
+ 	.calTarget_freqbin_2GHT40 = {
+ 		FREQ2FBIN(2412, 1),
+ 		FREQ2FBIN(2437, 1),
+ 		FREQ2FBIN(2472, 1)
+ 	},
+ 	.calTargetPowerCck = {
+ 		/* 1L-5L,5S,11L,11s */
+ 		{ {38, 38, 38, 38} },
+ 		{ {38, 38, 38, 38} },
+ 	},
+ 	.calTargetPower2G = {
+ 		/* 6-24,36,48,54 */
+ 		{ {38, 38, 36, 34} },
+ 		{ {38, 38, 36, 34} },
+ 		{ {38, 38, 34, 32} },
+ 	},
+ 	.calTargetPower2GHT20 = {
+ 		{ {36, 36, 36, 36, 36, 34, 34, 32, 30, 28, 28, 28, 28, 26} },
+ 		{ {36, 36, 36, 36, 36, 34, 36, 34, 32, 30, 30, 30, 28, 26} },
+ 		{ {36, 36, 36, 36, 36, 34, 34, 32, 30, 28, 28, 28, 28, 26} },
+ 	},
+ 	.calTargetPower2GHT40 = {
+ 		{ {36, 36, 36, 36, 34, 32, 32, 30, 28, 26, 26, 26, 26, 24} },
+ 		{ {36, 36, 36, 36, 34, 32, 34, 32, 30, 28, 28, 28, 28, 24} },
+ 		{ {36, 36, 36, 36, 34, 32, 32, 30, 28, 26, 26, 26, 26, 24} },
+ 	},
+ 	.ctlIndex_2G =  {
+ 		0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
+ 		0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
+ 	},
+ 	.ctl_freqbin_2G = {
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2457, 1),
+ 			FREQ2FBIN(2462, 1)
+ 		},
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 
+ 		{
+ 			FREQ2FBIN(2412, 1),
+ 			FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2462, 1),
+ 			0xFF,
+ 		},
+ 		{
+ 			FREQ2FBIN(2422, 1),
+ 			FREQ2FBIN(2427, 1),
+ 			FREQ2FBIN(2447, 1),
+ 			FREQ2FBIN(2452, 1)
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctledges[0].bchannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[4].ctledges[1].bchannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[4].ctledges[2].bchannel */ FREQ2FBIN(2472, 1),
+ 			/* Data[4].ctledges[3].bchannel */ FREQ2FBIN(2484, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctledges[0].bchannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[5].ctledges[1].bchannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[5].ctledges[2].bchannel */ FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctledges[0].bchannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[6].ctledges[1].bchannel */ FREQ2FBIN(2417, 1),
+ 			FREQ2FBIN(2472, 1),
+ 			0,
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctledges[0].bchannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[7].ctledges[1].bchannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[7].ctledges[2].bchannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[7].ctledges[3].bchannel */ FREQ2FBIN(2462, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctledges[0].bchannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[8].ctledges[1].bchannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[8].ctledges[2].bchannel */ FREQ2FBIN(2472, 1),
+ 		},
+ 
+ 		{
+ 			/* Data[9].ctledges[0].bchannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[9].ctledges[1].bchannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[9].ctledges[2].bchannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[10].ctledges[0].bchannel */ FREQ2FBIN(2412, 1),
+ 			/* Data[10].ctledges[1].bchannel */ FREQ2FBIN(2417, 1),
+ 			/* Data[10].ctledges[2].bchannel */ FREQ2FBIN(2472, 1),
+ 			0
+ 		},
+ 
+ 		{
+ 			/* Data[11].ctledges[0].bchannel */ FREQ2FBIN(2422, 1),
+ 			/* Data[11].ctledges[1].bchannel */ FREQ2FBIN(2427, 1),
+ 			/* Data[11].ctledges[2].bchannel */ FREQ2FBIN(2447, 1),
+ 			/* Data[11].ctledges[3].bchannel */ FREQ2FBIN(2462, 1),
+ 		}
+ 	},
+ 	.ctlPowerData_2G = {
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
+ 
+ 		{ { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		{ { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 
+ 		{ { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
+ 		{ { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 		{ { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
+ 	},
+ 	.modalHeader5G = {
+ 		/* 4 idle,t1,t2,b (4 bits per setting) */
+ 		.antCtrlCommon = LE32(0x110),
+ 		/* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
+ 		.antCtrlCommon2 = LE32(0x22222),
+ 		/* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
+ 		.antCtrlChain = {
+ 			LE16(0x0), LE16(0x0), LE16(0x0),
+ 		},
+ 		/* xatten1DB 3 xatten1_db for ar9280 (0xa20c/b20c 5:0) */
+ 		.xatten1DB = {0x13, 0x19, 0x17},
+ 
+ 		/*
+ 		 * xatten1Margin[ar9300_max_chains]; 3 xatten1_margin
+ 		 * for merlin (0xa20c/b20c 16:12
+ 		 */
+ 		.xatten1Margin = {0x19, 0x19, 0x19},
+ 		.tempSlope = 70,
+ 		.voltSlope = 15,
+ 		/* spurChans spur channels in usual fbin coding format */
+ 		.spurChans = {0, 0, 0, 0, 0},
+ 		/* noiseFloorThreshch check if the register is per chain */
+ 		.noiseFloorThreshCh = {-1, 0, 0},
+ 		.ob = {3, 3, 3}, /* 3 chain */
+ 		.db_stage2 = {3, 3, 3}, /* 3 chain */
+ 		.db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
+ 		.db_stage4 = {3, 3, 3},	 /* don't exist for 2G */
+ 		.xpaBiasLvl = 0,
+ 		.txFrameToDataStart = 0x0e,
+ 		.txFrameToPaOn = 0x0e,
+ 		.txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
+ 		.antennaGain = 0,
+ 		.switchSettling = 0x2d,
+ 		.adcDesiredSize = -30,
+ 		.txEndToXpaOff = 0,
+ 		.txEndToRxOn = 0x2,
+ 		.txFrameToXpaOn = 0xe,
+ 		.thresh62 = 28,
+ 		.papdRateMaskHt20 = LE32(0x0cf0e0e0),
+ 		.papdRateMaskHt40 = LE32(0x6cf0e0e0),
+ 		.futureModal = {
+ 			0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 		},
+ 	},
+ 	.base_ext2 = {
+ 		.tempSlopeLow = 72,
+ 		.tempSlopeHigh = 105,
+ 		.xatten1DBLow = {0x10, 0x14, 0x10},
+ 		.xatten1MarginLow = {0x19, 0x19 , 0x19},
+ 		.xatten1DBHigh = {0x1d, 0x20, 0x24},
+ 		.xatten1MarginHigh = {0x10, 0x10, 0x10}
+ 	},
+ 	.calFreqPier5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5700, 0),
+ 		FREQ2FBIN(5785, 0)
+ 	},
+ 	.calPierData5G = {
+ 		{
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 		},
+ 		{
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 		},
+ 		{
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 			{0, 0, 0, 0, 0},
+ 		},
+ 
+ 	},
+ 	.calTarget_freqbin_5G = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT20 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTarget_freqbin_5GHT40 = {
+ 		FREQ2FBIN(5180, 0),
+ 		FREQ2FBIN(5220, 0),
+ 		FREQ2FBIN(5320, 0),
+ 		FREQ2FBIN(5400, 0),
+ 		FREQ2FBIN(5500, 0),
+ 		FREQ2FBIN(5600, 0),
+ 		FREQ2FBIN(5725, 0),
+ 		FREQ2FBIN(5825, 0)
+ 	},
+ 	.calTargetPower5G = {
+ 		/* 6-24,36,48,54 */
+ 		{ {32, 32, 28, 26} },
+ 		{ {32, 32, 28, 26} },
+ 		{ {32, 32, 28, 26} },
+ 		{ {32, 32, 26, 24} },
+ 		{ {32, 32, 26, 24} },
+ 		{ {32, 32, 24, 22} },
+ 		{ {30, 30, 24, 22} },
+ 		{ {30, 30, 24, 22} },
+ 	},
+ 	.calTargetPower5GHT20 = {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {32, 32, 32, 32, 28, 26, 32, 28, 26, 24, 24, 24, 22, 22} },
+ 		{ {32, 32, 32, 32, 28, 26, 32, 28, 26, 24, 24, 24, 22, 22} },
+ 		{ {32, 32, 32, 32, 28, 26, 32, 28, 26, 24, 24, 24, 22, 22} },
+ 		{ {32, 32, 32, 32, 28, 26, 32, 26, 24, 22, 22, 22, 20, 20} },
+ 		{ {32, 32, 32, 32, 28, 26, 32, 26, 24, 22, 20, 18, 16, 16} },
+ 		{ {32, 32, 32, 32, 28, 26, 32, 24, 20, 16, 18, 16, 14, 14} },
+ 		{ {30, 30, 30, 30, 28, 26, 30, 24, 20, 16, 18, 16, 14, 14} },
+ 		{ {30, 30, 30, 30, 28, 26, 30, 24, 20, 16, 18, 16, 14, 14} },
+ 	},
+ 	.calTargetPower5GHT40 =  {
+ 		/*
+ 		 * 0_8_16,1-3_9-11_17-19,
+ 		 * 4,5,6,7,12,13,14,15,20,21,22,23
+ 		 */
+ 		{ {32, 32, 32, 30, 28, 26, 30, 28, 26, 24, 24, 24, 22, 22} },
+ 		{ {32, 32, 32, 30, 28, 26, 30, 28, 26, 24, 24, 24, 22, 22} },
+ 		{ {32, 32, 32, 30, 28, 26, 30, 28, 26, 24, 24, 24, 22, 22} },
+ 		{ {32, 32, 32, 30, 28, 26, 30, 26, 24, 22, 22, 22, 20, 20} },
+ 		{ {32, 32, 32, 30, 28, 26, 30, 26, 24, 22, 20, 18, 16, 16} },
+ 		{ {32, 32, 32, 30, 28, 26, 30, 22, 20, 16, 18, 16, 14, 14} },
+ 		{ {30, 30, 30, 30, 28, 26, 30, 22, 20, 16, 18, 16, 14, 14} },
+ 		{ {30, 30, 30, 30, 28, 26, 30, 22, 20, 16, 18, 16, 14, 14} },
+ 	},
+ 	.ctlIndex_5G =  {
+ 		0x10, 0x16, 0x18, 0x40, 0x46,
+ 		0x48, 0x30, 0x36, 0x38
+ 	},
+ 	.ctl_freqbin_5G =  {
+ 		{
+ 			/* Data[0].ctledges[0].bchannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[0].ctledges[1].bchannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[0].ctledges[2].bchannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[0].ctledges[3].bchannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[0].ctledges[4].bchannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[0].ctledges[5].bchannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[0].ctledges[6].bchannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[0].ctledges[7].bchannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 		{
+ 			/* Data[1].ctledges[0].bchannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[1].ctledges[1].bchannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[1].ctledges[2].bchannel */ FREQ2FBIN(5280, 0),
+ 			/* Data[1].ctledges[3].bchannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[1].ctledges[4].bchannel */ FREQ2FBIN(5520, 0),
+ 			/* Data[1].ctledges[5].bchannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[1].ctledges[6].bchannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[1].ctledges[7].bchannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[2].ctledges[0].bchannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[2].ctledges[1].bchannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[2].ctledges[2].bchannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[2].ctledges[3].bchannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[2].ctledges[4].bchannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[2].ctledges[5].bchannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[2].ctledges[6].bchannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[2].ctledges[7].bchannel */ FREQ2FBIN(5755, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[3].ctledges[0].bchannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[3].ctledges[1].bchannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[3].ctledges[2].bchannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[3].ctledges[3].bchannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[3].ctledges[4].bchannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[3].ctledges[5].bchannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[3].ctledges[6].bchannel */ 0xFF,
+ 			/* Data[3].ctledges[7].bchannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[4].ctledges[0].bchannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[4].ctledges[1].bchannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[4].ctledges[2].bchannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[4].ctledges[3].bchannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[4].ctledges[4].bchannel */ 0xFF,
+ 			/* Data[4].ctledges[5].bchannel */ 0xFF,
+ 			/* Data[4].ctledges[6].bchannel */ 0xFF,
+ 			/* Data[4].ctledges[7].bchannel */ 0xFF,
+ 		},
+ 
+ 		{
+ 			/* Data[5].ctledges[0].bchannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[5].ctledges[1].bchannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[5].ctledges[2].bchannel */ FREQ2FBIN(5310, 0),
+ 			/* Data[5].ctledges[3].bchannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[5].ctledges[4].bchannel */ FREQ2FBIN(5590, 0),
+ 			/* Data[5].ctledges[5].bchannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[5].ctledges[6].bchannel */ 0xFF,
+ 			/* Data[5].ctledges[7].bchannel */ 0xFF
+ 		},
+ 
+ 		{
+ 			/* Data[6].ctledges[0].bchannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[6].ctledges[1].bchannel */ FREQ2FBIN(5200, 0),
+ 			/* Data[6].ctledges[2].bchannel */ FREQ2FBIN(5220, 0),
+ 			/* Data[6].ctledges[3].bchannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[6].ctledges[4].bchannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[6].ctledges[5].bchannel */ FREQ2FBIN(5600, 0),
+ 			/* Data[6].ctledges[6].bchannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[6].ctledges[7].bchannel */ FREQ2FBIN(5745, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[7].ctledges[0].bchannel */ FREQ2FBIN(5180, 0),
+ 			/* Data[7].ctledges[1].bchannel */ FREQ2FBIN(5260, 0),
+ 			/* Data[7].ctledges[2].bchannel */ FREQ2FBIN(5320, 0),
+ 			/* Data[7].ctledges[3].bchannel */ FREQ2FBIN(5500, 0),
+ 			/* Data[7].ctledges[4].bchannel */ FREQ2FBIN(5560, 0),
+ 			/* Data[7].ctledges[5].bchannel */ FREQ2FBIN(5700, 0),
+ 			/* Data[7].ctledges[6].bchannel */ FREQ2FBIN(5745, 0),
+ 			/* Data[7].ctledges[7].bchannel */ FREQ2FBIN(5825, 0)
+ 		},
+ 
+ 		{
+ 			/* Data[8].ctledges[0].bchannel */ FREQ2FBIN(5190, 0),
+ 			/* Data[8].ctledges[1].bchannel */ FREQ2FBIN(5230, 0),
+ 			/* Data[8].ctledges[2].bchannel */ FREQ2FBIN(5270, 0),
+ 			/* Data[8].ctledges[3].bchannel */ FREQ2FBIN(5510, 0),
+ 			/* Data[8].ctledges[4].bchannel */ FREQ2FBIN(5550, 0),
+ 			/* Data[8].ctledges[5].bchannel */ FREQ2FBIN(5670, 0),
+ 			/* Data[8].ctledges[6].bchannel */ FREQ2FBIN(5755, 0),
+ 			/* Data[8].ctledges[7].bchannel */ FREQ2FBIN(5795, 0)
+ 		}
+ 	},
+ 	.ctlPowerData_5G = {
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 0}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 				{60, 0}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 0}, {60, 0}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 1},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 1}, {60, 0},
+ 			}
+ 		},
+ 		{
+ 			{
+ 				{60, 1}, {60, 0}, {60, 1}, {60, 1},
+ 				{60, 1}, {60, 1}, {60, 0}, {60, 1},
+ 			}
+ 		},
+ 	}
+ };
+ 
+ static const struct ar9300_eeprom ar9300_h116 = {
+ 	.eepromVersion = 2,
+ 	.templateVersion = 4,
+ 	.macAddr = {0x00, 0x03, 0x7f, 0x0, 0x0, 0x0},
+ 	.custData = {"h116-041-f0000"},
  	.baseEepHeader = {
  		.regDmn = { LE16(0), LE16(0x1f) },
- 		.txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
+ 		.txrxMask =  0x33, /* 4 bits tx and 4 bits rx */
  		.opCapFlags = {
  			.opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
  			.eepMisc = 0,

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-05-12  2:15 Stephen Rothwell
  2010-05-12 16:15 ` reinette chatre
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2010-05-12  2:15 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Johannes Berg, Reinette Chatre,
	John W. Linville

Hi all,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl-dev.h between commit
562db532760827f6ce30801a08e6b568848bc9f2 ("iwlagn: wait for asynchronous
firmware loading") from the wireless-current tree and commit
ee525d13f501baeaa33209620398adaf0a820629 ("iwlwifi: move 3945 specific
data into union") from the net tree.

Just context changes. I fixed it up (see below) and can carry the fix for
a while.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwlwifi/iwl-dev.h
index 4d4c651,58c69a5..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@@ -1304,12 -1274,6 +1274,8 @@@ struct iwl_priv 
  	struct delayed_work alive_start;
  	struct delayed_work scan_check;
  
 +	struct completion firmware_loading_complete;
 +
- 	/*For 3945 only*/
- 	struct delayed_work thermal_periodic;
- 	struct delayed_work rfkill_poll;
- 
  	/* TX Power */
  	s8 tx_power_user_lmt;
  	s8 tx_power_device_lmt;

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-03-30  2:37 Stephen Rothwell
  2010-03-30 13:12 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2010-03-30  2:37 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Shanyu Zhao, Zhu Yi, Reinette Chatre,
	John W. Linville, Johannes Berg

Hi all,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl-agn.c between commit
d4dca4e53fde2953d74198a2c445db1d36ed9fd2 ("iwlwifi: clear unattended
interrupts in tasklet") from the wireless-current tree and commit
a4c8b2a692601de0a7bcb032b69f806050944dff ("iwlwifi: move ICT data to agn
part of union") from the net tree.

I fixed it up (see below) and can carry the fix for a while.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwlwifi/iwl-agn.c
index e4c2e1e,0a376f7..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@@ -1258,17 -1236,9 +1236,17 @@@ static void iwl_irq_tasklet(struct iwl_
  	/* Ack/clear/reset pending uCode interrupts.
  	 * Note:  Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS,
  	 */
 -	iwl_write32(priv, CSR_INT, priv->_agn.inta);
 +	/* There is a hardware bug in the interrupt mask function that some
 +	 * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if
 +	 * they are disabled in the CSR_INT_MASK register. Furthermore the
 +	 * ICT interrupt handling mechanism has another bug that might cause
 +	 * these unmasked interrupts fail to be detected. We workaround the
 +	 * hardware bugs here by ACKing all the possible interrupts so that
 +	 * interrupt coalescing can still be achieved.
 +	 */
- 	iwl_write32(priv, CSR_INT, priv->inta | ~priv->inta_mask);
++	iwl_write32(priv, CSR_INT, priv->_agn.inta | ~priv->inta_mask);
  
- 	inta = priv->inta;
+ 	inta = priv->_agn.inta;
  
  #ifdef CONFIG_IWLWIFI_DEBUG
  	if (iwl_get_debug_level(priv) & IWL_DL_ISR) {

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-02-15  4:20 Stephen Rothwell
  2010-02-15  6:22 ` David Miller
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2010-02-15  4:20 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Jouni Malinen, John W. Linville

Hi all,

Today's linux-next merge of the net tree got a conflict in
net/mac80211/rate.c between commit
5affcd6ba2036b59a4dee3f0576ae3584e92e4f1 ("mac80211: fix handling of
null-rate control in rate_control_get_rate") from the wireless-current
tree and commit 37eb0b164cf9fa9f70c8500926f5cde7c652f48e
("cfg80211/mac80211: Use more generic bitrate mask for rate control")
from the net tree.

John, I know you mentioned this, so I assume it will go away soon.

I fixed it up (I think - see below).
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc net/mac80211/rate.c
index 12a2bff,c74b7c8..0000000
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@@ -245,26 -303,31 +303,34 @@@ void rate_control_get_rate(struct ieee8
  		info->control.rates[i].count = 1;
  	}
  
 +	if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
 +		return;
 +
- 	if (sta && sdata->force_unicast_rateidx > -1) {
- 		info->control.rates[0].idx = sdata->force_unicast_rateidx;
- 	} else {
- 		ref->ops->get_rate(ref->priv, ista, priv_sta, txrc);
- 		info->flags |= IEEE80211_TX_INTFL_RCALGO;
- 	}
+ 	ref->ops->get_rate(ref->priv, ista, priv_sta, txrc);
  
  	/*
- 	 * try to enforce the maximum rate the user wanted
+ 	 * Try to enforce the rateidx mask the user wanted. skip this if the
+ 	 * default mask (allow all rates) is used to save some processing for
+ 	 * the common case.
  	 */
- 	if (sdata->max_ratectrl_rateidx > -1)
+ 	mask = sdata->rc_rateidx_mask[info->band];
+ 	if (mask != (1 << txrc->sband->n_bitrates) - 1) {
+ 		if (sta) {
+ 			/* Filter out rates that the STA does not support */
+ 			mask &= sta->sta.supp_rates[info->band];
+ 		}
+ 		/*
+ 		 * Make sure the rate index selected for each TX rate is
+ 		 * included in the configured mask and change the rate indexes
+ 		 * if needed.
+ 		 */
  		for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
+ 			/* Rate masking supports only legacy rates for now */
  			if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS)
  				continue;
- 			info->control.rates[i].idx =
- 				min_t(s8, info->control.rates[i].idx,
- 				      sdata->max_ratectrl_rateidx);
+ 			rate_idx_match_mask(&info->control.rates[i],
+ 					    txrc->sband->n_bitrates, mask);
+ 		}
  	}
  
  	BUG_ON(info->control.rates[0].idx < 0);

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-02-09  2:24 Stephen Rothwell
  2010-02-09  3:20 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2010-02-09  2:24 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Johannes Berg, John W. Linville

[-- Attachment #1: Type: text/plain, Size: 564 bytes --]

Hi all,

Today's linux-next merge of the net tree got a conflict in
net/mac80211/scan.c between commit
c0ce77b8323c1a0d4eeef97caf16c0ea971222a9 ("mac80211: fix deferred
hardware scan requests") from the wireless-current tree and commit
af6b63741cc4e4dfd575d06beb333b11a8a6e0c0 ("mac80211: generalise work
handling") from the net tree.

I resolved this the same way it is resolved in the merge of the
wireless-current tree into the wireless tree.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-01-07  2:12 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2010-01-07  2:12 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Jouni Malinen, Johannes Berg, John W. Linville

[-- Attachment #1: Type: text/plain, Size: 646 bytes --]

Hi all,

Today's linux-next merge of the net tree got a conflict in
net/mac80211/scan.c between commit
8a5b33f55452c226aa0e47d737e541985ff10e16 ("Revert "mac80211: replace
netif_tx_{start,stop,wake}_all_queues"") from the wireless-current tree
and commit b203ffc3a447eb8d9e6120b783ddee081b143061 ("mac80211:
Generalize off-channel operation helpers from scan code") from the net
tree.

I used the version from the net tree (though I suspect that it may not be
completely correct).  I assume that this will be fixed up shortly.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2010-01-06  2:25 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2010-01-06  2:25 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Johannes Berg, John W. Linville

Hi all,

Today's linux-next merge of the net tree got a conflict in
net/mac80211/iface.c between commit
cf0277e714a0db302a8f80e1b85fd61c32cf00b3 ("mac80211: fix skb buffering
issue") from the wireless-current tree and commit
47846c9b0c10808d9337d2e7d09361f3e0a0a71a ("mac80211: reduce reliance on
netdev") from the net tree.

Just context changes.  I fixed it up (see below) and can carry the fix as
necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc net/mac80211/iface.c
index c261cdb,00a1f4c..0000000
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@@ -659,35 -664,9 +672,35 @@@ static const struct net_device_ops ieee
  	.ndo_start_xmit		= ieee80211_subif_start_xmit,
  	.ndo_set_multicast_list = ieee80211_set_multicast_list,
  	.ndo_change_mtu 	= ieee80211_change_mtu,
- 	.ndo_set_mac_address 	= eth_mac_addr,
+ 	.ndo_set_mac_address 	= ieee80211_change_mac,
 +	.ndo_select_queue	= ieee80211_netdev_select_queue,
  };
  
 +static u16 ieee80211_monitor_select_queue(struct net_device *dev,
 +					  struct sk_buff *skb)
 +{
 +	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
 +	struct ieee80211_local *local = sdata->local;
 +	struct ieee80211_hdr *hdr;
 +	struct ieee80211_radiotap_header *rtap = (void *)skb->data;
 +
 +	if (local->hw.queues < 4)
 +		return 0;
 +
 +	if (skb->len < 4 ||
 +	    skb->len < rtap->it_len + 2 /* frame control */)
 +		return 0; /* doesn't matter, frame will be dropped */
 +
 +	hdr = (void *)((u8 *)skb->data + rtap->it_len);
 +
 +	if (!ieee80211_is_data(hdr->frame_control)) {
 +		skb->priority = 7;
 +		return ieee802_1d_to_ac[skb->priority];
 +	}
 +
 +	return ieee80211_downgrade_queue(local, skb);
 +}
 +
  static const struct net_device_ops ieee80211_monitorif_ops = {
  	.ndo_open		= ieee80211_open,
  	.ndo_stop		= ieee80211_stop,

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-12-28 22:54 Stephen Rothwell
  2009-12-28 23:41 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2009-12-28 22:54 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Samuel Ortiz, John W. Linville, Holger Schurig

Hi all,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/libertas/scan.c between commit
659c8e5243caf14564155ad8421404f044dd8031 ("libertas: Remove carrier
signaling from the scan code") from the wireless-current tree and commit
602114ae595af6c89eab149cf9f939e3f7ef4a34 ("libertas: add access functions
for mesh open/connect status") from the net tree.

I fixed it up (see below) and can carry the fix for a while.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/libertas/scan.c
index b0b1c78,4a0c3e3..0000000
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@@ -632,13 -635,16 +632,13 @@@ out2
  	priv->scan_channel = 0;
  
  out:
 -	if (priv->connect_status == LBS_CONNECTED) {
 -		netif_carrier_on(priv->dev);
 -		if (!priv->tx_pending_len)
 -			netif_wake_queue(priv->dev);
 -	}
 -	if (priv->mesh_dev && lbs_mesh_connected(priv)) {
 -		netif_carrier_on(priv->mesh_dev);
 -		if (!priv->tx_pending_len)
 -			netif_wake_queue(priv->mesh_dev);
 -	}
 +	if (priv->connect_status == LBS_CONNECTED && !priv->tx_pending_len)
 +		netif_wake_queue(priv->dev);
 +
- 	if (priv->mesh_dev && (priv->mesh_connect_status == LBS_CONNECTED) &&
++	if (priv->mesh_dev && lbs_mesh_connected(priv) &&
 +	    !priv->tx_pending_len)
 +		netif_wake_queue(priv->mesh_dev);
 +
  	kfree(chan_list);
  
  	lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret);

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-12-01  1:31 Stephen Rothwell
  2009-12-01 14:06 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2009-12-01  1:31 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Johannes Berg, John W. Linville

[-- Attachment #1: Type: text/plain, Size: 593 bytes --]

Hi all,

Today's linux-next merge of the net tree got a conflict in net/mac80211/ht.c between commit 827d42c9ac91ddd728e4f4a31fefb906ef2ceff7 ("mac80211: fix spurious delBA handling") from the wireless-current tree and commit c951ad3550ab40071bb0f222ba6125845769c08a ("mac80211: convert aggregation to operate on vifs/stas") from the net tree.

I fixed it up (by using the version from the wireless-current tree) and
can carry the fix as necessary.  This may well not be correct.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-11-26  3:10 Stephen Rothwell
  2009-11-26  9:33 ` Johannes Berg
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2009-11-26  3:10 UTC (permalink / raw)
  To: David Miller, netdev
  Cc: linux-next, linux-kernel, Jean Tourrilhes, John W. Linville,
	Johannes Berg

[-- Attachment #1: Type: text/plain, Size: 587 bytes --]

Hi all,

Today's linux-next merge of the net tree got a conflict in
net/wireless/wext.c between commit
9fed059667d35fca9288460106e92dbb8ba35ea1 ("WE: Fix set events not
propagated") from the  tree and commit
3d23e349d807177eaf519d444677cee86b1a04cf ("wext: refactor") from the net
tree.

The latter deleted the file that the former modified.  I just ignored the
wireless-current change and removed the file (which seems to have been
done in the latter change anyway).
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-07-28  1:59 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-07-28  1:59 UTC (permalink / raw)
  To: David Miller
  Cc: linux-next, linux-kernel, Johannes Berg, John W. Linville,
	Reinette Chatre

Hi David,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl-tx.c between commit
3995bd9332a51b626237d6671cfeb7235e6c1305 ("iwlwifi: fix TX queue race")
from the wireless-current tree and commit
45af81956e990440fe78d6d41f847664cb620609 ("iwlwifi: make software queue
assignment more efficient") from the net tree.

Just overlapping context.  I fixed it up (see below) and can carry the
fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwlwifi/iwl-tx.c
index 2e89040,0912987..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@@ -744,21 -749,16 +747,19 @@@ int iwl_tx_skb(struct iwl_priv *priv, s
  		hdr->seq_ctrl |= cpu_to_le16(seq_number);
  		seq_number += 0x10;
  		/* aggregation is on for this <sta,tid> */
- 		if (info->flags & IEEE80211_TX_CTL_AMPDU) {
+ 		if (info->flags & IEEE80211_TX_CTL_AMPDU)
  			txq_id = priv->stations[sta_id].tid[tid].agg.txq_id;
  	}
  
  	txq = &priv->txq[txq_id];
+ 	swq_id = txq->swq_id;
  	q = &txq->q;
- 	txq->swq_id = swq_id;
  
 -	spin_lock_irqsave(&priv->lock, flags);
 +	if (unlikely(iwl_queue_space(q) < q->high_mark))
 +		goto drop_unlock;
 +
 +	if (ieee80211_is_data_qos(fc))
 +		priv->stations[sta_id].tid[tid].tfds_in_queue++;
  
  	/* Set up driver data for this TFD */
  	memset(&(txq->txb[q->write_ptr]), 0, sizeof(struct iwl_tx_info));

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-07-28  1:53 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-07-28  1:53 UTC (permalink / raw)
  To: David Miller; +Cc: linux-next, linux-kernel, reinette chatre, John W. Linville

[-- Attachment #1: Type: text/plain, Size: 631 bytes --]

Hi David,

Today's linux-next merge of the net tree got a conflicts in
drivers/net/wireless/iwlwifi/iwl-3945.h and
drivers/net/wireless/iwlwifi/iwl3945-base.c between commit
45f5fa32b130b2a59f9b726be45ce7fa73fb834c ("iwlagn: fix minimum number of
queues setting") from the wireless-current tree and commit
5905a1aa71488b5f78822100c865ed7c4f9fcd8f ("iwl3945: cleanup number of
queues settings") from the net tree.

The latter just removes the code that the former modifies.  I used the
version from the net tree.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-07-22  2:00 Stephen Rothwell
  2009-07-22 14:03 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2009-07-22  2:00 UTC (permalink / raw)
  To: David Miller
  Cc: linux-next, linux-kernel, Johannes Berg, Christian Lamparter,
	John W. Linville

Hi David,

Today's linux-next merge of the net tree got a conflict in
net/wireless/scan.c between commit
9e81eccf199d910e5ea8db377a43478e4eccd033 ("cfg80211: double free in
__cfg80211_scan_done") from the wireless-current tree and commit
667503ddcb96f3b10211f997fe55907fa7509841 ("cfg80211: fix locking") from
the net tree.

Overlapping additions.  I fixed it up (I think - see below) and can carry
the fix as ncessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc net/wireless/scan.c
index 9271118,4f552c3..0000000
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@@ -35,8 -48,10 +48,8 @@@ void __cfg80211_scan_done(struct work_s
  	else
  		nl80211_send_scan_done(wiphy_to_dev(request->wiphy), dev);
  
 -	wiphy_to_dev(request->wiphy)->scan_req = NULL;
 -
  #ifdef CONFIG_WIRELESS_EXT
- 	if (!aborted) {
+ 	if (!request->aborted) {
  		memset(&wrqu, 0, sizeof(wrqu));
  
  		wireless_send_event(dev, SIOCGIWSCAN, &wrqu, NULL);
@@@ -46,9 -61,24 +59,25 @@@
  	dev_put(dev);
  
   out:
 +	wiphy_to_dev(request->wiphy)->scan_req = NULL;
+ 	cfg80211_unlock_rdev(rdev);
  	kfree(request);
  }
+ 
+ void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted)
+ {
+ 	struct net_device *dev = dev_get_by_index(&init_net, request->ifidx);
+ 	if (WARN_ON(!dev)) {
+ 		kfree(request);
+ 		return;
+ 	}
+ 
+ 	WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req);
+ 
+ 	request->aborted = aborted;
+ 	schedule_work(&wiphy_to_dev(request->wiphy)->scan_done_wk);
+ 	dev_put(dev);
+ }
  EXPORT_SYMBOL(cfg80211_scan_done);
  
  static void bss_release(struct kref *ref)

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-04-30  1:33 Stephen Rothwell
  2009-04-30  2:16 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2009-04-30  1:33 UTC (permalink / raw)
  To: David Miller; +Cc: linux-next, Johannes Berg, John W. Linville, Alan Jenkins

Hi David,

Today's linux-next merge of the net tree got a conflict in
net/mac80211/main.c between commit
d4c4a9a1bce1912ed5681251f0037fd4f2364a3e ("mac80211: fix modprobe
deadlock by not calling wep_init under rtnl_lock") from the
wireless-current tree and commit 10f644a47b76d3e61b98f2d02ce9690b94c51ee5
("mac80211: disable powersave if pm_qos asks for low latency") from the
net tree.

Overlapping changes - in the latter patch, some unrelated whitespace
changes ... I fixed it up (see below) and can carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc net/mac80211/main.c
index 1413419,5320e08..0000000
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@@ -752,12 -776,9 +776,10 @@@ struct ieee80211_hw *ieee80211_alloc_hw
  	/* set up some defaults */
  	local->hw.queues = 1;
  	local->hw.max_rates = 1;
- 	local->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
- 	local->fragmentation_threshold = IEEE80211_MAX_FRAG_THRESHOLD;
- 	local->hw.conf.long_frame_max_tx_count = 4;
- 	local->hw.conf.short_frame_max_tx_count = 7;
+ 	local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
+ 	local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
  	local->hw.conf.radio_enabled = true;
 +	local->user_power_level = -1;
  
  	INIT_LIST_HEAD(&local->interfaces);
  	mutex_init(&local->iflist_mtx);
@@@ -965,25 -1037,38 +1037,38 @@@ int ieee80211_register_hw(struct ieee80
  		}
  	}
  
+ 	local->network_latency_notifier.notifier_call =
+ 		ieee80211_max_network_latency;
+ 	result = pm_qos_add_notifier(PM_QOS_NETWORK_LATENCY,
+ 				     &local->network_latency_notifier);
+ 
+ 	if (result) {
+ 		rtnl_lock();
+ 		goto fail_pm_qos;
+ 	}
+ 
  	return 0;
  
- fail_rate:
+  fail_pm_qos:
+ 	ieee80211_led_exit(local);
+ 	ieee80211_remove_interfaces(local);
 - fail_wep:
 -	rate_control_deinitialize(local);
+  fail_rate:
  	unregister_netdevice(local->mdev);
  	local->mdev = NULL;
- fail_dev:
+  fail_dev:
  	rtnl_unlock();
 +	ieee80211_wep_free(local);
- fail_wep:
++ fail_wep:
  	sta_info_stop(local);
- fail_sta_info:
+  fail_sta_info:
  	debugfs_hw_del(local);
  	destroy_workqueue(local->hw.workqueue);
- fail_workqueue:
+  fail_workqueue:
  	if (local->mdev)
  		free_netdev(local->mdev);
- fail_mdev_alloc:
+  fail_mdev_alloc:
  	wiphy_unregister(local->hw.wiphy);
- fail_wiphy_register:
+  fail_wiphy_register:
  	kfree(local->int_scan_req.channels);
  	return result;
  }

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-04-29  3:51 Stephen Rothwell
  2009-04-29 12:42 ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Stephen Rothwell @ 2009-04-29  3:51 UTC (permalink / raw)
  To: David Miller; +Cc: linux-next, Johannes Berg, John W. Linville

Hi David,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl-scan.c between commit
74aa9be0ea0ffeb233f45c39f3cf594b68bbbb89 ("iwlwifi: notify on scan
completion even when shutting down") from the wireless-current tree and
commit 1ecf9fc1317f8df91eb1d74360f408558d657478 ("iwlwifi: improve scan
support") from the net tree.

I fixed it up (see below) and can carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc drivers/net/wireless/iwlwifi/iwl-scan.c
index e7c65c4,799f5eb..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@@ -925,11 -814,12 +814,12 @@@ void iwl_bg_scan_completed(struct work_
  
  	IWL_DEBUG_SCAN(priv, "SCAN complete scan\n");
  
 -	if (test_bit(STATUS_EXIT_PENDING, &priv->status))
 -		return;
 -
+ 	priv->scan_request = NULL;
  	ieee80211_scan_completed(priv->hw, false);
  
 +	if (test_bit(STATUS_EXIT_PENDING, &priv->status))
 +		return;
 +
  	/* Since setting the TXPOWER may have been deferred while
  	 * performing the scan, fire one off */
  	mutex_lock(&priv->mutex);

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-03-24  2:37 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-03-24  2:37 UTC (permalink / raw)
  To: David Miller, John W. Linville; +Cc: linux-next, Jiri Slaby, Bob Copeland

[-- Attachment #1: Type: text/plain, Size: 630 bytes --]

Hi David, John,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/ath5k/base.c between commit
4f148798de04f7d13d2021f06eee6bccd6453651 ("ath5k: warn and correct rate
for unknown hw rate indexes") from the wireless-current tree and commit
db5b4f7ae3901fdc48c5b988fc2a5e0cb4ec1870 ("ath5k: fix hw rate index
condition") from the net tree.

It looks like the former is a superset of the latter.  I fixed it up (I
used the wireless-current version) and can carry the fix as necessary.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-03-06  3:55 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-03-06  3:55 UTC (permalink / raw)
  To: David Miller; +Cc: linux-next, Reinette Chatre, John W. Linville

[-- Attachment #1: Type: text/plain, Size: 502 bytes --]

Hi David,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/iwlwifi/iwl3945-base.c between commit
623d563e52d4d4041612e24b33a5610a900dd778 ("iwlwifi: fix error flow in
iwl*_pci_probe") from the wireless-current tree and various commit(s?)
from the net tree.

I used the version of the file from the merge-test branch of the wireless
tree (thanks, John).
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-02-19  5:23 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-02-19  5:23 UTC (permalink / raw)
  To: David Miller; +Cc: linux-next, David Kilroy, Andrey Borzenkov, John W. Linville

Hi David,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/orinoco/orinoco.c between commit
f6af197dc4883176e5ba001b27efc02baaef56be ("orinoco: do not resgister NULL
pm_notifier function") from the wireless-current tree and commit
47445cb95015bef0d54ca799f31e454797378a71 ("orinoco: Rename orinoco.c")
from the net tree.

I removed orinoco.c and patched main.c (with the patch below) to match
John's supplied test merge.  I can carry this for a while.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

diff --git b/drivers/net/wireless/orinoco/main.c a/drivers/net/wireless/orinoco/main.c
index 54dfc45..e9b1db7 100644
--- b/drivers/net/wireless/orinoco/main.c
+++ a/drivers/net/wireless/orinoco/main.c
@@ -2076,8 +2076,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier,
 
 	return NOTIFY_DONE;
 }
+
+static void orinoco_register_pm_notifier(struct orinoco_private *priv)
+{
+	priv->pm_notifier.notifier_call = orinoco_pm_notifier;
+	register_pm_notifier(&priv->pm_notifier);
+}
+
+static void orinoco_unregister_pm_notifier(struct orinoco_private *priv)
+{
+	unregister_pm_notifier(&priv->pm_notifier);
+}
 #else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */
-#define orinoco_pm_notifier NULL
+#define orinoco_register_pm_notifier(priv) do { } while(0)
+#define orinoco_unregister_pm_notifier(priv) do { } while(0)
 #endif
 
 /********************************************************************/
@@ -2572,8 +2584,7 @@ struct net_device
 	priv->cached_fw = NULL;
 
 	/* Register PM notifiers */
-	priv->pm_notifier.notifier_call = orinoco_pm_notifier;
-	register_pm_notifier(&priv->pm_notifier);
+	orinoco_register_pm_notifier(priv);
 
 	return dev;
 }
@@ -2598,7 +2609,7 @@ void free_orinocodev(struct net_device *dev)
 		kfree(rx_data);
 	}
 
-	unregister_pm_notifier(&priv->pm_notifier);
+	orinoco_unregister_pm_notifier(priv);
 	orinoco_uncache_fw(priv);
 
 	priv->wpa_ie_len = 0;

^ permalink raw reply related	[flat|nested] 47+ messages in thread
* linux-next: manual merge of the net tree with the wireless-current tree
@ 2009-02-19  5:23 Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-02-19  5:23 UTC (permalink / raw)
  To: David Miller
  Cc: linux-next, Christian Lamparter, John W. Linville, Roel Kluin

Hi David,

Today's linux-next merge of the net tree got a conflict in
drivers/net/wireless/p54/p54common.c between commit
9de1643b4d59b416568bae04dbf67a374360765b ("p54: misplaced parentheses")
from the wireless-current tree and commit
51eed9923d98477e7f7473edd60d876d1cecc8c5 ("p54: implement FIF_OTHER_BSS
filter setting") from the net tree.

I fixed it up as suggested in John's merge test (see below) and can carry
the fix for a while.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

diff --cc drivers/net/wireless/p54/p54common.c
index 530daee,45c2e7a..0000000
--- a/drivers/net/wireless/p54/p54common.c
+++ b/drivers/net/wireless/p54/p54common.c
@@@ -1932,8 -2211,9 +2211,9 @@@ static void p54_configure_filter(struc
  	struct p54_common *priv = dev->priv;
  
  	*total_flags &= FIF_PROMISC_IN_BSS |
+ 			FIF_OTHER_BSS |
 -			(*total_flags & FIF_PROMISC_IN_BSS) ?
 -				FIF_FCSFAIL : 0;
 +			(*total_flags & FIF_PROMISC_IN_BSS ?
 +				FIF_FCSFAIL : 0);
  
  	priv->filter_flags = *total_flags;
  

^ permalink raw reply	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2011-09-27 14:41 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-22  1:59 linux-next: manual merge of the net tree with the wireless-current tree Stephen Rothwell
2009-07-22  2:05 ` Zhu Yi
2009-07-22  4:50   ` Stephen Rothwell
2009-07-22  3:04 ` David Miller
  -- strict thread matches above, loose matches on Subject: below --
2011-09-27  2:51 Stephen Rothwell
2011-09-27 13:09 ` John W. Linville
2011-09-27 14:41   ` wwguy
2011-07-06  2:53 Stephen Rothwell
2011-07-06 11:07 ` Gustavo Padovan
2011-06-28  4:02 Stephen Rothwell
2011-06-28 14:57 ` Guy, Wey-Yi
2010-12-02 23:45 Stephen Rothwell
2010-05-12  2:15 Stephen Rothwell
2010-05-12 16:15 ` reinette chatre
2010-05-13  1:02   ` Stephen Rothwell
2010-03-30  2:37 Stephen Rothwell
2010-03-30 13:12 ` John W. Linville
2010-03-30 13:51   ` Stephen Rothwell
2010-02-15  4:20 Stephen Rothwell
2010-02-15  6:22 ` David Miller
2010-02-15  7:16   ` Stephen Rothwell
2010-02-09  2:24 Stephen Rothwell
2010-02-09  3:20 ` John W. Linville
2010-01-07  2:12 Stephen Rothwell
2010-01-06  2:25 Stephen Rothwell
2009-12-28 22:54 Stephen Rothwell
2009-12-28 23:41 ` John W. Linville
2009-12-01  1:31 Stephen Rothwell
2009-12-01 14:06 ` John W. Linville
2009-11-26  3:10 Stephen Rothwell
2009-11-26  9:33 ` Johannes Berg
2009-11-26 13:01   ` John W. Linville
2009-11-30 16:48     ` Jean Tourrilhes
2009-07-28  1:59 Stephen Rothwell
2009-07-28  1:53 Stephen Rothwell
2009-07-22  2:00 Stephen Rothwell
2009-07-22 14:03 ` John W. Linville
2009-04-30  1:33 Stephen Rothwell
2009-04-30  2:16 ` John W. Linville
2009-04-30  3:23   ` David Miller
2009-04-29  3:51 Stephen Rothwell
2009-04-29 12:42 ` John W. Linville
2009-04-29 13:24   ` Stephen Rothwell
2009-03-24  2:37 Stephen Rothwell
2009-03-06  3:55 Stephen Rothwell
2009-02-19  5:23 Stephen Rothwell
2009-02-19  5:23 Stephen Rothwell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).