diff options
-rw-r--r-- | drivers/net/wireless/b43/main.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/b43/main.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/b43/phy_g.c | 2 |
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 | ||
1147 | static void b43_ssb_wireless_core_reset(struct b43_wldev *dev, u32 flags) | 1147 | static 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 | ||
1172 | void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags) | 1175 | void 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 | ||
122 | void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on); | 122 | void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on); |
123 | 123 | ||
124 | void b43_wireless_core_reset(struct b43_wldev *dev, u32 flags); | 124 | void b43_wireless_core_reset(struct b43_wldev *dev, bool gmode); |
125 | 125 | ||
126 | void b43_controller_restart(struct b43_wldev *dev, const char *reason); | 126 | void 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; |