* [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
@ 2007-02-21 16:02 Ivo van Doorn
2007-02-21 16:37 ` Michael Buesch
0 siblings, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 16:02 UTC (permalink / raw)
To: Jiri Benc, John W. Linville, Michael Buesch; +Cc: linux-wireless
Let broadcom use the antenna_tx field for hardware configuration.
I did not check if the device is also capable of RX antenna selection,
but current implementation only suggested support for the TX antenna.
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
---
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
index cdce227..580ea33 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
int antenna = -1;
int err = 0;
- switch (conf->antenna_sel) {
+ switch (conf->antenna_sel_tx) {
case 0: /* default/diversity */
antenna = BCM43xx_ANTENNA_DEFAULT;
break;
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
index 71cba92..cfc84cd 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
@@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
phy_ctl |= BCM43xx_TX4_PHY_OFDM;
if (dev->short_preamble)
phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
- switch (txctl->antenna_sel) {
+ switch (txctl->antenna_sel_tx) {
case 0:
phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
break;
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 16:02 [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna Ivo van Doorn
@ 2007-02-21 16:37 ` Michael Buesch
2007-02-21 16:44 ` Ivo van Doorn
0 siblings, 1 reply; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 16:37 UTC (permalink / raw)
To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless
On Wednesday 21 February 2007 17:02, Ivo van Doorn wrote:
> Let broadcom use the antenna_tx field for hardware configuration.
> I did not check if the device is also capable of RX antenna selection,
> but current implementation only suggested support for the TX antenna.
>
> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
>
> ---
>
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> index cdce227..580ea33 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> @@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> int antenna = -1;
> int err = 0;
>
> - switch (conf->antenna_sel) {
> + switch (conf->antenna_sel_tx) {
Nope, this is conf->antenna_sel_rx
;)
--
Greetings Michael.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 16:37 ` Michael Buesch
@ 2007-02-21 16:44 ` Ivo van Doorn
2007-02-21 16:51 ` Michael Buesch
0 siblings, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 16:44 UTC (permalink / raw)
To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless
On Wednesday 21 February 2007 17:37, Michael Buesch wrote:
> On Wednesday 21 February 2007 17:02, Ivo van Doorn wrote:
> > Let broadcom use the antenna_tx field for hardware configuration.
> > I did not check if the device is also capable of RX antenna selection,
> > but current implementation only suggested support for the TX antenna.
> >
> > Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> >
> > ---
> >
> > diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > index cdce227..580ea33 100644
> > --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > @@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> > int antenna = -1;
> > int err = 0;
> >
> > - switch (conf->antenna_sel) {
> > + switch (conf->antenna_sel_tx) {
>
> Nope, this is conf->antenna_sel_rx
> ;)
On further inspection not even that. :P
The outcome of that switch is stored in the antenna variable, which is used with
bcm43xx_mgmtframe_txantenna(dev, antenna);
bcm43xx_set_rx_antenna(dev, antenna);
So I guess that needs to be fixed to create a switch statement for
the RX antenna and one for the TX antenna?
Ivo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 16:44 ` Ivo van Doorn
@ 2007-02-21 16:51 ` Michael Buesch
2007-02-21 16:52 ` Ivo van Doorn
2007-02-21 17:06 ` Ivo van Doorn
0 siblings, 2 replies; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 16:51 UTC (permalink / raw)
To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless
On Wednesday 21 February 2007 17:44, Ivo van Doorn wrote:
> On Wednesday 21 February 2007 17:37, Michael Buesch wrote:
> > On Wednesday 21 February 2007 17:02, Ivo van Doorn wrote:
> > > Let broadcom use the antenna_tx field for hardware configuration.
> > > I did not check if the device is also capable of RX antenna selection,
> > > but current implementation only suggested support for the TX antenna.
> > >
> > > Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> > >
> > > ---
> > >
> > > diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > > index cdce227..580ea33 100644
> > > --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > > +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> > > @@ -2609,7 +2609,7 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> > > int antenna = -1;
> > > int err = 0;
> > >
> > > - switch (conf->antenna_sel) {
> > > + switch (conf->antenna_sel_tx) {
> >
> > Nope, this is conf->antenna_sel_rx
> > ;)
>
> On further inspection not even that. :P
> The outcome of that switch is stored in the antenna variable, which is used with
>
> bcm43xx_mgmtframe_txantenna(dev, antenna);
> bcm43xx_set_rx_antenna(dev, antenna);
>
> So I guess that needs to be fixed to create a switch statement for
> the RX antenna and one for the TX antenna?
Ah, yeah. I didn't have the complete code for this in my head. :)
I'd rather like to have a helper function
int bcm43xx_antenna_from_ieee80211(u8 antenna)
which includes the switch statement and use it twice in the
config callback. Wanna do that?
--
Greetings Michael.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 16:51 ` Michael Buesch
@ 2007-02-21 16:52 ` Ivo van Doorn
2007-02-21 17:06 ` Ivo van Doorn
1 sibling, 0 replies; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 16:52 UTC (permalink / raw)
To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless
> > On further inspection not even that. :P
> > The outcome of that switch is stored in the antenna variable, which is used with
> >
> > bcm43xx_mgmtframe_txantenna(dev, antenna);
> > bcm43xx_set_rx_antenna(dev, antenna);
> >
> > So I guess that needs to be fixed to create a switch statement for
> > the RX antenna and one for the TX antenna?
>
> Ah, yeah. I didn't have the complete code for this in my head. :)
>
> I'd rather like to have a helper function
> int bcm43xx_antenna_from_ieee80211(u8 antenna)
> which includes the switch statement and use it twice in the
> config callback. Wanna do that?
No problem, I will resend this patch with that helper function added.
Ivo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 16:51 ` Michael Buesch
2007-02-21 16:52 ` Ivo van Doorn
@ 2007-02-21 17:06 ` Ivo van Doorn
2007-02-21 17:19 ` Michael Buesch
1 sibling, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 17:06 UTC (permalink / raw)
To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless
> > > Nope, this is conf->antenna_sel_rx
> > > ;)
> >
> > On further inspection not even that. :P
> > The outcome of that switch is stored in the antenna variable, which is used with
> >
> > bcm43xx_mgmtframe_txantenna(dev, antenna);
> > bcm43xx_set_rx_antenna(dev, antenna);
> >
> > So I guess that needs to be fixed to create a switch statement for
> > the RX antenna and one for the TX antenna?
>
> Ah, yeah. I didn't have the complete code for this in my head. :)
>
> I'd rather like to have a helper function
> int bcm43xx_antenna_from_ieee80211(u8 antenna)
> which includes the switch statement and use it twice in the
> config callback. Wanna do that?
Fixed. This will make the bcm43xx driver make use of both
RX and TX antenna selection capabilities.
Signed-off-by: Ivo van Doorn<IvDoorn@gmail.com>
---
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
index cdce227..1256549 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -2606,22 +2606,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
struct bcm43xx_phy *phy;
unsigned long flags;
unsigned int new_phymode = 0xFFFF;
- int antenna = -1;
+ int antenna_tx;
+ int antenna_rx;
int err = 0;
- switch (conf->antenna_sel) {
- case 0: /* default/diversity */
- antenna = BCM43xx_ANTENNA_DEFAULT;
- break;
- case 1: /* Antenna 0 */
- antenna = BCM43xx_ANTENNA0;
- break;
- case 2: /* Antenna 1 */
- antenna = BCM43xx_ANTENNA1;
- break;
- default:
- assert(0);
- }
+ antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
+ antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
mutex_lock(&wl->mutex);
@@ -2682,8 +2672,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
}
/* Antennas for RX and management frame TX. */
- bcm43xx_mgmtframe_txantenna(dev, antenna);
- bcm43xx_set_rx_antenna(dev, antenna);
+ bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
+ bcm43xx_set_rx_antenna(dev, antenna_rx);
/* Update templates for AP mode. */
if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
index e56efc1..bba6606 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
@@ -110,6 +110,22 @@ int bcm43xx_is_ofdm_rate(int rate)
}
static inline
+int bcm43xx_antenna_from_ieee80211(u8 antenna)
+{
+ switch (antenna) {
+ case 0: /* default/diversity */
+ return BCM43xx_ANTENNA_DEFAULT;
+ case 1: /* Antenna 0 */
+ return BCM43xx_ANTENNA0;
+ case 2: /* Antenna 1 */
+ return BCM43xx_ANTENNA1;
+ default:
+ assert(0);
+ return -EINVAL;
+ }
+}
+
+static inline
int bcm43xx_is_hw_radio_enabled(struct bcm43xx_wldev *dev)
{
/* function to return state of hardware enable of radio
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
index 71cba92..cfc84cd 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
@@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
phy_ctl |= BCM43xx_TX4_PHY_OFDM;
if (dev->short_preamble)
phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
- switch (txctl->antenna_sel) {
+ switch (txctl->antenna_sel_tx) {
case 0:
phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
break;
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 17:06 ` Ivo van Doorn
@ 2007-02-21 17:19 ` Michael Buesch
2007-02-21 17:24 ` Ivo van Doorn
0 siblings, 1 reply; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 17:19 UTC (permalink / raw)
To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless
On Wednesday 21 February 2007 18:06, Ivo van Doorn wrote:
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> index cdce227..1256549 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> @@ -2606,22 +2606,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> struct bcm43xx_phy *phy;
> unsigned long flags;
> unsigned int new_phymode = 0xFFFF;
> - int antenna = -1;
> + int antenna_tx;
> + int antenna_rx;
> int err = 0;
>
> - switch (conf->antenna_sel) {
> - case 0: /* default/diversity */
> - antenna = BCM43xx_ANTENNA_DEFAULT;
> - break;
> - case 1: /* Antenna 0 */
> - antenna = BCM43xx_ANTENNA0;
> - break;
> - case 2: /* Antenna 1 */
> - antenna = BCM43xx_ANTENNA1;
> - break;
> - default:
> - assert(0);
> - }
> + antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
> + antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
>
> mutex_lock(&wl->mutex);
>
> @@ -2682,8 +2672,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> }
>
> /* Antennas for RX and management frame TX. */
> - bcm43xx_mgmtframe_txantenna(dev, antenna);
> - bcm43xx_set_rx_antenna(dev, antenna);
> + bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
> + bcm43xx_set_rx_antenna(dev, antenna_rx);
>
> /* Update templates for AP mode. */
> if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
> index e56efc1..bba6606 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h
> @@ -110,6 +110,22 @@ int bcm43xx_is_ofdm_rate(int rate)
> }
>
> static inline
> +int bcm43xx_antenna_from_ieee80211(u8 antenna)
> +{
> + switch (antenna) {
> + case 0: /* default/diversity */
> + return BCM43xx_ANTENNA_DEFAULT;
> + case 1: /* Antenna 0 */
> + return BCM43xx_ANTENNA0;
> + case 2: /* Antenna 1 */
> + return BCM43xx_ANTENNA1;
> + default:
> + assert(0);
> + return -EINVAL;
> + }
> +}
No, there is no need to inline. Simple static in main.c above
the config callback, please. :)
And simply return BCM43xx_ANTENNA_DEFAULT for the default:
case, so it doesn't break immediately, if someone decides
to add something to d80211.
...But we've almost got it :D
After that you'll get my sign-off.
--
Greetings Michael.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 17:19 ` Michael Buesch
@ 2007-02-21 17:24 ` Ivo van Doorn
2007-02-21 17:32 ` Michael Buesch
0 siblings, 1 reply; 9+ messages in thread
From: Ivo van Doorn @ 2007-02-21 17:24 UTC (permalink / raw)
To: Michael Buesch; +Cc: Jiri Benc, John W. Linville, linux-wireless
> No, there is no need to inline. Simple static in main.c above
> the config callback, please. :)
> And simply return BCM43xx_ANTENNA_DEFAULT for the default:
> case, so it doesn't break immediately, if someone decides
> to add something to d80211.
>
> ...But we've almost got it :D
> After that you'll get my sign-off.
bcm43xx_antenna_from_ieee80211 is no longer inlined,
and it returns BCM43xx_ANTENNA_DEFAULT by default.
Hopefully I got it this time. :)
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
---
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
index cdce227..798427f 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
@@ -2598,6 +2598,20 @@ static int bcm43xx_switch_phymode(struct bcm43xx_wl *wl,
return 0;
}
+static int bcm43xx_antenna_from_ieee80211(u8 antenna)
+{
+ switch (antenna) {
+ case 0: /* default/diversity */
+ return BCM43xx_ANTENNA_DEFAULT;
+ case 1: /* Antenna 0 */
+ return BCM43xx_ANTENNA0;
+ case 2: /* Antenna 1 */
+ return BCM43xx_ANTENNA1;
+ default:
+ return BCM43xx_ANTENNA_DEFAULT;
+ }
+}
+
static int bcm43xx_dev_config(struct ieee80211_hw *hw,
struct ieee80211_conf *conf)
{
@@ -2606,22 +2620,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
struct bcm43xx_phy *phy;
unsigned long flags;
unsigned int new_phymode = 0xFFFF;
- int antenna = -1;
+ int antenna_tx;
+ int antenna_rx;
int err = 0;
- switch (conf->antenna_sel) {
- case 0: /* default/diversity */
- antenna = BCM43xx_ANTENNA_DEFAULT;
- break;
- case 1: /* Antenna 0 */
- antenna = BCM43xx_ANTENNA0;
- break;
- case 2: /* Antenna 1 */
- antenna = BCM43xx_ANTENNA1;
- break;
- default:
- assert(0);
- }
+ antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
+ antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
mutex_lock(&wl->mutex);
@@ -2682,8 +2686,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
}
/* Antennas for RX and management frame TX. */
- bcm43xx_mgmtframe_txantenna(dev, antenna);
- bcm43xx_set_rx_antenna(dev, antenna);
+ bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
+ bcm43xx_set_rx_antenna(dev, antenna_rx);
/* Update templates for AP mode. */
if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
index 71cba92..cfc84cd 100644
--- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
+++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
@@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
phy_ctl |= BCM43xx_TX4_PHY_OFDM;
if (dev->short_preamble)
phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
- switch (txctl->antenna_sel) {
+ switch (txctl->antenna_sel_tx) {
case 0:
phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
break;
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna
2007-02-21 17:24 ` Ivo van Doorn
@ 2007-02-21 17:32 ` Michael Buesch
0 siblings, 0 replies; 9+ messages in thread
From: Michael Buesch @ 2007-02-21 17:32 UTC (permalink / raw)
To: Ivo van Doorn; +Cc: Jiri Benc, John W. Linville, linux-wireless
On Wednesday 21 February 2007 18:24, Ivo van Doorn wrote:
> > No, there is no need to inline. Simple static in main.c above
> > the config callback, please. :)
> > And simply return BCM43xx_ANTENNA_DEFAULT for the default:
> > case, so it doesn't break immediately, if someone decides
> > to add something to d80211.
> >
> > ...But we've almost got it :D
> > After that you'll get my sign-off.
>
> bcm43xx_antenna_from_ieee80211 is no longer inlined,
> and it returns BCM43xx_ANTENNA_DEFAULT by default.
>
> Hopefully I got it this time. :)
Yeah, *clap clap clap* :D
> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: Michael Buesch <mb@bu3sch.de>
> ---
>
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> index cdce227..798427f 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c
> @@ -2598,6 +2598,20 @@ static int bcm43xx_switch_phymode(struct bcm43xx_wl *wl,
> return 0;
> }
>
> +static int bcm43xx_antenna_from_ieee80211(u8 antenna)
> +{
> + switch (antenna) {
> + case 0: /* default/diversity */
> + return BCM43xx_ANTENNA_DEFAULT;
> + case 1: /* Antenna 0 */
> + return BCM43xx_ANTENNA0;
> + case 2: /* Antenna 1 */
> + return BCM43xx_ANTENNA1;
> + default:
> + return BCM43xx_ANTENNA_DEFAULT;
> + }
> +}
> +
> static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> struct ieee80211_conf *conf)
> {
> @@ -2606,22 +2620,12 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> struct bcm43xx_phy *phy;
> unsigned long flags;
> unsigned int new_phymode = 0xFFFF;
> - int antenna = -1;
> + int antenna_tx;
> + int antenna_rx;
> int err = 0;
>
> - switch (conf->antenna_sel) {
> - case 0: /* default/diversity */
> - antenna = BCM43xx_ANTENNA_DEFAULT;
> - break;
> - case 1: /* Antenna 0 */
> - antenna = BCM43xx_ANTENNA0;
> - break;
> - case 2: /* Antenna 1 */
> - antenna = BCM43xx_ANTENNA1;
> - break;
> - default:
> - assert(0);
> - }
> + antenna_tx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_tx);
> + antenna_rx = bcm43xx_antenna_from_ieee80211(conf->antenna_sel_rx);
>
> mutex_lock(&wl->mutex);
>
> @@ -2682,8 +2686,8 @@ static int bcm43xx_dev_config(struct ieee80211_hw *hw,
> }
>
> /* Antennas for RX and management frame TX. */
> - bcm43xx_mgmtframe_txantenna(dev, antenna);
> - bcm43xx_set_rx_antenna(dev, antenna);
> + bcm43xx_mgmtframe_txantenna(dev, antenna_tx);
> + bcm43xx_set_rx_antenna(dev, antenna_rx);
>
> /* Update templates for AP mode. */
> if (bcm43xx_is_mode(wl, IEEE80211_IF_TYPE_AP))
> diff --git a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
> index 71cba92..cfc84cd 100644
> --- a/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
> +++ b/drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c
> @@ -281,7 +281,7 @@ static void generate_txhdr_fw4(struct bcm43xx_wldev *dev,
> phy_ctl |= BCM43xx_TX4_PHY_OFDM;
> if (dev->short_preamble)
> phy_ctl |= BCM43xx_TX4_PHY_SHORTPRMBL;
> - switch (txctl->antenna_sel) {
> + switch (txctl->antenna_sel_tx) {
> case 0:
> phy_ctl |= BCM43xx_TX4_PHY_ANTLAST;
> break;
>
>
--
Greetings Michael.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-02-21 17:32 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-21 16:02 [PATCH 2/3] d80211: Split antenna selection into TX and RX antenna Ivo van Doorn
2007-02-21 16:37 ` Michael Buesch
2007-02-21 16:44 ` Ivo van Doorn
2007-02-21 16:51 ` Michael Buesch
2007-02-21 16:52 ` Ivo van Doorn
2007-02-21 17:06 ` Ivo van Doorn
2007-02-21 17:19 ` Michael Buesch
2007-02-21 17:24 ` Ivo van Doorn
2007-02-21 17:32 ` Michael Buesch
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).