mirror of https://gitee.com/openkylin/linux.git
rtl8192cu: Fix missing firmware load
In commit 3ac5e26a1e
entitled
"rtlwifi: rtl8192c-common: Change common firmware routines for addition
of rtl8192se and rtl8192de", the firmware loading code was moved.
Unfortunately, some necessary code was dropped for rtl8192cu.
The dmesg output shows the following:
rtl8192c: Loading firmware file rtlwifi/rtl8192cufw.bin
rtl8192c_common:_rtl92c_fw_free_to_go():<0-0> Polling FW ready fail!! REG_MCUFWDL:0x00000006 .
rtl8192c_common:rtl92c_download_fw():<0-0> Firmware is not ready to run!
In addition, the interface will authenticate and associate, but cannot
transfer data.
This is reported as Kernel Bug #38012.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
fa7ccfb170
commit
9935d12651
|
@ -53,6 +53,8 @@ MODULE_FIRMWARE("rtlwifi/rtl8192cufw.bin");
|
||||||
static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
|
static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
|
||||||
{
|
{
|
||||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||||
|
const struct firmware *firmware;
|
||||||
|
int err;
|
||||||
|
|
||||||
rtlpriv->dm.dm_initialgain_enable = 1;
|
rtlpriv->dm.dm_initialgain_enable = 1;
|
||||||
rtlpriv->dm.dm_flag = 0;
|
rtlpriv->dm.dm_flag = 0;
|
||||||
|
@ -64,6 +66,24 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
|
||||||
("Can't alloc buffer for fw.\n"));
|
("Can't alloc buffer for fw.\n"));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* request fw */
|
||||||
|
err = request_firmware(&firmware, rtlpriv->cfg->fw_name,
|
||||||
|
rtlpriv->io.dev);
|
||||||
|
if (err) {
|
||||||
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
||||||
|
("Failed to request firmware!\n"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (firmware->size > 0x4000) {
|
||||||
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
||||||
|
("Firmware is too big!\n"));
|
||||||
|
release_firmware(firmware);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
memcpy(rtlpriv->rtlhal.pfirmware, firmware->data, firmware->size);
|
||||||
|
rtlpriv->rtlhal.fwsize = firmware->size;
|
||||||
|
release_firmware(firmware);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue