diff options
author | Michael Buesch <mb@bu3sch.de> | 2008-08-30 05:49:45 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-09-05 16:17:44 -0400 |
commit | 0888707f1aade9325f121a21314d57400fb779aa (patch) | |
tree | 3242349b7a9e8d2bef69db672770ec6b8924bfe3 /drivers/net/wireless/b43/phy_lp.c | |
parent | e63e436326919dcc36e2bb242bc570257de70521 (diff) |
b43: Add LP-PHY read/write phyops
This adds read/write phyops for the LP-PHY and LP-PHY radios.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/phy_lp.c')
-rw-r--r-- | drivers/net/wireless/b43/phy_lp.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c index be2a5191f480..e769ca0b29a2 100644 --- a/drivers/net/wireless/b43/phy_lp.c +++ b/drivers/net/wireless/b43/phy_lp.c | |||
@@ -66,19 +66,29 @@ static void b43_lpphy_op_exit(struct b43_wldev *dev) | |||
66 | 66 | ||
67 | static u16 b43_lpphy_op_read(struct b43_wldev *dev, u16 reg) | 67 | static u16 b43_lpphy_op_read(struct b43_wldev *dev, u16 reg) |
68 | { | 68 | { |
69 | //TODO | 69 | b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); |
70 | return 0; | 70 | return b43_read16(dev, B43_MMIO_PHY_DATA); |
71 | } | 71 | } |
72 | 72 | ||
73 | static void b43_lpphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) | 73 | static void b43_lpphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) |
74 | { | 74 | { |
75 | //TODO | 75 | b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); |
76 | b43_write16(dev, B43_MMIO_PHY_DATA, value); | ||
76 | } | 77 | } |
77 | 78 | ||
78 | static u16 b43_lpphy_op_radio_read(struct b43_wldev *dev, u16 reg) | 79 | static u16 b43_lpphy_op_radio_read(struct b43_wldev *dev, u16 reg) |
79 | { | 80 | { |
80 | //TODO | 81 | /* Register 1 is a 32-bit register. */ |
81 | return 0; | 82 | B43_WARN_ON(reg == 1); |
83 | /* LP-PHY needs a special bit set for read access */ | ||
84 | if (dev->phy.rev < 2) { | ||
85 | if (reg != 0x4001) | ||
86 | reg |= 0x100; | ||
87 | } else | ||
88 | reg |= 0x200; | ||
89 | |||
90 | b43_write16(dev, B43_MMIO_RADIO_CONTROL, reg); | ||
91 | return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); | ||
82 | } | 92 | } |
83 | 93 | ||
84 | static void b43_lpphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) | 94 | static void b43_lpphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) |
@@ -86,7 +96,8 @@ static void b43_lpphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) | |||
86 | /* Register 1 is a 32-bit register. */ | 96 | /* Register 1 is a 32-bit register. */ |
87 | B43_WARN_ON(reg == 1); | 97 | B43_WARN_ON(reg == 1); |
88 | 98 | ||
89 | //TODO | 99 | b43_write16(dev, B43_MMIO_RADIO_CONTROL, reg); |
100 | b43_write16(dev, B43_MMIO_RADIO_DATA_LOW, value); | ||
90 | } | 101 | } |
91 | 102 | ||
92 | static void b43_lpphy_op_software_rfkill(struct b43_wldev *dev, | 103 | static void b43_lpphy_op_software_rfkill(struct b43_wldev *dev, |