diff options
author | Grazvydas Ignotas <notasas@gmail.com> | 2010-03-11 17:44:57 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-03-15 15:32:03 -0400 |
commit | 3f9e750d130b4a4d9f8226642b46ed17d8357f40 (patch) | |
tree | 761497200ae8a5c2ca0ac3b7ce9b9e44dde23533 /drivers/net/wireless/wl12xx/wl1251_ps.c | |
parent | 3c9cb9c38a1368b1e3f187f23c1a56883ec656c2 (diff) | |
download | kernel_samsung_smdk4412-3f9e750d130b4a4d9f8226642b46ed17d8357f40.zip kernel_samsung_smdk4412-3f9e750d130b4a4d9f8226642b46ed17d8357f40.tar.gz kernel_samsung_smdk4412-3f9e750d130b4a4d9f8226642b46ed17d8357f40.tar.bz2 |
wl1251: fix ELP_CTRL register accesses when using SDIO
For some unknown reason ELP_CTRL can't be accesed using
sdio_memcpy_* functions (any attemts to do so result in timeouts):
wl1251: ERROR sdio write failed (-110)
wl1251: ERROR sdio read failed (-110)
wl1251: WARNING WLAN not ready
To fix this, add special IO functions for ELP_CTRL access that are
using sdio_readb/sdio_writeb. Similar handling is done in TI
reference driver from Android code drop.
Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Cc: Bob Copeland <me@bobcopeland.com>
Acked-by: Kalle Valo <kalle.valo@iki.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx/wl1251_ps.c')
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1251_ps.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1251_ps.c b/drivers/net/wireless/wl12xx/wl1251_ps.c index 851dfb6..b55cb2b 100644 --- a/drivers/net/wireless/wl12xx/wl1251_ps.c +++ b/drivers/net/wireless/wl12xx/wl1251_ps.c @@ -45,7 +45,7 @@ void wl1251_elp_work(struct work_struct *work) goto out; wl1251_debug(DEBUG_PSM, "chip to elp"); - wl1251_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, ELPCTRL_SLEEP); + wl1251_write_elp(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, ELPCTRL_SLEEP); wl->elp = true; out: @@ -79,9 +79,9 @@ int wl1251_ps_elp_wakeup(struct wl1251 *wl) start = jiffies; timeout = jiffies + msecs_to_jiffies(WL1251_WAKEUP_TIMEOUT); - wl1251_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, ELPCTRL_WAKE_UP); + wl1251_write_elp(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, ELPCTRL_WAKE_UP); - elp_reg = wl1251_read32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR); + elp_reg = wl1251_read_elp(wl, HW_ACCESS_ELP_CTRL_REG_ADDR); /* * FIXME: we should wait for irq from chip but, as a temporary @@ -93,7 +93,7 @@ int wl1251_ps_elp_wakeup(struct wl1251 *wl) return -ETIMEDOUT; } msleep(1); - elp_reg = wl1251_read32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR); + elp_reg = wl1251_read_elp(wl, HW_ACCESS_ELP_CTRL_REG_ADDR); } wl1251_debug(DEBUG_PSM, "wakeup time: %u ms", |