diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2011-07-16 19:06:06 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-19 17:03:12 -0400 |
commit | 491735929b63cb665b2215e3183b960e66f221f3 (patch) | |
tree | bb81a3181412faf5c57a56ac852ac51f71825c1d | |
parent | 6f53912fc317ab130bd910c5c30420a21ea38115 (diff) |
b43: bcma: implement full core reset
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.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 15ff2187cce2..269483a52b3c 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -1156,17 +1156,37 @@ void b43_power_saving_ctl_bits(struct b43_wldev *dev, unsigned int ps_flags) | |||
1156 | } | 1156 | } |
1157 | 1157 | ||
1158 | #ifdef CONFIG_B43_BCMA | 1158 | #ifdef CONFIG_B43_BCMA |
1159 | static void b43_bcma_wireless_core_reset(struct b43_wldev *dev, bool gmode) | 1159 | static void b43_bcma_phy_reset(struct b43_wldev *dev) |
1160 | { | 1160 | { |
1161 | u32 flags = 0; | 1161 | u32 flags; |
1162 | 1162 | ||
1163 | if (gmode) | 1163 | /* Put PHY into reset */ |
1164 | flags = B43_BCMA_IOCTL_GMODE; | 1164 | flags = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); |
1165 | flags |= B43_BCMA_IOCTL_PHY_CLKEN; | 1165 | flags |= B43_BCMA_IOCTL_PHY_RESET; |
1166 | flags |= B43_BCMA_IOCTL_PHY_BW_20MHZ; /* Make 20 MHz def */ | 1166 | flags |= B43_BCMA_IOCTL_PHY_BW_20MHZ; /* Make 20 MHz def */ |
1167 | b43_device_enable(dev, flags); | 1167 | bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, flags); |
1168 | udelay(2); | ||
1169 | |||
1170 | /* Take PHY out of reset */ | ||
1171 | flags = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); | ||
1172 | flags &= ~B43_BCMA_IOCTL_PHY_RESET; | ||
1173 | flags |= BCMA_IOCTL_FGC; | ||
1174 | bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, flags); | ||
1175 | udelay(1); | ||
1168 | 1176 | ||
1169 | /* TODO: reset PHY */ | 1177 | /* Do not force clock anymore */ |
1178 | flags = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); | ||
1179 | flags &= ~BCMA_IOCTL_FGC; | ||
1180 | bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, flags); | ||
1181 | udelay(1); | ||
1182 | } | ||
1183 | |||
1184 | static void b43_bcma_wireless_core_reset(struct b43_wldev *dev, bool gmode) | ||
1185 | { | ||
1186 | b43_device_enable(dev, B43_BCMA_IOCTL_PHY_CLKEN); | ||
1187 | bcma_core_set_clockmode(dev->dev->bdev, BCMA_CLKMODE_FAST); | ||
1188 | b43_bcma_phy_reset(dev); | ||
1189 | bcma_core_pll_ctl(dev->dev->bdev, 0x300, 0x3000000, true); | ||
1170 | } | 1190 | } |
1171 | #endif | 1191 | #endif |
1172 | 1192 | ||