aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rtl8192e/rtl8192e
diff options
context:
space:
mode:
authorMateusz Kulikowski <mateusz.kulikowski@gmail.com>2015-10-19 22:00:25 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-10-24 19:23:13 -0700
commit51dac5f09577e8300602e378d115075cf656a32c (patch)
treef93dacb7540878b1983aebaf37a87dc87cb43326 /drivers/staging/rtl8192e/rtl8192e
parentstaging: rtl8192e: init_fw: Drop unneded check (diff)
downloadlinux-dev-51dac5f09577e8300602e378d115075cf656a32c.tar.xz
linux-dev-51dac5f09577e8300602e378d115075cf656a32c.zip
staging: rtl8192e: Add _rtl92e_wait_for_fw()
Add function waiting for firmware load/boot; Remove _rtl92e_is_fw_ready() that is obsolete (can be replaced with _rtl92e_wait_for_fw(). Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/rtl8192e/rtl8192e')
-rw-r--r--drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c73
1 files changed, 18 insertions, 55 deletions
diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
index 42eabce56236..2ac74843c130 100644
--- a/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
+++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
@@ -19,6 +19,18 @@
#include "r8192E_firmware.h"
#include <linux/firmware.h>
+static bool _rtl92e_wait_for_fw(struct net_device *dev, u32 mask, u32 timeout)
+{
+ unsigned long deadline = jiffies + msecs_to_jiffies(timeout);
+
+ while (time_before(jiffies, deadline)) {
+ if (rtl92e_readl(dev, CPU_GEN) & mask)
+ return true;
+ mdelay(2);
+ }
+ return false;
+}
+
static bool _rtl92e_fw_download_code(struct net_device *dev,
u8 *code_virtual_address, u32 buffer_len)
{
@@ -85,78 +97,30 @@ static bool _rtl92e_fw_download_code(struct net_device *dev,
static bool _rtl92e_fw_boot_cpu(struct net_device *dev)
{
- bool rt_status = true;
u32 CPU_status = 0;
- unsigned long timeout;
-
- timeout = jiffies + msecs_to_jiffies(200);
- while (time_before(jiffies, timeout)) {
- CPU_status = rtl92e_readl(dev, CPU_GEN);
- if (CPU_status & CPU_GEN_PUT_CODE_OK)
- break;
- mdelay(2);
- }
- if (!(CPU_status&CPU_GEN_PUT_CODE_OK)) {
+ if (!_rtl92e_wait_for_fw(dev, CPU_GEN_PUT_CODE_OK, 200)) {
netdev_err(dev, "Firmware download failed.\n");
goto CPUCheckMainCodeOKAndTurnOnCPU_Fail;
- } else {
- RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n");
}
+ RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n");
CPU_status = rtl92e_readl(dev, CPU_GEN);
rtl92e_writeb(dev, CPU_GEN,
(u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff));
mdelay(1);
- timeout = jiffies + msecs_to_jiffies(200);
- while (time_before(jiffies, timeout)) {
- CPU_status = rtl92e_readl(dev, CPU_GEN);
- if (CPU_status&CPU_GEN_BOOT_RDY)
- break;
- mdelay(2);
- }
-
- if (!(CPU_status&CPU_GEN_BOOT_RDY)) {
+ if (!_rtl92e_wait_for_fw(dev, CPU_GEN_BOOT_RDY, 200)) {
netdev_err(dev, "Firmware boot failed.\n");
goto CPUCheckMainCodeOKAndTurnOnCPU_Fail;
}
RT_TRACE(COMP_FIRMWARE, "Download Firmware: Boot ready!\n");
- return rt_status;
+ return true;
CPUCheckMainCodeOKAndTurnOnCPU_Fail:
- rt_status = false;
- return rt_status;
-}
-
-static bool _rtl92e_is_fw_ready(struct net_device *dev)
-{
-
- bool rt_status = true;
- u32 CPU_status = 0;
- unsigned long timeout;
-
- timeout = jiffies + msecs_to_jiffies(20);
- while (time_before(jiffies, timeout)) {
- CPU_status = rtl92e_readl(dev, CPU_GEN);
- if (CPU_status&CPU_GEN_FIRM_RDY)
- break;
- mdelay(2);
- }
-
- if (!(CPU_status&CPU_GEN_FIRM_RDY))
- goto CPUCheckFirmwareReady_Fail;
- else
- RT_TRACE(COMP_FIRMWARE, "Download Firmware: Firmware ready!\n");
-
- return rt_status;
-
-CPUCheckFirmwareReady_Fail:
- rt_status = false;
- return rt_status;
-
+ return false;
}
static bool _rtl92e_fw_check_ready(struct net_device *dev,
@@ -186,14 +150,13 @@ static bool _rtl92e_fw_check_ready(struct net_device *dev,
pfirmware->status = FW_STATUS_4_MOVE_DATA_CODE;
mdelay(1);
- rt_status = _rtl92e_is_fw_ready(dev);
+ rt_status = _rtl92e_wait_for_fw(dev, CPU_GEN_FIRM_RDY, 20);
if (rt_status)
pfirmware->status = FW_STATUS_5_READY;
else
RT_TRACE(COMP_FIRMWARE,
"_rtl92e_is_fw_ready fail(%d)!\n",
rt_status);
-
break;
default:
rt_status = false;