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-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

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

ACK -- this is the proper fix-up.

On Wed, Apr 29, 2009 at 01:51:18PM +1000, Stephen Rothwell wrote:
> 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);
> 

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2009-04-29 12:42 ` John W. Linville
@ 2009-04-29 13:24   ` Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-04-29 13:24 UTC (permalink / raw)
  To: John W. Linville; +Cc: David Miller, linux-next, Johannes Berg

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

Hi John,

On Wed, 29 Apr 2009 08:42:55 -0400 "John W. Linville" <linville@tuxdriver.com> wrote:
>
> ACK -- this is the proper fix-up.

Thanks.
-- 
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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2011-09-27 13:09 ` John W. Linville
@ 2011-09-27 14:41   ` wwguy
  0 siblings, 0 replies; 47+ messages in thread
From: wwguy @ 2011-09-27 14:41 UTC (permalink / raw)
  To: John W. Linville
  Cc: Stephen Rothwell, David Miller, netdev, linux-next, linux-kernel,
	Berg, Johannes, Grumbach, Emmanuel

On Tue, 2011-09-27 at 06:09 -0700, John W. Linville wrote:
> On Tue, Sep 27, 2011 at 12:51:32PM +1000, Stephen Rothwell wrote:
> > 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.
> 
> Looks good, thanks!
> 
Thanks a lot for fixing it.

Wey

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

* Re: 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
  2011-09-27 14:41   ` wwguy
  0 siblings, 1 reply; 47+ messages in thread
From: John W. Linville @ 2011-09-27 13:09 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Johannes Berg,
	Wey-Yi Guy, Emmanuel Grumbach

On Tue, Sep 27, 2011 at 12:51:32PM +1000, Stephen Rothwell wrote:
> 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.

Looks good, thanks!

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ 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

* Re: 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, 0 replies; 47+ messages in thread
From: Gustavo Padovan @ 2011-07-06 11:07 UTC (permalink / raw)
  To: Stephen Rothwell; +Cc: David Miller, netdev, linux-next, linux-kernel

* Stephen Rothwell <sfr@canb.auug.org.au> [2011-07-06 12:53:29 +1000]:

> 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)) {

Seems I need to merge my own trees. I'll do that. Thanks, Stephen.
And the fix is right ;)

	Gustavo

^ 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

* Re: 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, 0 replies; 47+ messages in thread
From: Guy, Wey-Yi @ 2011-06-28 14:57 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Berg, Johannes,
	John W. Linville, Grumbach, Emmanuel

On Mon, 2011-06-27 at 21:02 -0700, Stephen Rothwell wrote:
> 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.

Looks right to me. Thanks for fixing it.

Wey

^ 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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2010-05-12 16:15 ` reinette chatre
@ 2010-05-13  1:02   ` Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2010-05-13  1:02 UTC (permalink / raw)
  To: reinette chatre
  Cc: David Miller, netdev, linux-next, linux-kernel, Berg, Johannes,
	John W. Linville

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

Hi Reinette,

On Wed, 12 May 2010 09:15:43 -0700 reinette chatre <reinette.chatre@intel.com> wrote:
>
> Please note that this member of iwl_priv is now located in two
> places ... here and also in the device specific union a few lines up
> inside the _agn struct. In the code it is indeed the one in the _agn
> struct that is being used (see usage in iwl-agn.c), so adding this line
> is not necessary.
> 
> This should not cause any problems with driver operation and can
> probably remain as such if indeed it is cleaned up somewhere else before
> it hits you again or linux-2.6.

Thanks for pointing this out.  I will update my merge resolution in
linux-next and I assume it will be done correctly when Dave or John also
do that merge.

-- 
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

* Re: 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
  2010-05-13  1:02   ` Stephen Rothwell
  0 siblings, 1 reply; 47+ messages in thread
From: reinette chatre @ 2010-05-12 16:15 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Berg, Johannes,
	John W. Linville

Hi Stephen,

On Tue, 2010-05-11 at 19:15 -0700, Stephen Rothwell wrote:
> 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;
>  +

Please note that this member of iwl_priv is now located in two
places ... here and also in the device specific union a few lines up
inside the _agn struct. In the code it is indeed the one in the _agn
struct that is being used (see usage in iwl-agn.c), so adding this line
is not necessary.

This should not cause any problems with driver operation and can
probably remain as such if indeed it is cleaned up somewhere else before
it hits you again or linux-2.6.

