The trick was to find 0x810 PHY reg ops close to analog enabling code. To find out proper masks and sets, MMIO hacks were used. Signed-off-by: Rafał Miłecki <zajec5@xxxxxxxxx> --- Bigger part of MMIO dump, showing where implemented OPS were found: >>> analog(ON) start phy_write(0x0911) <- 0x00cd phy_write(0x0910) <- 0x0000 phy_write(0x0915) <- 0x00cd phy_write(0x0914) <- 0x0000 phy_write(0x0919) <- 0x00cd phy_write(0x0918) <- 0x0000 >>> analog(ON) end read16 0xb06003e0 -> 0x9701 read32 0xb0600120 -> 0xc4020402 phy_read(0x0810) -> 0x0000 phy_write(0x0810) <- 0x0000 phy_read(0x0810) -> 0x0000 phy_write(0x0810) <- 0x0001 phy_read(0x0810) -> 0x0001 phy_write(0x0810) <- 0x0000 phy_read(0x0810) -> 0x0000 phy_write(0x0810) <- 0x0002 radio_write(0x0c51) <- 0x0070 --- drivers/net/wireless/b43/phy_ht.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/drivers/net/wireless/b43/phy_ht.c b/drivers/net/wireless/b43/phy_ht.c index e84d4c1..008c1a9 100644 --- a/drivers/net/wireless/b43/phy_ht.c +++ b/drivers/net/wireless/b43/phy_ht.c @@ -69,6 +69,10 @@ static void b43_phy_ht_op_software_rfkill(struct b43_wldev *dev, if (blocked) { b43_phy_mask(dev, B43_PHY_HT_RF_CTL1, ~0); } else { + b43_phy_mask(dev, B43_PHY_HT_RF_CTL1, ~0); + b43_phy_maskset(dev, B43_PHY_HT_RF_CTL1, ~0, 0x1); + b43_phy_mask(dev, B43_PHY_HT_RF_CTL1, ~0); + b43_phy_maskset(dev, B43_PHY_HT_RF_CTL1, ~0, 0x2); } } -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html