aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2011-06-01 19:07:12 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-06-03 15:01:07 -0400
commit4da909e7b572b561d8150f9d41b04bcfff386222 (patch)
tree497b59e2a2aa338199c16f62cd8449ab51203e35
parent5a6f78afdabeb8b8e0811547fb98813323abf888 (diff)
b43: do not use SSB specific flags when calling core reset function
Luckily the only flag we use when calling core reset is GMODE one. Thanks to that we can just switch to single bool and make function calls bus generic. Tested on my BCM4312 (LP-PHY) and early tested with BCM43224. 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/main.c25
-rw-r--r--drivers/net/wireless/b43/main.h2
-rw-r--r--drivers/net/wireless/b43/phy_g.c2
3 files changed, 13 insertions, 16 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 659bc3169a4e..1b9d3cc2dd96 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -1144,11 +1144,14 @@ void b43_power_saving_ctl_bits(struct b43_wldev *dev, unsigned int ps_flags)
1144 } 1144 }
1145} 1145}
1146 1146
1147static void b43_ssb_wireless_core_reset(struct b43_wldev *dev, u32 flags) 1147static void b43_ssb_wireless_core_reset(struct b43_wldev *dev, bool gmode)
1148{ 1148{
1149 struct ssb_device *sdev = dev->dev->sdev; 1149 struct ssb_device *sdev = dev->dev->sdev;
1150 u32 tmslow; 1150 u32 tmslow;
1151 u32 flags = 0;
1151 1152
1153 if (gmode)
1154 flags |= B43_TMSLOW_GMODE;
1152 flags |= B43_TMSLOW_PHYCLKEN; 1155 flags |= B43_TMSLOW_PHYCLKEN;
1153 flags |= B43_TMSLOW_PHYRESET; 1156 flags |= B43_TMSLOW_PHYRESET;
1154 if (dev->phy.type == B43_PHYTYPE_N) 1157 if (dev->phy.type == B43_PHYTYPE_N)
@@ -1169,11 +1172,11 @@ static void b43_ssb_wireless_core_reset(struct b43_wldev *dev, u32 flags)
1169 msleep(1); 1172 msleep(1);
1170} 1173}
1171 1174
1172void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags) 1175void b43_wireless_core_reset(struct b43_wldev *dev, bool gmode)
1173{ 1176{
1174 u32 macctl; 1177 u32 macctl;
1175 1178
1176 b43_ssb_wireless_core_reset(dev, flags); 1179 b43_ssb_wireless_core_reset(dev, gmode);
1177 1180
1178 /* Turn Analog ON, but only if we already know the PHY-type. 1181 /* Turn Analog ON, but only if we already know the PHY-type.
1179 * This protects against very early setup where we don't know the 1182 * This protects against very early setup where we don't know the
@@ -1184,7 +1187,7 @@ void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags)
1184 1187
1185 macctl = b43_read32(dev, B43_MMIO_MACCTL); 1188 macctl = b43_read32(dev, B43_MMIO_MACCTL);
1186 macctl &= ~B43_MACCTL_GMODE; 1189 macctl &= ~B43_MACCTL_GMODE;
1187 if (flags & B43_TMSLOW_GMODE) 1190 if (gmode)
1188 macctl |= B43_MACCTL_GMODE; 1191 macctl |= B43_MACCTL_GMODE;
1189 macctl |= B43_MACCTL_IHR_ENABLED; 1192 macctl |= B43_MACCTL_IHR_ENABLED;
1190 b43_write32(dev, B43_MMIO_MACCTL, macctl); 1193 b43_write32(dev, B43_MMIO_MACCTL, macctl);
@@ -4328,17 +4331,14 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
4328 struct b43_phy *phy = &dev->phy; 4331 struct b43_phy *phy = &dev->phy;
4329 int err; 4332 int err;
4330 u64 hf; 4333 u64 hf;
4331 u32 tmp;
4332 4334
4333 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT); 4335 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT);
4334 4336
4335 err = b43_bus_powerup(dev, 0); 4337 err = b43_bus_powerup(dev, 0);
4336 if (err) 4338 if (err)
4337 goto out; 4339 goto out;
4338 if (!b43_device_is_enabled(dev)) { 4340 if (!b43_device_is_enabled(dev))
4339 tmp = phy->gmode ? B43_TMSLOW_GMODE : 0; 4341 b43_wireless_core_reset(dev, phy->gmode);
4340 b43_wireless_core_reset(dev, tmp);
4341 }
4342 4342
4343 /* Reset all data structures. */ 4343 /* Reset all data structures. */
4344 setup_struct_wldev_for_init(dev); 4344 setup_struct_wldev_for_init(dev);
@@ -4747,7 +4747,6 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
4747 struct pci_dev *pdev = (bus->bustype == SSB_BUSTYPE_PCI) ? bus->host_pci : NULL; 4747 struct pci_dev *pdev = (bus->bustype == SSB_BUSTYPE_PCI) ? bus->host_pci : NULL;
4748 int err; 4748 int err;
4749 bool have_2ghz_phy = 0, have_5ghz_phy = 0; 4749 bool have_2ghz_phy = 0, have_5ghz_phy = 0;
4750 u32 tmp;
4751 4750
4752 /* Do NOT do any device initialization here. 4751 /* Do NOT do any device initialization here.
4753 * Do it in wireless_core_init() instead. 4752 * Do it in wireless_core_init() instead.
@@ -4773,8 +4772,7 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
4773 4772
4774 dev->phy.gmode = have_2ghz_phy; 4773 dev->phy.gmode = have_2ghz_phy;
4775 dev->phy.radio_on = 1; 4774 dev->phy.radio_on = 1;
4776 tmp = dev->phy.gmode ? B43_TMSLOW_GMODE : 0; 4775 b43_wireless_core_reset(dev, dev->phy.gmode);
4777 b43_wireless_core_reset(dev, tmp);
4778 4776
4779 err = b43_phy_versioning(dev); 4777 err = b43_phy_versioning(dev);
4780 if (err) 4778 if (err)
@@ -4822,8 +4820,7 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
4822 goto err_powerdown; 4820 goto err_powerdown;
4823 4821
4824 dev->phy.gmode = have_2ghz_phy; 4822 dev->phy.gmode = have_2ghz_phy;
4825 tmp = dev->phy.gmode ? B43_TMSLOW_GMODE : 0; 4823 b43_wireless_core_reset(dev, dev->phy.gmode);
4826 b43_wireless_core_reset(dev, tmp);
4827 4824
4828 err = b43_validate_chipaccess(dev); 4825 err = b43_validate_chipaccess(dev);
4829 if (err) 4826 if (err)
diff --git a/drivers/net/wireless/b43/main.h b/drivers/net/wireless/b43/main.h
index a0d327f13183..e4ebce9be592 100644
--- a/drivers/net/wireless/b43/main.h
+++ b/drivers/net/wireless/b43/main.h
@@ -121,7 +121,7 @@ void b43_hf_write(struct b43_wldev *dev, u64 value);
121 121
122void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on); 122void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on);
123 123
124void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags); 124void b43_wireless_core_reset(struct b43_wldev *dev, bool gmode);
125 125
126void b43_controller_restart(struct b43_wldev *dev, const char *reason); 126void b43_controller_restart(struct b43_wldev *dev, const char *reason);
127 127
diff --git a/drivers/net/wireless/b43/phy_g.c b/drivers/net/wireless/b43/phy_g.c
index 684be1fd59ae..83532d19347f 100644
--- a/drivers/net/wireless/b43/phy_g.c
+++ b/drivers/net/wireless/b43/phy_g.c
@@ -2535,7 +2535,7 @@ static int b43_gphy_op_prepare_hardware(struct b43_wldev *dev)
2535 b43_wireless_core_reset(dev, 0); 2535 b43_wireless_core_reset(dev, 0);
2536 b43_phy_initg(dev); 2536 b43_phy_initg(dev);
2537 phy->gmode = 1; 2537 phy->gmode = 1;
2538 b43_wireless_core_reset(dev, B43_TMSLOW_GMODE); 2538 b43_wireless_core_reset(dev, 1);
2539 } 2539 }
2540 2540
2541 return 0; 2541 return 0;