> -       /*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;
> 
> 

Reinette



^ 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

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

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

Hi John,

On Tue, 30 Mar 2010 09:12:21 -0400 "John W. Linville" <linville@tuxdriver.com> wrote:
>
> Yes, that looks correct to me -- at least, that's what I did in
> wireless-testing. :-)

Thanks for the confirmation.

-- 
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

* Re: 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
  2010-03-30 13:51   ` Stephen Rothwell
  0 siblings, 1 reply; 47+ messages in thread
From: John W. Linville @ 2010-03-30 13:12 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Shanyu Zhao,
	Zhu Yi, Reinette Chatre, Johannes Berg

On Tue, Mar 30, 2010 at 01:37:45PM +1100, Stephen Rothwell wrote:
> 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.

Yes, that looks correct to me -- at least, that's what I did in
wireless-testing. :-)

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ 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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2010-02-15  6:22 ` David Miller
@ 2010-02-15  7:16   ` Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2010-02-15  7:16 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, linux-next, linux-kernel, jouni.malinen, linville

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

Hi Dave,

On Sun, 14 Feb 2010 22:22:32 -0800 (PST) David Miller <davem@davemloft.net> wrote:
>
> Right, I'll even try to take care of this myself later tonight.

OK, thanks.

-- 
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

* Re: 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
  2010-02-15  7:16   ` Stephen Rothwell
  0 siblings, 1 reply; 47+ messages in thread
From: David Miller @ 2010-02-15  6:22 UTC (permalink / raw)
  To: sfr; +Cc: netdev, linux-next, linux-kernel, jouni.malinen, linville

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Mon, 15 Feb 2010 15:20:23 +1100

> 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).

Right, I'll even try to take care of this myself later tonight.

^ 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

* Re: 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, 0 replies; 47+ messages in thread
From: John W. Linville @ 2010-02-09  3:20 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Johannes Berg

On Tue, Feb 09, 2010 at 01:24:44PM +1100, Stephen Rothwell wrote:
> 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.

Maybe it would make sense to pull the wireless trees _before_ the
greater net trees?  That way you can get the benefit of my merge
conflict resolutions automatically.

John
-- 
John W. Linville                Someday the world will need a hero, and you
linville@tuxdriver.com                  might be all we have.  Be ready.

^ 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

* Re: 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, 0 replies; 47+ messages in thread
From: John W. Linville @ 2009-12-28 23:41 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Samuel Ortiz,
	Holger Schurig

On Tue, Dec 29, 2009 at 09:54:32AM +1100, Stephen Rothwell wrote:
> 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.

You have the correct fix.  I'll get this resolved in my trees soon.

Thanks,

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ 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

* Re: 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, 0 replies; 47+ messages in thread
From: John W. Linville @ 2009-12-01 14:06 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Johannes Berg

On Tue, Dec 01, 2009 at 12:31:42PM +1100, Stephen Rothwell wrote:
> 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.

That sounds like the correct fix...thanks!

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ 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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2009-11-26 13:01   ` John W. Linville
@ 2009-11-30 16:48     ` Jean Tourrilhes
  0 siblings, 0 replies; 47+ messages in thread
From: Jean Tourrilhes @ 2009-11-30 16:48 UTC (permalink / raw)
  To: John W. Linville
  Cc: Johannes Berg, Stephen Rothwell, David Miller, netdev,
	linux-next, linux-kernel

On Thu, Nov 26, 2009 at 08:01:53AM -0500, John W. Linville wrote:
> On Thu, Nov 26, 2009 at 10:33:09AM +0100, Johannes Berg wrote:
> > On Thu, 2009-11-26 at 14:10 +1100, Stephen Rothwell wrote:
> > > 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).
> > 
> > The fix should probably have gone to wext-core.c instead?
> 
> Yes.  That's the way I did it in the merge-test branch of wireless-next-2.6.
> 
> Thanks,
> 
> John

	Thanks for fixing that while I was busy in vacation ;-)
	Have fun...

	Jean

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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2009-11-26  9:33 ` Johannes Berg
@ 2009-11-26 13:01   ` John W. Linville
  2009-11-30 16:48     ` Jean Tourrilhes
  0 siblings, 1 reply; 47+ messages in thread
From: John W. Linville @ 2009-11-26 13:01 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Stephen Rothwell, David Miller, netdev, linux-next, linux-kernel,
	Jean Tourrilhes

On Thu, Nov 26, 2009 at 10:33:09AM +0100, Johannes Berg wrote:
> On Thu, 2009-11-26 at 14:10 +1100, Stephen Rothwell wrote:
> > 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).
> 
> The fix should probably have gone to wext-core.c instead?

Yes.  That's the way I did it in the merge-test branch of wireless-next-2.6.

Thanks,

John
--
John W. Linville
linville@tuxdriver.com

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

* Re: 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
  2009-11-26 13:01   ` John W. Linville
  0 siblings, 1 reply; 47+ messages in thread
From: Johannes Berg @ 2009-11-26  9:33 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, netdev, linux-next, linux-kernel, Jean Tourrilhes,
	John W. Linville

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

On Thu, 2009-11-26 at 14:10 +1100, Stephen Rothwell wrote:
> 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).

The fix should probably have gone to wext-core.c instead?

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 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

* Re: 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, 0 replies; 47+ messages in thread
From: John W. Linville @ 2009-07-22 14:03 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, linux-next, linux-kernel, Johannes Berg,
	Christian Lamparter

On Wed, Jul 22, 2009 at 12:00:00PM +1000, Stephen Rothwell wrote:
> 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.

Looks fine, thanks!

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.
			¡Viva Honduras Libre!

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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2009-07-22  2:05 ` Zhu Yi
@ 2009-07-22  4:50   ` Stephen Rothwell
  0 siblings, 0 replies; 47+ messages in thread
From: Stephen Rothwell @ 2009-07-22  4:50 UTC (permalink / raw)
  To: Zhu Yi
  Cc: David Miller, linux-next, linux-kernel, Ortiz, Samuel, John W. Linville

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

Hi Yi,


On Wed, 22 Jul 2009 10:05:21 +0800 Zhu Yi <yi.zhu@intel.com> wrote:
>
> The correct fix should be
> http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=commitdiff;h=126e91ba8cfe45a772aad2f51049ac7cedf5bbfd
> 
> We need to make the free wdev the last one.

Thanks, if it is still there tomorrow, I will change the fix.

-- 
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

* Re: 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
  1 sibling, 0 replies; 47+ messages in thread
From: David Miller @ 2009-07-22  3:04 UTC (permalink / raw)
  To: sfr; +Cc: linux-next, linux-kernel, samuel.ortiz, yi.zhu, linville

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Wed, 22 Jul 2009 11:59:56 +1000

> 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.

Thanks Stephen, I'll let Linville and the wireless folks sort
this one out.

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

* Re: 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  4:50   ` Stephen Rothwell
  2009-07-22  3:04 ` David Miller
  1 sibling, 1 reply; 47+ messages in thread
From: Zhu Yi @ 2009-07-22  2:05 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: David Miller, linux-next, linux-kernel, Ortiz, Samuel, John W. Linville

On Wed, 2009-07-22 at 09:59 +0800, Stephen Rothwell wrote:
> 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.

Hi Stephen,

The correct fix should be
http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=commitdiff;h=126e91ba8cfe45a772aad2f51049ac7cedf5bbfd

We need to make the free wdev the last one.

Thanks,
-yi

^ 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-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

* Re: linux-next: manual merge of the net tree with the wireless-current tree
  2009-04-30  2:16 ` John W. Linville
@ 2009-04-30  3:23   ` David Miller
  0 siblings, 0 replies; 47+ messages in thread
From: David Miller @ 2009-04-30  3:23 UTC (permalink / raw)
  To: linville; +Cc: sfr, linux-next, johannes, alan-jenkins

From: "John W. Linville" <linville@tuxdriver.com>
Date: Wed, 29 Apr 2009 22:16:35 -0400

> Yes, this looks correct -- please resolve the equivalent net-2.6 ->
> net-next-2.6 conflict this way too, Dave.

Will do, thanks.

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

* Re: 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
  2009-04-30  3:23   ` David Miller
  0 siblings, 1 reply; 47+ messages in thread
From: John W. Linville @ 2009-04-30  2:16 UTC (permalink / raw)
  To: Stephen Rothwell; +Cc: David Miller, linux-next, Johannes Berg, Alan Jenkins

Yes, this looks correct -- please resolve the equivalent net-2.6 ->
net-next-2.6 conflict this way too, Dave.

Thanks,

John

On Thu, Apr 30, 2009 at 11:33:28AM +1000, Stephen Rothwell wrote:
> 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;
>   }
> 

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ 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-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-04-29  3:51 linux-next: manual merge of the net tree with the wireless-current tree Stephen Rothwell
2009-04-29 12:42 ` John W. Linville
2009-04-29 13:24   ` Stephen Rothwell
  -- 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-07-22  1:59 Stephen Rothwell
2009-07-22  2:05 ` Zhu Yi
2009-07-22  4:50   ` Stephen Rothwell
2009-07-22  3:04 ` David Miller
2009-04-30  1:33 Stephen Rothwell
2009-04-30  2:16 ` John W. Linville
2009-04-30  3:23   ` David Miller
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).