aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;