b43: Move Analog switching into phy code
authorMichael Buesch <mb@bu3sch.de>
Wed, 3 Sep 2008 10:12:20 +0000 (12:12 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 8 Sep 2008 18:00:16 +0000 (14:00 -0400)
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>
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/phy_a.c
drivers/net/wireless/b43/phy_common.c
drivers/net/wireless/b43/phy_common.h
drivers/net/wireless/b43/phy_g.c
drivers/net/wireless/b43/phy_lp.c
drivers/net/wireless/b43/phy_n.c

index 156e8f3151d544fd1fde7d7ffde0c2721bb532bd..ab9fa8126b7b239b18e31f185f59fb7c7c27a036 100644 (file)
@@ -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)
 {
        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,
         * when we know the PHY-type. */
        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_MACCTL_GMODE;
@@ -3952,7 +3935,7 @@ static void b43_wireless_core_exit(struct b43_wldev *dev)
        b43_dma_free(dev);
        b43_pio_free(dev);
        b43_chip_exit(dev);
-       b43_switch_analog(dev, 0);
+       dev->phy.ops->switch_analog(dev, 0);
        if (dev->wl->current_beacon) {
                dev_kfree_skb_any(dev->wl->current_beacon);
                dev->wl->current_beacon = NULL;
@@ -4437,7 +4420,7 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
                wl->current_dev = dev;
        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_bus_may_powerdown(bus);
 
index c9f00ace46adad7dd1e90b75581ea16459b8e4a6..0f1a84c9de6162c41a83c823cc0c0f59492e9594 100644 (file)
@@ -632,6 +632,7 @@ const struct b43_phy_operations b43_phyops_a = {
        .radio_write            = b43_aphy_op_radio_write,
        .supports_hwpctl        = b43_aphy_op_supports_hwpctl,
        .software_rfkill        = b43_aphy_op_software_rfkill,
+       .switch_analog          = b43_phyop_switch_analog_generic,
        .switch_channel         = b43_aphy_op_switch_channel,
        .get_default_chan       = b43_aphy_op_get_default_chan,
        .set_rx_antenna         = b43_aphy_op_set_rx_antenna,
index e12fca69a970d80b879be34eda5411f0d98fef29..4d4345d76abfcdffbc6d25583e10d8922b77c4fc 100644 (file)
@@ -374,3 +374,8 @@ int b43_phy_shm_tssi_read(struct b43_wldev *dev, u16 shm_offset)
 
        return average;
 }
+
+void b43_phyop_switch_analog_generic(struct b43_wldev *dev, bool on)
+{
+       b43_write16(dev, B43_MMIO_PHY0, on ? 0 : 0xF4);
+}
index 4a1795f5fc215ed09f4e8c3e21b022382db70b30..c9f5430d1d7d2aa620252aebba09392ae0876d40 100644 (file)
@@ -108,6 +108,8 @@ enum b43_txpwr_result {
  *                     RFKILL_STATE_SOFT_BLOCKED or
  *                     RFKILL_STATE_UNBLOCKED
  *                     Must not be NULL.
+ * @switch_analog:     Turn the Analog on/off.
+ *                     Must not be NULL.
  * @switch_channel:    Switch the radio to another channel.
  *                     Must not be NULL.
  * @get_default_chan:  Just returns the default channel number.
@@ -158,6 +160,7 @@ struct b43_phy_operations {
        /* Radio */
        bool (*supports_hwpctl)(struct b43_wldev *dev);
        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);
        unsigned int (*get_default_chan)(struct b43_wldev *dev);
        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);
 
+/**
+ * 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_ */
index b44740b24e715c0741e798b6db1eca481fd67405..e8c012c9abb027679a4800a803f0a9346301397d 100644 (file)
@@ -3271,6 +3271,7 @@ const struct b43_phy_operations b43_phyops_g = {
        .radio_write            = b43_gphy_op_radio_write,
        .supports_hwpctl        = b43_gphy_op_supports_hwpctl,
        .software_rfkill        = b43_gphy_op_software_rfkill,
+       .switch_analog          = b43_phyop_switch_analog_generic,
        .switch_channel         = b43_gphy_op_switch_channel,
        .get_default_chan       = b43_gphy_op_get_default_chan,
        .set_rx_antenna         = b43_gphy_op_set_rx_antenna,
index 41994f1f0f0e0086f104eee7ea7ed467e8242860..c5d9dc3667c0bad186bf6c556394e13ae24a7cb0 100644 (file)
@@ -146,6 +146,7 @@ const struct b43_phy_operations b43_phyops_lp = {
        .radio_read             = b43_lpphy_op_radio_read,
        .radio_write            = b43_lpphy_op_radio_write,
        .software_rfkill        = b43_lpphy_op_software_rfkill,
+       .switch_analog          = b43_phyop_switch_analog_generic,
        .switch_channel         = b43_lpphy_op_switch_channel,
        .get_default_chan       = b43_lpphy_op_get_default_chan,
        .set_rx_antenna         = b43_lpphy_op_set_rx_antenna,
index 617724dc6aa81843dff38bfd4c0c8d42af4455a1..8bcfda5f3f0730e7691ed246041ef399fadb6e7d 100644 (file)
@@ -583,6 +583,12 @@ static void b43_nphy_op_software_rfkill(struct b43_wldev *dev,
 {//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,
                                      unsigned int new_channel)
 {
@@ -614,6 +620,7 @@ const struct b43_phy_operations b43_phyops_n = {
        .radio_read             = b43_nphy_op_radio_read,
        .radio_write            = b43_nphy_op_radio_write,
        .software_rfkill        = b43_nphy_op_software_rfkill,
+       .switch_analog          = b43_nphy_op_switch_analog,
        .switch_channel         = b43_nphy_op_switch_channel,
        .get_default_chan       = b43_nphy_op_get_default_chan,
        .recalc_txpower         = b43_nphy_op_recalc_txpower,