b43: Move Analog switching into phy code
This moves the Analog switching code into the PHY files. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
2b80848e38
commit
cb24f57fe6
@@ -1052,23 +1052,6 @@ void b43_power_saving_ctl_bits(struct b43_wldev *dev, unsigned int ps_flags)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Turn the Analog ON/OFF */
|
|
||||||
static void b43_switch_analog(struct b43_wldev *dev, int on)
|
|
||||||
{
|
|
||||||
switch (dev->phy.type) {
|
|
||||||
case B43_PHYTYPE_A:
|
|
||||||
case B43_PHYTYPE_G:
|
|
||||||
b43_write16(dev, B43_MMIO_PHY0, on ? 0 : 0xF4);
|
|
||||||
break;
|
|
||||||
case B43_PHYTYPE_N:
|
|
||||||
b43_phy_write(dev, B43_NPHY_AFECTL_OVER,
|
|
||||||
on ? 0 : 0x7FFF);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
B43_WARN_ON(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags)
|
void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags)
|
||||||
{
|
{
|
||||||
u32 tmslow;
|
u32 tmslow;
|
||||||
@@ -1096,7 +1079,7 @@ void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags)
|
|||||||
* PHY-type, yet. wireless_core_reset will be called once again later,
|
* PHY-type, yet. wireless_core_reset will be called once again later,
|
||||||
* when we know the PHY-type. */
|
* when we know the PHY-type. */
|
||||||
if (dev->phy.ops)
|
if (dev->phy.ops)
|
||||||
b43_switch_analog(dev, 1);
|
dev->phy.ops->switch_analog(dev, 1);
|
||||||
|
|
||||||
macctl = b43_read32(dev, B43_MMIO_MACCTL);
|
macctl = b43_read32(dev, B43_MMIO_MACCTL);
|
||||||
macctl &= ~B43_MACCTL_GMODE;
|
macctl &= ~B43_MACCTL_GMODE;
|
||||||
@@ -3952,7 +3935,7 @@ static void b43_wireless_core_exit(struct b43_wldev *dev)
|
|||||||
b43_dma_free(dev);
|
b43_dma_free(dev);
|
||||||
b43_pio_free(dev);
|
b43_pio_free(dev);
|
||||||
b43_chip_exit(dev);
|
b43_chip_exit(dev);
|
||||||
b43_switch_analog(dev, 0);
|
dev->phy.ops->switch_analog(dev, 0);
|
||||||
if (dev->wl->current_beacon) {
|
if (dev->wl->current_beacon) {
|
||||||
dev_kfree_skb_any(dev->wl->current_beacon);
|
dev_kfree_skb_any(dev->wl->current_beacon);
|
||||||
dev->wl->current_beacon = NULL;
|
dev->wl->current_beacon = NULL;
|
||||||
@@ -4437,7 +4420,7 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
|
|||||||
wl->current_dev = dev;
|
wl->current_dev = dev;
|
||||||
INIT_WORK(&dev->restart_work, b43_chip_reset);
|
INIT_WORK(&dev->restart_work, b43_chip_reset);
|
||||||
|
|
||||||
b43_switch_analog(dev, 0);
|
dev->phy.ops->switch_analog(dev, 0);
|
||||||
ssb_device_disable(dev->dev, 0);
|
ssb_device_disable(dev->dev, 0);
|
||||||
ssb_bus_may_powerdown(bus);
|
ssb_bus_may_powerdown(bus);
|
||||||
|
|
||||||
|
@@ -632,6 +632,7 @@ const struct b43_phy_operations b43_phyops_a = {
|
|||||||
.radio_write = b43_aphy_op_radio_write,
|
.radio_write = b43_aphy_op_radio_write,
|
||||||
.supports_hwpctl = b43_aphy_op_supports_hwpctl,
|
.supports_hwpctl = b43_aphy_op_supports_hwpctl,
|
||||||
.software_rfkill = b43_aphy_op_software_rfkill,
|
.software_rfkill = b43_aphy_op_software_rfkill,
|
||||||
|
.switch_analog = b43_phyop_switch_analog_generic,
|
||||||
.switch_channel = b43_aphy_op_switch_channel,
|
.switch_channel = b43_aphy_op_switch_channel,
|
||||||
.get_default_chan = b43_aphy_op_get_default_chan,
|
.get_default_chan = b43_aphy_op_get_default_chan,
|
||||||
.set_rx_antenna = b43_aphy_op_set_rx_antenna,
|
.set_rx_antenna = b43_aphy_op_set_rx_antenna,
|
||||||
|
@@ -374,3 +374,8 @@ int b43_phy_shm_tssi_read(struct b43_wldev *dev, u16 shm_offset)
|
|||||||
|
|
||||||
return average;
|
return average;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void b43_phyop_switch_analog_generic(struct b43_wldev *dev, bool on)
|
||||||
|
{
|
||||||
|
b43_write16(dev, B43_MMIO_PHY0, on ? 0 : 0xF4);
|
||||||
|
}
|
||||||
|
@@ -108,6 +108,8 @@ enum b43_txpwr_result {
|
|||||||
* RFKILL_STATE_SOFT_BLOCKED or
|
* RFKILL_STATE_SOFT_BLOCKED or
|
||||||
* RFKILL_STATE_UNBLOCKED
|
* RFKILL_STATE_UNBLOCKED
|
||||||
* Must not be NULL.
|
* Must not be NULL.
|
||||||
|
* @switch_analog: Turn the Analog on/off.
|
||||||
|
* Must not be NULL.
|
||||||
* @switch_channel: Switch the radio to another channel.
|
* @switch_channel: Switch the radio to another channel.
|
||||||
* Must not be NULL.
|
* Must not be NULL.
|
||||||
* @get_default_chan: Just returns the default channel number.
|
* @get_default_chan: Just returns the default channel number.
|
||||||
@@ -158,6 +160,7 @@ struct b43_phy_operations {
|
|||||||
/* Radio */
|
/* Radio */
|
||||||
bool (*supports_hwpctl)(struct b43_wldev *dev);
|
bool (*supports_hwpctl)(struct b43_wldev *dev);
|
||||||
void (*software_rfkill)(struct b43_wldev *dev, enum rfkill_state state);
|
void (*software_rfkill)(struct b43_wldev *dev, enum rfkill_state state);
|
||||||
|
void (*switch_analog)(struct b43_wldev *dev, bool on);
|
||||||
int (*switch_channel)(struct b43_wldev *dev, unsigned int new_channel);
|
int (*switch_channel)(struct b43_wldev *dev, unsigned int new_channel);
|
||||||
unsigned int (*get_default_chan)(struct b43_wldev *dev);
|
unsigned int (*get_default_chan)(struct b43_wldev *dev);
|
||||||
void (*set_rx_antenna)(struct b43_wldev *dev, int antenna);
|
void (*set_rx_antenna)(struct b43_wldev *dev, int antenna);
|
||||||
@@ -397,5 +400,14 @@ void b43_phy_txpower_adjust_work(struct work_struct *work);
|
|||||||
*/
|
*/
|
||||||
int b43_phy_shm_tssi_read(struct b43_wldev *dev, u16 shm_offset);
|
int b43_phy_shm_tssi_read(struct b43_wldev *dev, u16 shm_offset);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* b43_phy_switch_analog_generic - Generic PHY operation for switching the Analog.
|
||||||
|
*
|
||||||
|
* It does the switching based on the PHY0 core register.
|
||||||
|
* Do _not_ call this directly. Only use it as a switch_analog callback
|
||||||
|
* for struct b43_phy_operations.
|
||||||
|
*/
|
||||||
|
void b43_phyop_switch_analog_generic(struct b43_wldev *dev, bool on);
|
||||||
|
|
||||||
|
|
||||||
#endif /* LINUX_B43_PHY_COMMON_H_ */
|
#endif /* LINUX_B43_PHY_COMMON_H_ */
|
||||||
|
@@ -3271,6 +3271,7 @@ const struct b43_phy_operations b43_phyops_g = {
|
|||||||
.radio_write = b43_gphy_op_radio_write,
|
.radio_write = b43_gphy_op_radio_write,
|
||||||
.supports_hwpctl = b43_gphy_op_supports_hwpctl,
|
.supports_hwpctl = b43_gphy_op_supports_hwpctl,
|
||||||
.software_rfkill = b43_gphy_op_software_rfkill,
|
.software_rfkill = b43_gphy_op_software_rfkill,
|
||||||
|
.switch_analog = b43_phyop_switch_analog_generic,
|
||||||
.switch_channel = b43_gphy_op_switch_channel,
|
.switch_channel = b43_gphy_op_switch_channel,
|
||||||
.get_default_chan = b43_gphy_op_get_default_chan,
|
.get_default_chan = b43_gphy_op_get_default_chan,
|
||||||
.set_rx_antenna = b43_gphy_op_set_rx_antenna,
|
.set_rx_antenna = b43_gphy_op_set_rx_antenna,
|
||||||
|
@@ -146,6 +146,7 @@ const struct b43_phy_operations b43_phyops_lp = {
|
|||||||
.radio_read = b43_lpphy_op_radio_read,
|
.radio_read = b43_lpphy_op_radio_read,
|
||||||
.radio_write = b43_lpphy_op_radio_write,
|
.radio_write = b43_lpphy_op_radio_write,
|
||||||
.software_rfkill = b43_lpphy_op_software_rfkill,
|
.software_rfkill = b43_lpphy_op_software_rfkill,
|
||||||
|
.switch_analog = b43_phyop_switch_analog_generic,
|
||||||
.switch_channel = b43_lpphy_op_switch_channel,
|
.switch_channel = b43_lpphy_op_switch_channel,
|
||||||
.get_default_chan = b43_lpphy_op_get_default_chan,
|
.get_default_chan = b43_lpphy_op_get_default_chan,
|
||||||
.set_rx_antenna = b43_lpphy_op_set_rx_antenna,
|
.set_rx_antenna = b43_lpphy_op_set_rx_antenna,
|
||||||
|
@@ -583,6 +583,12 @@ static void b43_nphy_op_software_rfkill(struct b43_wldev *dev,
|
|||||||
{//TODO
|
{//TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void b43_nphy_op_switch_analog(struct b43_wldev *dev, bool on)
|
||||||
|
{
|
||||||
|
b43_phy_write(dev, B43_NPHY_AFECTL_OVER,
|
||||||
|
on ? 0 : 0x7FFF);
|
||||||
|
}
|
||||||
|
|
||||||
static int b43_nphy_op_switch_channel(struct b43_wldev *dev,
|
static int b43_nphy_op_switch_channel(struct b43_wldev *dev,
|
||||||
unsigned int new_channel)
|
unsigned int new_channel)
|
||||||
{
|
{
|
||||||
@@ -614,6 +620,7 @@ const struct b43_phy_operations b43_phyops_n = {
|
|||||||
.radio_read = b43_nphy_op_radio_read,
|
.radio_read = b43_nphy_op_radio_read,
|
||||||
.radio_write = b43_nphy_op_radio_write,
|
.radio_write = b43_nphy_op_radio_write,
|
||||||
.software_rfkill = b43_nphy_op_software_rfkill,
|
.software_rfkill = b43_nphy_op_software_rfkill,
|
||||||
|
.switch_analog = b43_nphy_op_switch_analog,
|
||||||
.switch_channel = b43_nphy_op_switch_channel,
|
.switch_channel = b43_nphy_op_switch_channel,
|
||||||
.get_default_chan = b43_nphy_op_get_default_chan,
|
.get_default_chan = b43_nphy_op_get_default_chan,
|
||||||
.recalc_txpower = b43_nphy_op_recalc_txpower,
|
.recalc_txpower = b43_nphy_op_recalc_txpower,
|
||||||
|
Reference in New Issue
Block a user