Commit 51633632 authored by Juha Leppanen's avatar Juha Leppanen Committed by John W. Linville

wl1271: fix timeout in wl1271_top_reg_read

I noticed a timeout bug in

/drivers/net/wireless/wl12xx/wl1271_spi.c

In the current code you cannot tell why you exited
the "poll for data ready" do-while loop if exiting
was done after the last possible loop.

Then timeout==0 regardless of (val & OCP_READY_MASK) or
!(val & OCP_READY_MASK), leading to possible false timeout...

Simple correction could be decreasing timeout after checking
for !(val & OCP_READY_MASK), not before

(Manually converted from email to an actual patch by me. -- JWL)
Reported-by: default avatar"Juha Leppanen" <juha_motorsportcom@luukku.com>
Signed-off-by: default avatar"Juha Leppanen" <juha_motorsportcom@luukku.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 891dc5e7
...@@ -397,8 +397,7 @@ u16 wl1271_top_reg_read(struct wl1271 *wl, int addr) ...@@ -397,8 +397,7 @@ u16 wl1271_top_reg_read(struct wl1271 *wl, int addr)
/* poll for data ready */ /* poll for data ready */
do { do {
val = wl1271_spi_read32(wl, OCP_DATA_READ); val = wl1271_spi_read32(wl, OCP_DATA_READ);
timeout--; } while (!(val & OCP_READY_MASK) && --timeout);
} while (!(val & OCP_READY_MASK) && timeout);
if (!timeout) { if (!timeout) {
wl1271_warning("Top register access timed out."); wl1271_warning("Top register access timed out.");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment