This is a note to let you know that I've just added the patch titled rtlwifi: rtl8192cu: Add new firmware to the 3.12-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: rtlwifi-rtl8192cu-add-new-firmware.patch and it can be found in the queue-3.12 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 62009b7f12793c932aaba0df946b04cb4a77d022 Mon Sep 17 00:00:00 2001 From: Larry Finger <Larry.Finger@xxxxxxxxxxxx> Date: Mon, 18 Nov 2013 11:11:26 -0600 Subject: rtlwifi: rtl8192cu: Add new firmware From: Larry Finger <Larry.Finger@xxxxxxxxxxxx> commit 62009b7f12793c932aaba0df946b04cb4a77d022 upstream. Vendor driver rtl8188C_8192C_8192D_usb_linux_v3.4.2_3727.20120404 introduced new firmware for these chips. The code try for the new file, and fall back to the original firmware if the new file is not available. Signed-off-by: Larry Finger <Larry.Finger@xxxxxxxxxxxx> Signed-off-by: John W. Linville <linville@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/net/wireless/rtlwifi/core.c | 10 ++++++++++ drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | 16 +++++++++++++--- drivers/net/wireless/rtlwifi/wifi.h | 1 + 3 files changed, 24 insertions(+), 3 deletions(-) --- a/drivers/net/wireless/rtlwifi/core.c +++ b/drivers/net/wireless/rtlwifi/core.c @@ -46,10 +46,20 @@ void rtl_fw_cb(const struct firmware *fi "Firmware callback routine entered!\n"); complete(&rtlpriv->firmware_loading_complete); if (!firmware) { + if (rtlpriv->cfg->alt_fw_name) { + err = request_firmware(&firmware, + rtlpriv->cfg->alt_fw_name, + rtlpriv->io.dev); + pr_info("Loading alternative firmware %s\n", + rtlpriv->cfg->alt_fw_name); + if (!err) + goto found_alt; + } pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name); rtlpriv->max_fw_size = 0; return; } +found_alt: if (firmware->size > rtlpriv->max_fw_size) { RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Firmware is too big!\n"); --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c @@ -49,6 +49,9 @@ MODULE_AUTHOR("Larry Finger <Larry.Finge MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n USB wireless"); MODULE_FIRMWARE("rtlwifi/rtl8192cufw.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8192cufw_A.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8192cufw_B.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8192cufw_TMSC.bin"); static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) { @@ -68,14 +71,21 @@ static int rtl92cu_init_sw_vars(struct i "Can't alloc buffer for fw\n"); return 1; } - + if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) && + !IS_92C_SERIAL(rtlpriv->rtlhal.version)) { + rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_A.bin"; + } else if (IS_81xxC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) { + rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_B.bin"; + } else { + rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_TMSC.bin"; + } + /* provide name of alternative file */ + rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin"; pr_info("Loading firmware %s\n", rtlpriv->cfg->fw_name); rtlpriv->max_fw_size = 0x4000; err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, rtlpriv->io.dev, GFP_KERNEL, hw, rtl_fw_cb); - - return err; } --- a/drivers/net/wireless/rtlwifi/wifi.h +++ b/drivers/net/wireless/rtlwifi/wifi.h @@ -1806,6 +1806,7 @@ struct rtl_hal_cfg { bool write_readback; char *name; char *fw_name; + char *alt_fw_name; struct rtl_hal_ops *ops; struct rtl_mod_params *mod_params; struct rtl_hal_usbint_cfg *usb_interface_cfg; Patches currently in stable-queue which might be from Larry.Finger@xxxxxxxxxxxx are queue-3.12/b43-fix-lockdep-splat.patch queue-3.12/staging-r8712u-set-device-type-to-wlan.patch queue-3.12/rtlwifi-redo-register-save-locations.patch queue-3.12/rtlwifi-rtl8192cu-add-new-device-id.patch queue-3.12/rtlwifi-rtl8192c-add-new-definitions-in-the-dm_common-header.patch queue-3.12/b43-fix-the-wrong-assignment-of-status.freq-in-b43_rx.patch queue-3.12/b43-fix-unload-oops-if-firmware-is-not-available.patch queue-3.12/rtlwifi-rtl8192cu-add-new-firmware.patch queue-3.12/b43legacy-fix-unload-oops-if-firmware-is-not-available.patch queue-3.12/rtlwifi-rtl8192cu-fix-some-code-in-rf-handling.patch queue-3.12/rtlwifi-set-the-link-state.patch queue-3.12/rtlwifi-increase-the-rx-queue-length-for-usb-drivers.patch queue-3.12/rtlwifi-rtl8192c-add-routines-to-save-restore-power-index-registers.patch queue-3.12/rtlwifi-rtl8192c-prevent-reconnect-attempts-if-not-connected.patch queue-3.12/rtlwifi-rtl8188ee-fix-typo-in-code.patch queue-3.12/rtlwifi-rtl8192cu-update-the-power-index-registers.patch queue-3.12/rtlwifi-add-missing-code-to-pwdb-statics-routine.patch queue-3.12/rtlwifi-update-beacon-statistics-for-usb-driver.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html