Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f70e4df2 authored by Larry Finger's avatar Larry Finger Committed by Kalle Valo
Browse files

rtlwifi: Add code to read new versions of firmware



Changes in the drivers for RTL8723BE and RTL8821AE require corresponding
changes in the firmware. This new firmware has been accepted into the
Linux firmware repo. To handle the case where the kernel has been
updated before the firmware, the new versions have been given new names.
The code will attempt to read the new name, and fall back to the old one
if the new one is not available.

Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Cc: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent e6042859
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
	struct rtl_priv *rtlpriv = rtl_priv(hw);
	struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
	char *fw_name = "rtlwifi/rtl8723befw.bin";
	char *fw_name = "rtlwifi/rtl8723befw_36.bin";

	rtl8723be_bt_reg_init(hw);
	rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
@@ -183,6 +183,13 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)

	rtlpriv->max_fw_size = 0x8000;
	pr_info("Using firmware %s\n", fw_name);
	err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
				      rtlpriv->io.dev, GFP_KERNEL, hw,
				      rtl_fw_cb);
	if (err) {
		/* Failed to get firmware. Check if old version available */
		fw_name = "rtlwifi/rtl8723befw.bin";
		pr_info("Using firmware %s\n", fw_name);
		err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
					      rtlpriv->io.dev, GFP_KERNEL, hw,
					      rtl_fw_cb);
@@ -190,6 +197,7 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
			pr_err("Failed to request firmware!\n");
			return 1;
		}
	}
	return 0;
}

@@ -384,6 +392,7 @@ MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Realtek 8723BE 802.11n PCI wireless");
MODULE_FIRMWARE("rtlwifi/rtl8723befw.bin");
MODULE_FIRMWARE("rtlwifi/rtl8723befw_36.bin");

module_param_named(swenc, rtl8723be_mod_params.sw_crypto, bool, 0444);
module_param_named(debug_level, rtl8723be_mod_params.debug_level, int, 0644);
+12 −3
Original line number Diff line number Diff line
@@ -203,13 +203,20 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
		fw_name = "rtlwifi/rtl8812aefw.bin";
		wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin";
	} else {
		fw_name = "rtlwifi/rtl8821aefw.bin";
		fw_name = "rtlwifi/rtl8821aefw_29.bin";
		wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin";
	}

	rtlpriv->max_fw_size = 0x8000;
	/*load normal firmware*/
	pr_info("Using firmware %s\n", fw_name);
	err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
				      rtlpriv->io.dev, GFP_KERNEL, hw,
				      rtl_fw_cb);
	if (err) {
		/* Failed to get firmware. Check if old version available */
		fw_name = "rtlwifi/rtl8821aefw.bin";
		pr_info("Using firmware %s\n", fw_name);
		err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
					      rtlpriv->io.dev, GFP_KERNEL, hw,
					      rtl_fw_cb);
@@ -217,6 +224,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
			pr_err("Failed to request normal firmware!\n");
			return 1;
		}
	}
	/*load wowlan firmware*/
	pr_info("Using firmware %s\n", wowlan_fw_name);
	err = request_firmware_nowait(THIS_MODULE, 1,
@@ -428,6 +436,7 @@ MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Realtek 8821ae 802.11ac PCI wireless");
MODULE_FIRMWARE("rtlwifi/rtl8821aefw.bin");
MODULE_FIRMWARE("rtlwifi/rtl8821aefw_29.bin");

module_param_named(swenc, rtl8821ae_mod_params.sw_crypto, bool, 0444);
module_param_named(debug_level, rtl8821ae_mod_params.debug_level, int, 0644);