diff options
| author | Ivo van Doorn <ivdoorn@gmail.com> | 2010-08-30 15:13:08 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2010-08-31 14:22:23 -0400 |
| commit | 5ffddc498c700bb45ea55efc37746cb28d601766 (patch) | |
| tree | d3e49481b043ac1822142509147245bac45eb244 | |
| parent | 2035c0cf8f637e88cdd338c15570a7ad42afc552 (diff) | |
rt2x00: Add rt2800_wait_csr_ready
Similar to rt2800_wait_wpdma_ready() we can add a
function to waiting until the CSR is ready. This
centralizes some additional code into rt2800lib.
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 28 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800usb.c | 12 |
3 files changed, 20 insertions, 21 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index 25c44cfd7452..7c68bf35951f 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
| @@ -255,6 +255,23 @@ void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev, | |||
| 255 | } | 255 | } |
| 256 | EXPORT_SYMBOL_GPL(rt2800_mcu_request); | 256 | EXPORT_SYMBOL_GPL(rt2800_mcu_request); |
| 257 | 257 | ||
| 258 | int rt2800_wait_csr_ready(struct rt2x00_dev *rt2x00dev) | ||
| 259 | { | ||
| 260 | unsigned int i = 0; | ||
| 261 | u32 reg; | ||
| 262 | |||
| 263 | for (i = 0; i < REGISTER_BUSY_COUNT; i++) { | ||
| 264 | rt2800_register_read(rt2x00dev, MAC_CSR0, ®); | ||
| 265 | if (reg && reg != ~0) | ||
| 266 | return 0; | ||
| 267 | msleep(1); | ||
| 268 | } | ||
| 269 | |||
| 270 | ERROR(rt2x00dev, "Unstable hardware.\n"); | ||
| 271 | return -EBUSY; | ||
| 272 | } | ||
| 273 | EXPORT_SYMBOL_GPL(rt2800_wait_csr_ready); | ||
| 274 | |||
| 258 | int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev) | 275 | int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev) |
| 259 | { | 276 | { |
| 260 | unsigned int i; | 277 | unsigned int i; |
| @@ -370,17 +387,8 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev, | |||
| 370 | /* | 387 | /* |
| 371 | * Wait for stable hardware. | 388 | * Wait for stable hardware. |
| 372 | */ | 389 | */ |
| 373 | for (i = 0; i < REGISTER_BUSY_COUNT; i++) { | 390 | if (rt2800_wait_csr_ready(rt2x00dev)) |
| 374 | rt2800_register_read(rt2x00dev, MAC_CSR0, ®); | ||
| 375 | if (reg && reg != ~0) | ||
| 376 | break; | ||
| 377 | msleep(1); | ||
| 378 | } | ||
| 379 | |||
| 380 | if (i == REGISTER_BUSY_COUNT) { | ||
| 381 | ERROR(rt2x00dev, "Unstable hardware.\n"); | ||
| 382 | return -EBUSY; | 391 | return -EBUSY; |
| 383 | } | ||
| 384 | 392 | ||
| 385 | if (rt2x00_is_pci(rt2x00dev)) | 393 | if (rt2x00_is_pci(rt2x00dev)) |
| 386 | rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002); | 394 | rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002); |
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h index deb10b14157b..986229c06c19 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.h +++ b/drivers/net/wireless/rt2x00/rt2800lib.h | |||
| @@ -140,6 +140,7 @@ void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev, | |||
| 140 | const u8 command, const u8 token, | 140 | const u8 command, const u8 token, |
| 141 | const u8 arg0, const u8 arg1); | 141 | const u8 arg0, const u8 arg1); |
| 142 | 142 | ||
| 143 | int rt2800_wait_csr_ready(struct rt2x00_dev *rt2x00dev); | ||
| 143 | int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev); | 144 | int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev); |
| 144 | 145 | ||
| 145 | int rt2800_check_firmware(struct rt2x00_dev *rt2x00dev, | 146 | int rt2800_check_firmware(struct rt2x00_dev *rt2x00dev, |
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c index 82ae58e0c5d7..b1a8e943750b 100644 --- a/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | |||
| @@ -122,22 +122,12 @@ static void rt2800usb_toggle_rx(struct rt2x00_dev *rt2x00dev, | |||
| 122 | static int rt2800usb_init_registers(struct rt2x00_dev *rt2x00dev) | 122 | static int rt2800usb_init_registers(struct rt2x00_dev *rt2x00dev) |
| 123 | { | 123 | { |
| 124 | u32 reg; | 124 | u32 reg; |
| 125 | int i; | ||
| 126 | 125 | ||
| 127 | /* | 126 | /* |
| 128 | * Wait until BBP and RF are ready. | 127 | * Wait until BBP and RF are ready. |
| 129 | */ | 128 | */ |
| 130 | for (i = 0; i < REGISTER_BUSY_COUNT; i++) { | 129 | if (rt2800_wait_csr_ready(rt2x00dev)) |
| 131 | rt2800_register_read(rt2x00dev, MAC_CSR0, ®); | ||
| 132 | if (reg && reg != ~0) | ||
| 133 | break; | ||
| 134 | msleep(1); | ||
| 135 | } | ||
| 136 | |||
| 137 | if (i == REGISTER_BUSY_COUNT) { | ||
| 138 | ERROR(rt2x00dev, "Unstable hardware.\n"); | ||
| 139 | return -EBUSY; | 130 | return -EBUSY; |
| 140 | } | ||
| 141 | 131 | ||
| 142 | rt2800_register_read(rt2x00dev, PBF_SYS_CTRL, ®); | 132 | rt2800_register_read(rt2x00dev, PBF_SYS_CTRL, ®); |
| 143 | rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000); | 133 | rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg & ~0x00002000); |
