Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: HT-PHY: Complete radio init (add missing entries)

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
ea422b2c 28f051f5

+30 -2
+1 -2
drivers/net/wireless/b43/phy_ht.c
··· 160 160 /* Prepare (reset?) radio */ 161 161 b43_radio_2059_init_pre(dev); 162 162 163 - b43_radio_write(dev, R2059_ALL | 0x51, 0x0070); 164 - b43_radio_write(dev, R2059_ALL | 0x5a, 0x0003); 163 + r2059_upload_inittabs(dev); 165 164 166 165 for (i = 0; i < ARRAY_SIZE(routing); i++) 167 166 b43_radio_set(dev, routing[i] | 0x146, 0x3);
+27
drivers/net/wireless/b43/radio_2059.c
··· 25 25 #include "b43.h" 26 26 #include "radio_2059.h" 27 27 28 + /* Extracted from MMIO dump of 6.30.223.141 */ 29 + static u16 r2059_phy_rev1_init[][2] = { 30 + { 0x051, 0x70 }, { 0x05a, 0x03 }, { 0x079, 0x01 }, { 0x082, 0x70 }, 31 + { 0x083, 0x00 }, { 0x084, 0x70 }, { 0x09a, 0x7f }, { 0x0b6, 0x10 }, 32 + { 0x188, 0x05 }, 33 + }; 34 + 28 35 #define RADIOREGS(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \ 29 36 r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \ 30 37 r20) \ ··· 145 138 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429), 146 139 }, 147 140 }; 141 + 142 + void r2059_upload_inittabs(struct b43_wldev *dev) 143 + { 144 + struct b43_phy *phy = &dev->phy; 145 + u16 *table = NULL; 146 + u16 size, i; 147 + 148 + switch (phy->rev) { 149 + case 1: 150 + table = r2059_phy_rev1_init[0]; 151 + size = ARRAY_SIZE(r2059_phy_rev1_init); 152 + break; 153 + default: 154 + B43_WARN_ON(1); 155 + return; 156 + } 157 + 158 + for (i = 0; i < size; i++, table += 2) 159 + b43_radio_write(dev, R2059_ALL | table[0], table[1]); 160 + } 148 161 149 162 const struct b43_phy_ht_channeltab_e_radio2059 150 163 *b43_phy_ht_get_channeltab_e_r2059(struct b43_wldev *dev, u16 freq)
+2
drivers/net/wireless/b43/radio_2059.h
··· 52 52 struct b43_phy_ht_channeltab_e_phy phy_regs; 53 53 }; 54 54 55 + void r2059_upload_inittabs(struct b43_wldev *dev); 56 + 55 57 const struct b43_phy_ht_channeltab_e_radio2059 56 58 *b43_phy_ht_get_channeltab_e_r2059(struct b43_wldev *dev, u16 freq); 57 59