---- a/drivers/net/wireless/b43/phy_n.c
-+++ b/drivers/net/wireless/b43/phy_n.c
-@@ -5165,7 +5165,8 @@ static void b43_nphy_pmu_spur_avoid(stru
- #endif
- #ifdef CONFIG_B43_SSB
- case B43_BUS_SSB:
-- /* FIXME */
-+ ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco,
-+ avoid);
- break;
- #endif
- }
---- a/drivers/ssb/driver_chipcommon_pmu.c
-+++ b/drivers/ssb/driver_chipcommon_pmu.c
-@@ -675,3 +675,32 @@ u32 ssb_pmu_get_controlclock(struct ssb_
- return 0;
- }
- }
-+
-+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid)
-+{
-+ u32 pmu_ctl = 0;
-+
-+ switch (cc->dev->bus->chip_id) {
-+ case 0x4322:
-+ ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100070);
-+ ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x1014140a);
-+ ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888854);
-+ if (spuravoid == 1)
-+ ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05201828);
-+ else
-+ ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05001828);
-+ pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD;
-+ break;
-+ case 43222:
-+ /* TODO: BCM43222 requires updating PLLs too */
-+ return;
-+ default:
-+ ssb_printk(KERN_ERR PFX
-+ "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n",
-+ cc->dev->bus->chip_id);
-+ return;
-+ }
-+
-+ chipco_set32(cc, SSB_CHIPCO_PMU_CTL, pmu_ctl);
-+}
-+EXPORT_SYMBOL_GPL(ssb_pmu_spuravoid_pllupdate);