aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2011-05-17 20:06:43 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-06-01 15:10:58 -0400
commit24ca39d67968c42d377abc122f6dca635ebcdb79 (patch)
treeeed68c18adb198c5030e35e24aef5b9c4e623748
parent79d2232fed23e8e0d1b11abe2f9b78fb09084506 (diff)
b43: bus: abstract bus and core operations
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/b43/b43.h23
-rw-r--r--drivers/net/wireless/b43/bus.c31
-rw-r--r--drivers/net/wireless/b43/bus.h8
-rw-r--r--drivers/net/wireless/b43/main.c22
-rw-r--r--drivers/net/wireless/b43/rfkill.c9
5 files changed, 77 insertions, 16 deletions
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
index 3378d93cc33d..0a3c7012901b 100644
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
@@ -881,6 +881,29 @@ static inline enum ieee80211_band b43_current_band(struct b43_wl *wl)
881 return wl->hw->conf.channel->band; 881 return wl->hw->conf.channel->band;
882} 882}
883 883
884static inline int b43_bus_may_powerdown(struct b43_wldev *wldev)
885{
886 return wldev->dev->bus_may_powerdown(wldev->dev);
887}
888static inline int b43_bus_powerup(struct b43_wldev *wldev, bool dynamic_pctl)
889{
890 return wldev->dev->bus_powerup(wldev->dev, dynamic_pctl);
891}
892static inline int b43_device_is_enabled(struct b43_wldev *wldev)
893{
894 return wldev->dev->device_is_enabled(wldev->dev);
895}
896static inline void b43_device_enable(struct b43_wldev *wldev,
897 u32 core_specific_flags)
898{
899 wldev->dev->device_enable(wldev->dev, core_specific_flags);
900}
901static inline void b43_device_disable(struct b43_wldev *wldev,
902 u32 core_specific_flags)
903{
904 wldev->dev->device_disable(wldev->dev, core_specific_flags);
905}
906
884static inline u16 b43_read16(struct b43_wldev *dev, u16 offset) 907static inline u16 b43_read16(struct b43_wldev *dev, u16 offset)
885{ 908{
886 return dev->dev->read16(dev->dev, offset); 909 return dev->dev->read16(dev->dev, offset);
diff --git a/drivers/net/wireless/b43/bus.c b/drivers/net/wireless/b43/bus.c
index f897b7054a0a..6c63aecd6ab4 100644
--- a/drivers/net/wireless/b43/bus.c
+++ b/drivers/net/wireless/b43/bus.c
@@ -25,6 +25,31 @@
25 25
26 26
27/* SSB */ 27/* SSB */
28
29static inline int b43_bus_ssb_bus_may_powerdown(struct b43_bus_dev *dev)
30{
31 return ssb_bus_may_powerdown(dev->sdev->bus);
32}
33static inline int b43_bus_ssb_bus_powerup(struct b43_bus_dev *dev,
34 bool dynamic_pctl)
35{
36 return ssb_bus_powerup(dev->sdev->bus, dynamic_pctl);
37}
38static inline int b43_bus_ssb_device_is_enabled(struct b43_bus_dev *dev)
39{
40 return ssb_device_is_enabled(dev->sdev);
41}
42static inline void b43_bus_ssb_device_enable(struct b43_bus_dev *dev,
43 u32 core_specific_flags)
44{
45 ssb_device_enable(dev->sdev, core_specific_flags);
46}
47static inline void b43_bus_ssb_device_disable(struct b43_bus_dev *dev,
48 u32 core_specific_flags)
49{
50 ssb_device_disable(dev->sdev, core_specific_flags);
51}
52
28static inline u16 b43_bus_ssb_read16(struct b43_bus_dev *dev, u16 offset) 53static inline u16 b43_bus_ssb_read16(struct b43_bus_dev *dev, u16 offset)
29{ 54{
30 return ssb_read16(dev->sdev, offset); 55 return ssb_read16(dev->sdev, offset);
@@ -63,6 +88,12 @@ struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev)
63 dev->bus_type = B43_BUS_SSB; 88 dev->bus_type = B43_BUS_SSB;
64 dev->sdev = sdev; 89 dev->sdev = sdev;
65 90
91 dev->bus_may_powerdown = b43_bus_ssb_bus_may_powerdown;
92 dev->bus_powerup = b43_bus_ssb_bus_powerup;
93 dev->device_is_enabled = b43_bus_ssb_device_is_enabled;
94 dev->device_enable = b43_bus_ssb_device_enable;
95 dev->device_disable = b43_bus_ssb_device_disable;
96
66 dev->read16 = b43_bus_ssb_read16; 97 dev->read16 = b43_bus_ssb_read16;
67 dev->read32 = b43_bus_ssb_read32; 98 dev->read32 = b43_bus_ssb_read32;
68 dev->write16 = b43_bus_ssb_write16; 99 dev->write16 = b43_bus_ssb_write16;
diff --git a/drivers/net/wireless/b43/bus.h b/drivers/net/wireless/b43/bus.h
index e88b4494beaa..fd88e2b121a0 100644
--- a/drivers/net/wireless/b43/bus.h
+++ b/drivers/net/wireless/b43/bus.h
@@ -11,6 +11,14 @@ struct b43_bus_dev {
11 struct ssb_device *sdev; 11 struct ssb_device *sdev;
12 }; 12 };
13 13
14 int (*bus_may_powerdown)(struct b43_bus_dev *dev);
15 int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl);
16 int (*device_is_enabled)(struct b43_bus_dev *dev);
17 void (*device_enable)(struct b43_bus_dev *dev,
18 u32 core_specific_flags);
19 void (*device_disable)(struct b43_bus_dev *dev,
20 u32 core_specific_flags);
21
14 u16 (*read16)(struct b43_bus_dev *dev, u16 offset); 22 u16 (*read16)(struct b43_bus_dev *dev, u16 offset);
15 u32 (*read32)(struct b43_bus_dev *dev, u16 offset); 23 u32 (*read32)(struct b43_bus_dev *dev, u16 offset);
16 void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value); 24 void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value);
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index e80aaef63180..bb82ddfa44f8 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -1152,7 +1152,7 @@ static void b43_ssb_wireless_core_reset(struct b43_wldev *dev, u32 flags)
1152 flags |= B43_TMSLOW_PHYRESET; 1152 flags |= B43_TMSLOW_PHYRESET;
1153 if (dev->phy.type == B43_PHYTYPE_N) 1153 if (dev->phy.type == B43_PHYTYPE_N)
1154 flags |= B43_TMSLOW_PHY_BANDWIDTH_20MHZ; /* Make 20 MHz def */ 1154 flags |= B43_TMSLOW_PHY_BANDWIDTH_20MHZ; /* Make 20 MHz def */
1155 ssb_device_enable(dev->sdev, flags); 1155 b43_device_enable(dev, flags);
1156 msleep(2); /* Wait for the PLL to turn on. */ 1156 msleep(2); /* Wait for the PLL to turn on. */
1157 1157
1158 /* Now take the PHY out of Reset again */ 1158 /* Now take the PHY out of Reset again */
@@ -4310,8 +4310,8 @@ static void b43_wireless_core_exit(struct b43_wldev *dev)
4310 dev->wl->current_beacon = NULL; 4310 dev->wl->current_beacon = NULL;
4311 } 4311 }
4312 4312
4313 ssb_device_disable(dev->sdev, 0); 4313 b43_device_disable(dev, 0);
4314 ssb_bus_may_powerdown(dev->sdev->bus); 4314 b43_bus_may_powerdown(dev);
4315} 4315}
4316 4316
4317/* Initialize a wireless core */ 4317/* Initialize a wireless core */
@@ -4326,10 +4326,10 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
4326 4326
4327 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT); 4327 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT);
4328 4328
4329 err = ssb_bus_powerup(bus, 0); 4329 err = b43_bus_powerup(dev, 0);
4330 if (err) 4330 if (err)
4331 goto out; 4331 goto out;
4332 if (!ssb_device_is_enabled(dev->sdev)) { 4332 if (!b43_device_is_enabled(dev)) {
4333 tmp = phy->gmode ? B43_TMSLOW_GMODE : 0; 4333 tmp = phy->gmode ? B43_TMSLOW_GMODE : 0;
4334 b43_wireless_core_reset(dev, tmp); 4334 b43_wireless_core_reset(dev, tmp);
4335 } 4335 }
@@ -4414,7 +4414,7 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
4414 b43_set_synth_pu_delay(dev, 1); 4414 b43_set_synth_pu_delay(dev, 1);
4415 b43_bluetooth_coext_enable(dev); 4415 b43_bluetooth_coext_enable(dev);
4416 4416
4417 ssb_bus_powerup(bus, !(sprom->boardflags_lo & B43_BFL_XTAL_NOSLOW)); 4417 b43_bus_powerup(dev, !(sprom->boardflags_lo & B43_BFL_XTAL_NOSLOW));
4418 b43_upload_card_macaddress(dev); 4418 b43_upload_card_macaddress(dev);
4419 b43_security_init(dev); 4419 b43_security_init(dev);
4420 4420
@@ -4431,7 +4431,7 @@ out:
4431err_chip_exit: 4431err_chip_exit:
4432 b43_chip_exit(dev); 4432 b43_chip_exit(dev);
4433err_busdown: 4433err_busdown:
4434 ssb_bus_may_powerdown(bus); 4434 b43_bus_may_powerdown(dev);
4435 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT); 4435 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT);
4436 return err; 4436 return err;
4437} 4437}
@@ -4750,7 +4750,7 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
4750 * that in core_init(), too. 4750 * that in core_init(), too.
4751 */ 4751 */
4752 4752
4753 err = ssb_bus_powerup(bus, 0); 4753 err = b43_bus_powerup(dev, 0);
4754 if (err) { 4754 if (err) {
4755 b43err(wl, "Bus powerup failed\n"); 4755 b43err(wl, "Bus powerup failed\n");
4756 goto out; 4756 goto out;
@@ -4832,8 +4832,8 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
4832 INIT_WORK(&dev->restart_work, b43_chip_reset); 4832 INIT_WORK(&dev->restart_work, b43_chip_reset);
4833 4833
4834 dev->phy.ops->switch_analog(dev, 0); 4834 dev->phy.ops->switch_analog(dev, 0);
4835 ssb_device_disable(dev->sdev, 0); 4835 b43_device_disable(dev, 0);
4836 ssb_bus_may_powerdown(bus); 4836 b43_bus_may_powerdown(dev);
4837 4837
4838out: 4838out:
4839 return err; 4839 return err;
@@ -4841,7 +4841,7 @@ out:
4841err_phy_free: 4841err_phy_free:
4842 b43_phy_free(dev); 4842 b43_phy_free(dev);
4843err_powerdown: 4843err_powerdown:
4844 ssb_bus_may_powerdown(bus); 4844 b43_bus_may_powerdown(dev);
4845 return err; 4845 return err;
4846} 4846}
4847 4847
diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c
index a617efe38289..59c3afe047af 100644
--- a/drivers/net/wireless/b43/rfkill.c
+++ b/drivers/net/wireless/b43/rfkill.c
@@ -37,17 +37,16 @@ void b43_rfkill_poll(struct ieee80211_hw *hw)
37{ 37{
38 struct b43_wl *wl = hw_to_b43_wl(hw); 38 struct b43_wl *wl = hw_to_b43_wl(hw);
39 struct b43_wldev *dev = wl->current_dev; 39 struct b43_wldev *dev = wl->current_dev;
40 struct ssb_bus *bus = dev->sdev->bus;
41 bool enabled; 40 bool enabled;
42 bool brought_up = false; 41 bool brought_up = false;
43 42
44 mutex_lock(&wl->mutex); 43 mutex_lock(&wl->mutex);
45 if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) { 44 if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) {
46 if (ssb_bus_powerup(bus, 0)) { 45 if (b43_bus_powerup(dev, 0)) {
47 mutex_unlock(&wl->mutex); 46 mutex_unlock(&wl->mutex);
48 return; 47 return;
49 } 48 }
50 ssb_device_enable(dev->sdev, 0); 49 b43_device_enable(dev, 0);
51 brought_up = true; 50 brought_up = true;
52 } 51 }
53 52
@@ -63,8 +62,8 @@ void b43_rfkill_poll(struct ieee80211_hw *hw)
63 } 62 }
64 63
65 if (brought_up) { 64 if (brought_up) {
66 ssb_device_disable(dev->sdev, 0); 65 b43_device_disable(dev, 0);
67 ssb_bus_may_powerdown(bus); 66 b43_bus_may_powerdown(dev);
68 } 67 }
69 68
70 mutex_unlock(&wl->mutex); 69 mutex_unlock(&wl->mutex);