aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/phy_common.c
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2014-05-17 17:24:55 -0400
committerJohn W. Linville <linville@tuxdriver.com>2014-05-19 16:42:14 -0400
commit50c1b59e2f76ab2aba0f2139a48da3ada0de14c5 (patch)
treebf27caa6997fe2a1fadd1dc74e337857f5144da4 /drivers/net/wireless/b43/phy_common.c
parentb60c3c2fdf524e9fb3cbe6b12c2c4c6d8f4febf4 (diff)
b43: complete PHY reset
Use separated function for taking PHY out of reset and implement reset for BCMA. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/phy_common.c')
-rw-r--r--drivers/net/wireless/b43/phy_common.c65
1 files changed, 58 insertions, 7 deletions
diff --git a/drivers/net/wireless/b43/phy_common.c b/drivers/net/wireless/b43/phy_common.c
index 85773a443499..26e390f9e291 100644
--- a/drivers/net/wireless/b43/phy_common.c
+++ b/drivers/net/wireless/b43/phy_common.c
@@ -314,15 +314,22 @@ void b43_phy_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set)
314 314
315void b43_phy_put_into_reset(struct b43_wldev *dev) 315void b43_phy_put_into_reset(struct b43_wldev *dev)
316{ 316{
317#ifdef CONFIG_B43_SSB
318 u32 tmp; 317 u32 tmp;
319#endif
320 318
321 switch (dev->dev->bus_type) { 319 switch (dev->dev->bus_type) {
322#ifdef CONFIG_B43_BCMA 320#ifdef CONFIG_B43_BCMA
323 case B43_BUS_BCMA: 321 case B43_BUS_BCMA:
324 b43err(dev->wl, 322 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL);
325 "Putting PHY into reset not supported on BCMA\n"); 323 tmp &= ~B43_BCMA_IOCTL_GMODE;
324 tmp |= B43_BCMA_IOCTL_PHY_RESET;
325 tmp |= BCMA_IOCTL_FGC;
326 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp);
327 udelay(1);
328
329 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL);
330 tmp &= ~BCMA_IOCTL_FGC;
331 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp);
332 udelay(1);
326 break; 333 break;
327#endif 334#endif
328#ifdef CONFIG_B43_SSB 335#ifdef CONFIG_B43_SSB
@@ -332,14 +339,58 @@ void b43_phy_put_into_reset(struct b43_wldev *dev)
332 tmp |= B43_TMSLOW_PHYRESET; 339 tmp |= B43_TMSLOW_PHYRESET;
333 tmp |= SSB_TMSLOW_FGC; 340 tmp |= SSB_TMSLOW_FGC;
334 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); 341 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp);
335 msleep(1); 342 usleep_range(1000, 2000);
336 343
337 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); 344 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW);
338 tmp &= ~SSB_TMSLOW_FGC; 345 tmp &= ~SSB_TMSLOW_FGC;
339 tmp |= B43_TMSLOW_PHYRESET;
340 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); 346 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp);
341 msleep(1); 347 usleep_range(1000, 2000);
348
349 break;
350#endif
351 }
352}
342 353
354void b43_phy_take_out_of_reset(struct b43_wldev *dev)
355{
356 u32 tmp;
357
358 switch (dev->dev->bus_type) {
359#ifdef CONFIG_B43_BCMA
360 case B43_BUS_BCMA:
361 /* Unset reset bit (with forcing clock) */
362 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL);
363 tmp &= ~B43_BCMA_IOCTL_PHY_RESET;
364 tmp &= ~B43_BCMA_IOCTL_PHY_CLKEN;
365 tmp |= BCMA_IOCTL_FGC;
366 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp);
367 udelay(1);
368
369 /* Do not force clock anymore */
370 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL);
371 tmp &= ~BCMA_IOCTL_FGC;
372 tmp |= B43_BCMA_IOCTL_PHY_CLKEN;
373 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp);
374 udelay(1);
375 break;
376#endif
377#ifdef CONFIG_B43_SSB
378 case B43_BUS_SSB:
379 /* Unset reset bit (with forcing clock) */
380 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW);
381 tmp &= ~B43_TMSLOW_PHYRESET;
382 tmp &= ~B43_TMSLOW_PHYCLKEN;
383 tmp |= SSB_TMSLOW_FGC;
384 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp);
385 ssb_read32(dev->dev->sdev, SSB_TMSLOW); /* flush */
386 usleep_range(1000, 2000);
387
388 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW);
389 tmp &= ~SSB_TMSLOW_FGC;
390 tmp |= B43_TMSLOW_PHYCLKEN;
391 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp);
392 ssb_read32(dev->dev->sdev, SSB_TMSLOW); /* flush */
393 usleep_range(1000, 2000);
343 break; 394 break;
344#endif 395#endif
345 } 396 }