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 /drivers/net/wireless/rt2x00/rt2800lib.c | |
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>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800lib.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index 25c44cfd745..7c68bf35951 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); |