Commit 9e55d0f9 authored by David S. Miller's avatar David S. Miller

Merge tag 'wireless-drivers-for-davem-2016-10-14' of...

Merge tag 'wireless-drivers-for-davem-2016-10-14' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers

Kalle Valo says:

====================
wireless-drivers fixes for 4.9

wlcore

* fix a double free regression causing hard to track crashes

rtl8xxxu

* fix driver reload issues, a memory leak and an endian bug

rtlwifi

* fix a major regression introduced in 4.9 with firmware loading on
  certain hardware

ath10k

* fix regression about broken cal_data debugfs file (since 4.7)

ath9k

* revert temperature compensation for AR9003+ devices, it was causing
  too much problems

ath6kl

* add Dell OEM SDIO I/O for the Venue 8 Pro
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 610df1d2 1ea26439
...@@ -450,6 +450,7 @@ struct ath10k_debug { ...@@ -450,6 +450,7 @@ struct ath10k_debug {
u32 pktlog_filter; u32 pktlog_filter;
u32 reg_addr; u32 reg_addr;
u32 nf_cal_period; u32 nf_cal_period;
void *cal_data;
struct ath10k_fw_crash_data *fw_crash_data; struct ath10k_fw_crash_data *fw_crash_data;
}; };
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
/* ms */ /* ms */
#define ATH10K_DEBUG_HTT_STATS_INTERVAL 1000 #define ATH10K_DEBUG_HTT_STATS_INTERVAL 1000
#define ATH10K_DEBUG_CAL_DATA_LEN 12064
#define ATH10K_FW_CRASH_DUMP_VERSION 1 #define ATH10K_FW_CRASH_DUMP_VERSION 1
/** /**
...@@ -1451,56 +1453,51 @@ static const struct file_operations fops_fw_dbglog = { ...@@ -1451,56 +1453,51 @@ static const struct file_operations fops_fw_dbglog = {
.llseek = default_llseek, .llseek = default_llseek,
}; };
static int ath10k_debug_cal_data_open(struct inode *inode, struct file *file) static int ath10k_debug_cal_data_fetch(struct ath10k *ar)
{ {
struct ath10k *ar = inode->i_private;
void *buf;
u32 hi_addr; u32 hi_addr;
__le32 addr; __le32 addr;
int ret; int ret;
mutex_lock(&ar->conf_mutex); lockdep_assert_held(&ar->conf_mutex);
if (ar->state != ATH10K_STATE_ON &&
ar->state != ATH10K_STATE_UTF) {
ret = -ENETDOWN;
goto err;
}
buf = vmalloc(ar->hw_params.cal_data_len); if (WARN_ON(ar->hw_params.cal_data_len > ATH10K_DEBUG_CAL_DATA_LEN))
if (!buf) { return -EINVAL;
ret = -ENOMEM;
goto err;
}
hi_addr = host_interest_item_address(HI_ITEM(hi_board_data)); hi_addr = host_interest_item_address(HI_ITEM(hi_board_data));
ret = ath10k_hif_diag_read(ar, hi_addr, &addr, sizeof(addr)); ret = ath10k_hif_diag_read(ar, hi_addr, &addr, sizeof(addr));
if (ret) { if (ret) {
ath10k_warn(ar, "failed to read hi_board_data address: %d\n", ret); ath10k_warn(ar, "failed to read hi_board_data address: %d\n",
goto err_vfree; ret);
return ret;
} }
ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), buf, ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), ar->debug.cal_data,
ar->hw_params.cal_data_len); ar->hw_params.cal_data_len);
if (ret) { if (ret) {
ath10k_warn(ar, "failed to read calibration data: %d\n", ret); ath10k_warn(ar, "failed to read calibration data: %d\n", ret);
goto err_vfree; return ret;
} }
file->private_data = buf; return 0;
}
mutex_unlock(&ar->conf_mutex); static int ath10k_debug_cal_data_open(struct inode *inode, struct file *file)
{
struct ath10k *ar = inode->i_private;
return 0; mutex_lock(&ar->conf_mutex);
err_vfree: if (ar->state == ATH10K_STATE_ON ||
vfree(buf); ar->state == ATH10K_STATE_UTF) {
ath10k_debug_cal_data_fetch(ar);
}
err: file->private_data = ar;
mutex_unlock(&ar->conf_mutex); mutex_unlock(&ar->conf_mutex);
return ret; return 0;
} }
static ssize_t ath10k_debug_cal_data_read(struct file *file, static ssize_t ath10k_debug_cal_data_read(struct file *file,
...@@ -1508,18 +1505,16 @@ static ssize_t ath10k_debug_cal_data_read(struct file *file, ...@@ -1508,18 +1505,16 @@ static ssize_t ath10k_debug_cal_data_read(struct file *file,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
struct ath10k *ar = file->private_data; struct ath10k *ar = file->private_data;
void *buf = file->private_data;
return simple_read_from_buffer(user_buf, count, ppos, mutex_lock(&ar->conf_mutex);
buf, ar->hw_params.cal_data_len);
}
static int ath10k_debug_cal_data_release(struct inode *inode, count = simple_read_from_buffer(user_buf, count, ppos,
struct file *file) ar->debug.cal_data,
{ ar->hw_params.cal_data_len);
vfree(file->private_data);
return 0; mutex_unlock(&ar->conf_mutex);
return count;
} }
static ssize_t ath10k_write_ani_enable(struct file *file, static ssize_t ath10k_write_ani_enable(struct file *file,
...@@ -1580,7 +1575,6 @@ static const struct file_operations fops_ani_enable = { ...@@ -1580,7 +1575,6 @@ static const struct file_operations fops_ani_enable = {
static const struct file_operations fops_cal_data = { static const struct file_operations fops_cal_data = {
.open = ath10k_debug_cal_data_open, .open = ath10k_debug_cal_data_open,
.read = ath10k_debug_cal_data_read, .read = ath10k_debug_cal_data_read,
.release = ath10k_debug_cal_data_release,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.llseek = default_llseek, .llseek = default_llseek,
}; };
...@@ -1932,6 +1926,8 @@ void ath10k_debug_stop(struct ath10k *ar) ...@@ -1932,6 +1926,8 @@ void ath10k_debug_stop(struct ath10k *ar)
{ {
lockdep_assert_held(&ar->conf_mutex); lockdep_assert_held(&ar->conf_mutex);
ath10k_debug_cal_data_fetch(ar);
/* Must not use _sync to avoid deadlock, we do that in /* Must not use _sync to avoid deadlock, we do that in
* ath10k_debug_destroy(). The check for htt_stats_mask is to avoid * ath10k_debug_destroy(). The check for htt_stats_mask is to avoid
* warning from del_timer(). */ * warning from del_timer(). */
...@@ -2344,6 +2340,10 @@ int ath10k_debug_create(struct ath10k *ar) ...@@ -2344,6 +2340,10 @@ int ath10k_debug_create(struct ath10k *ar)
if (!ar->debug.fw_crash_data) if (!ar->debug.fw_crash_data)
return -ENOMEM; return -ENOMEM;
ar->debug.cal_data = vzalloc(ATH10K_DEBUG_CAL_DATA_LEN);
if (!ar->debug.cal_data)
return -ENOMEM;
INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs); INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs);
INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs); INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs);
INIT_LIST_HEAD(&ar->debug.fw_stats.peers); INIT_LIST_HEAD(&ar->debug.fw_stats.peers);
...@@ -2357,6 +2357,9 @@ void ath10k_debug_destroy(struct ath10k *ar) ...@@ -2357,6 +2357,9 @@ void ath10k_debug_destroy(struct ath10k *ar)
vfree(ar->debug.fw_crash_data); vfree(ar->debug.fw_crash_data);
ar->debug.fw_crash_data = NULL; ar->debug.fw_crash_data = NULL;
vfree(ar->debug.cal_data);
ar->debug.cal_data = NULL;
ath10k_debug_fw_stats_reset(ar); ath10k_debug_fw_stats_reset(ar);
kfree(ar->debug.tpc_stats); kfree(ar->debug.tpc_stats);
......
...@@ -1401,6 +1401,7 @@ static const struct sdio_device_id ath6kl_sdio_devices[] = { ...@@ -1401,6 +1401,7 @@ static const struct sdio_device_id ath6kl_sdio_devices[] = {
{SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x0))}, {SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x0))},
{SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x1))}, {SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x1))},
{SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x2))}, {SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x2))},
{SDIO_DEVICE(MANUFACTURER_CODE, (MANUFACTURER_ID_AR6004_BASE | 0x18))},
{}, {},
}; };
......
...@@ -33,7 +33,6 @@ struct coeff { ...@@ -33,7 +33,6 @@ struct coeff {
enum ar9003_cal_types { enum ar9003_cal_types {
IQ_MISMATCH_CAL = BIT(0), IQ_MISMATCH_CAL = BIT(0),
TEMP_COMP_CAL = BIT(1),
}; };
static void ar9003_hw_setup_calibration(struct ath_hw *ah, static void ar9003_hw_setup_calibration(struct ath_hw *ah,
...@@ -59,12 +58,6 @@ static void ar9003_hw_setup_calibration(struct ath_hw *ah, ...@@ -59,12 +58,6 @@ static void ar9003_hw_setup_calibration(struct ath_hw *ah,
/* Kick-off cal */ /* Kick-off cal */
REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL); REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL);
break; break;
case TEMP_COMP_CAL:
ath_dbg(common, CALIBRATE,
"starting Temperature Compensation Calibration\n");
REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_LOCAL);
REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_START);
break;
default: default:
ath_err(common, "Invalid calibration type\n"); ath_err(common, "Invalid calibration type\n");
break; break;
...@@ -93,7 +86,6 @@ static bool ar9003_hw_per_calibration(struct ath_hw *ah, ...@@ -93,7 +86,6 @@ static bool ar9003_hw_per_calibration(struct ath_hw *ah,
/* /*
* Accumulate cal measures for active chains * Accumulate cal measures for active chains
*/ */
if (cur_caldata->calCollect)
cur_caldata->calCollect(ah); cur_caldata->calCollect(ah);
ah->cal_samples++; ah->cal_samples++;
...@@ -107,7 +99,6 @@ static bool ar9003_hw_per_calibration(struct ath_hw *ah, ...@@ -107,7 +99,6 @@ static bool ar9003_hw_per_calibration(struct ath_hw *ah,
/* /*
* Process accumulated data * Process accumulated data
*/ */
if (cur_caldata->calPostProc)
cur_caldata->calPostProc(ah, numChains); cur_caldata->calPostProc(ah, numChains);
/* Calibration has finished. */ /* Calibration has finished. */
...@@ -323,16 +314,9 @@ static const struct ath9k_percal_data iq_cal_single_sample = { ...@@ -323,16 +314,9 @@ static const struct ath9k_percal_data iq_cal_single_sample = {
ar9003_hw_iqcalibrate ar9003_hw_iqcalibrate
}; };
static const struct ath9k_percal_data temp_cal_single_sample = {
TEMP_COMP_CAL,
MIN_CAL_SAMPLES,
PER_MAX_LOG_COUNT,
};
static void ar9003_hw_init_cal_settings(struct ath_hw *ah) static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
{ {
ah->iq_caldata.calData = &iq_cal_single_sample; ah->iq_caldata.calData = &iq_cal_single_sample;
ah->temp_caldata.calData = &temp_cal_single_sample;
if (AR_SREV_9300_20_OR_LATER(ah)) { if (AR_SREV_9300_20_OR_LATER(ah)) {
ah->enabled_cals |= TX_IQ_CAL; ah->enabled_cals |= TX_IQ_CAL;
...@@ -340,7 +324,7 @@ static void ar9003_hw_init_cal_settings(struct ath_hw *ah) ...@@ -340,7 +324,7 @@ static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
ah->enabled_cals |= TX_IQ_ON_AGC_CAL; ah->enabled_cals |= TX_IQ_ON_AGC_CAL;
} }
ah->supp_cals = IQ_MISMATCH_CAL | TEMP_COMP_CAL; ah->supp_cals = IQ_MISMATCH_CAL;
} }
#define OFF_UPPER_LT 24 #define OFF_UPPER_LT 24
...@@ -1399,9 +1383,6 @@ static void ar9003_hw_init_cal_common(struct ath_hw *ah) ...@@ -1399,9 +1383,6 @@ static void ar9003_hw_init_cal_common(struct ath_hw *ah)
INIT_CAL(&ah->iq_caldata); INIT_CAL(&ah->iq_caldata);
INSERT_CAL(ah, &ah->iq_caldata); INSERT_CAL(ah, &ah->iq_caldata);
INIT_CAL(&ah->temp_caldata);
INSERT_CAL(ah, &ah->temp_caldata);
/* Initialize current pointer to first element in list */ /* Initialize current pointer to first element in list */
ah->cal_list_curr = ah->cal_list; ah->cal_list_curr = ah->cal_list;
......
...@@ -830,7 +830,6 @@ struct ath_hw { ...@@ -830,7 +830,6 @@ struct ath_hw {
/* Calibration */ /* Calibration */
u32 supp_cals; u32 supp_cals;
struct ath9k_cal_list iq_caldata; struct ath9k_cal_list iq_caldata;
struct ath9k_cal_list temp_caldata;
struct ath9k_cal_list adcgain_caldata; struct ath9k_cal_list adcgain_caldata;
struct ath9k_cal_list adcdc_caldata; struct ath9k_cal_list adcdc_caldata;
struct ath9k_cal_list *cal_list; struct ath9k_cal_list *cal_list;
......
...@@ -238,7 +238,7 @@ struct rtl8xxxu_rxdesc16 { ...@@ -238,7 +238,7 @@ struct rtl8xxxu_rxdesc16 {
u32 pattern1match:1; u32 pattern1match:1;
u32 pattern0match:1; u32 pattern0match:1;
#endif #endif
__le32 tsfl; u32 tsfl;
#if 0 #if 0
u32 bassn:12; u32 bassn:12;
u32 bavld:1; u32 bavld:1;
...@@ -368,7 +368,7 @@ struct rtl8xxxu_rxdesc24 { ...@@ -368,7 +368,7 @@ struct rtl8xxxu_rxdesc24 {
u32 ldcp:1; u32 ldcp:1;
u32 splcp:1; u32 splcp:1;
#endif #endif
__le32 tsfl; u32 tsfl;
}; };
struct rtl8xxxu_txdesc32 { struct rtl8xxxu_txdesc32 {
......
...@@ -1461,7 +1461,9 @@ static int rtl8192eu_active_to_emu(struct rtl8xxxu_priv *priv) ...@@ -1461,7 +1461,9 @@ static int rtl8192eu_active_to_emu(struct rtl8xxxu_priv *priv)
int count, ret = 0; int count, ret = 0;
/* Turn off RF */ /* Turn off RF */
rtl8xxxu_write8(priv, REG_RF_CTRL, 0); val8 = rtl8xxxu_read8(priv, REG_RF_CTRL);
val8 &= ~RF_ENABLE;
rtl8xxxu_write8(priv, REG_RF_CTRL, val8);
/* Switch DPDT_SEL_P output from register 0x65[2] */ /* Switch DPDT_SEL_P output from register 0x65[2] */
val8 = rtl8xxxu_read8(priv, REG_LEDCFG2); val8 = rtl8xxxu_read8(priv, REG_LEDCFG2);
...@@ -1593,6 +1595,10 @@ static void rtl8192e_enable_rf(struct rtl8xxxu_priv *priv) ...@@ -1593,6 +1595,10 @@ static void rtl8192e_enable_rf(struct rtl8xxxu_priv *priv)
u32 val32; u32 val32;
u8 val8; u8 val8;
val32 = rtl8xxxu_read32(priv, REG_RX_WAIT_CCA);
val32 |= (BIT(22) | BIT(23));
rtl8xxxu_write32(priv, REG_RX_WAIT_CCA, val32);
val8 = rtl8xxxu_read8(priv, REG_GPIO_MUXCFG); val8 = rtl8xxxu_read8(priv, REG_GPIO_MUXCFG);
val8 |= BIT(5); val8 |= BIT(5);
rtl8xxxu_write8(priv, REG_GPIO_MUXCFG, val8); rtl8xxxu_write8(priv, REG_GPIO_MUXCFG, val8);
......
...@@ -1498,6 +1498,10 @@ static void rtl8723b_enable_rf(struct rtl8xxxu_priv *priv) ...@@ -1498,6 +1498,10 @@ static void rtl8723b_enable_rf(struct rtl8xxxu_priv *priv)
u32 val32; u32 val32;
u8 val8; u8 val8;
val32 = rtl8xxxu_read32(priv, REG_RX_WAIT_CCA);
val32 |= (BIT(22) | BIT(23));
rtl8xxxu_write32(priv, REG_RX_WAIT_CCA, val32);
/* /*
* No indication anywhere as to what 0x0790 does. The 2 antenna * No indication anywhere as to what 0x0790 does. The 2 antenna
* vendor code preserves bits 6-7 here. * vendor code preserves bits 6-7 here.
......
...@@ -5197,7 +5197,12 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb) ...@@ -5197,7 +5197,12 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb)
pkt_offset = roundup(pkt_len + drvinfo_sz + desc_shift + pkt_offset = roundup(pkt_len + drvinfo_sz + desc_shift +
sizeof(struct rtl8xxxu_rxdesc16), 128); sizeof(struct rtl8xxxu_rxdesc16), 128);
if (pkt_cnt > 1) /*
* Only clone the skb if there's enough data at the end to
* at least cover the rx descriptor
*/
if (pkt_cnt > 1 &&
urb_len > (pkt_offset + sizeof(struct rtl8xxxu_rxdesc16)))
next_skb = skb_clone(skb, GFP_ATOMIC); next_skb = skb_clone(skb, GFP_ATOMIC);
rx_status = IEEE80211_SKB_RXCB(skb); rx_status = IEEE80211_SKB_RXCB(skb);
...@@ -5215,7 +5220,7 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb) ...@@ -5215,7 +5220,7 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb)
rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats, rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats,
rx_desc->rxmcs); rx_desc->rxmcs);
rx_status->mactime = le32_to_cpu(rx_desc->tsfl); rx_status->mactime = rx_desc->tsfl;
rx_status->flag |= RX_FLAG_MACTIME_START; rx_status->flag |= RX_FLAG_MACTIME_START;
if (!rx_desc->swdec) if (!rx_desc->swdec)
...@@ -5285,7 +5290,7 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb) ...@@ -5285,7 +5290,7 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb)
rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats, rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats,
rx_desc->rxmcs); rx_desc->rxmcs);
rx_status->mactime = le32_to_cpu(rx_desc->tsfl); rx_status->mactime = rx_desc->tsfl;
rx_status->flag |= RX_FLAG_MACTIME_START; rx_status->flag |= RX_FLAG_MACTIME_START;
if (!rx_desc->swdec) if (!rx_desc->swdec)
......
...@@ -111,7 +111,7 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context, ...@@ -111,7 +111,7 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context,
if (!err) if (!err)
goto found_alt; goto found_alt;
} }
pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name); pr_err("Selected firmware is not available\n");
rtlpriv->max_fw_size = 0; rtlpriv->max_fw_size = 0;
return; return;
} }
......
...@@ -86,6 +86,7 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw) ...@@ -86,6 +86,7 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
u8 tid; u8 tid;
char *fw_name;
rtl8188ee_bt_reg_init(hw); rtl8188ee_bt_reg_init(hw);
rtlpriv->dm.dm_initialgain_enable = 1; rtlpriv->dm.dm_initialgain_enable = 1;
...@@ -169,10 +170,10 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw) ...@@ -169,10 +170,10 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
return 1; return 1;
} }
rtlpriv->cfg->fw_name = "rtlwifi/rtl8188efw.bin"; fw_name = "rtlwifi/rtl8188efw.bin";
rtlpriv->max_fw_size = 0x8000; rtlpriv->max_fw_size = 0x8000;
pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Using firmware %s\n", fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -284,7 +285,6 @@ static const struct rtl_hal_cfg rtl88ee_hal_cfg = { ...@@ -284,7 +285,6 @@ static const struct rtl_hal_cfg rtl88ee_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl88e_pci", .name = "rtl88e_pci",
.fw_name = "rtlwifi/rtl8188efw.bin",
.ops = &rtl8188ee_hal_ops, .ops = &rtl8188ee_hal_ops,
.mod_params = &rtl88ee_mod_params, .mod_params = &rtl88ee_mod_params,
......
...@@ -96,6 +96,7 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) ...@@ -96,6 +96,7 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
char *fw_name = "rtlwifi/rtl8192cfwU.bin";
rtl8192ce_bt_reg_init(hw); rtl8192ce_bt_reg_init(hw);
...@@ -167,15 +168,12 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) ...@@ -167,15 +168,12 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
} }
/* request fw */ /* request fw */
if (IS_VENDOR_UMC_A_CUT(rtlhal->version) && if (IS_81XXC_VENDOR_UMC_B_CUT(rtlhal->version))
!IS_92C_SERIAL(rtlhal->version)) fw_name = "rtlwifi/rtl8192cfwU_B.bin";
rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cfwU.bin";
else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlhal->version))
rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cfwU_B.bin";
rtlpriv->max_fw_size = 0x4000; rtlpriv->max_fw_size = 0x4000;
pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Using firmware %s\n", fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -262,7 +260,6 @@ static const struct rtl_hal_cfg rtl92ce_hal_cfg = { ...@@ -262,7 +260,6 @@ static const struct rtl_hal_cfg rtl92ce_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl92c_pci", .name = "rtl92c_pci",
.fw_name = "rtlwifi/rtl8192cfw.bin",
.ops = &rtl8192ce_hal_ops, .ops = &rtl8192ce_hal_ops,
.mod_params = &rtl92ce_mod_params, .mod_params = &rtl92ce_mod_params,
......
...@@ -59,6 +59,7 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) ...@@ -59,6 +59,7 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
{ {
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
int err; int err;
char *fw_name;
rtlpriv->dm.dm_initialgain_enable = true; rtlpriv->dm.dm_initialgain_enable = true;
rtlpriv->dm.dm_flag = 0; rtlpriv->dm.dm_flag = 0;
...@@ -77,18 +78,18 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) ...@@ -77,18 +78,18 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
} }
if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) && if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) &&
!IS_92C_SERIAL(rtlpriv->rtlhal.version)) { !IS_92C_SERIAL(rtlpriv->rtlhal.version)) {
rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_A.bin"; fw_name = "rtlwifi/rtl8192cufw_A.bin";
} else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) { } else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) {
rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_B.bin"; fw_name = "rtlwifi/rtl8192cufw_B.bin";
} else { } else {
rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_TMSC.bin"; fw_name = "rtlwifi/rtl8192cufw_TMSC.bin";
} }
/* provide name of alternative file */ /* provide name of alternative file */
rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin"; rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin";
pr_info("Loading firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Loading firmware %s\n", fw_name);
rtlpriv->max_fw_size = 0x4000; rtlpriv->max_fw_size = 0x4000;
err = request_firmware_nowait(THIS_MODULE, 1, err = request_firmware_nowait(THIS_MODULE, 1,
rtlpriv->cfg->fw_name, rtlpriv->io.dev, fw_name, rtlpriv->io.dev,
GFP_KERNEL, hw, rtl_fw_cb); GFP_KERNEL, hw, rtl_fw_cb);
return err; return err;
} }
...@@ -187,7 +188,6 @@ static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { ...@@ -187,7 +188,6 @@ static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = {
static struct rtl_hal_cfg rtl92cu_hal_cfg = { static struct rtl_hal_cfg rtl92cu_hal_cfg = {
.name = "rtl92c_usb", .name = "rtl92c_usb",
.fw_name = "rtlwifi/rtl8192cufw.bin",
.ops = &rtl8192cu_hal_ops, .ops = &rtl8192cu_hal_ops,
.mod_params = &rtl92cu_mod_params, .mod_params = &rtl92cu_mod_params,
.usb_interface_cfg = &rtl92cu_interface_cfg, .usb_interface_cfg = &rtl92cu_interface_cfg,
......
...@@ -92,6 +92,7 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw) ...@@ -92,6 +92,7 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
u8 tid; u8 tid;
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
char *fw_name = "rtlwifi/rtl8192defw.bin";
rtlpriv->dm.dm_initialgain_enable = true; rtlpriv->dm.dm_initialgain_enable = true;
rtlpriv->dm.dm_flag = 0; rtlpriv->dm.dm_flag = 0;
...@@ -181,10 +182,10 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw) ...@@ -181,10 +182,10 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
rtlpriv->max_fw_size = 0x8000; rtlpriv->max_fw_size = 0x8000;
pr_info("Driver for Realtek RTL8192DE WLAN interface\n"); pr_info("Driver for Realtek RTL8192DE WLAN interface\n");
pr_info("Loading firmware file %s\n", rtlpriv->cfg->fw_name); pr_info("Loading firmware file %s\n", fw_name);
/* request fw */ /* request fw */
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92de_hal_cfg = { ...@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92de_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl8192de", .name = "rtl8192de",
.fw_name = "rtlwifi/rtl8192defw.bin",
.ops = &rtl8192de_hal_ops, .ops = &rtl8192de_hal_ops,
.mod_params = &rtl92de_mod_params, .mod_params = &rtl92de_mod_params,
......
...@@ -91,6 +91,7 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw) ...@@ -91,6 +91,7 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
int err = 0; int err = 0;
char *fw_name;
rtl92ee_bt_reg_init(hw); rtl92ee_bt_reg_init(hw);
rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support;
...@@ -170,11 +171,11 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw) ...@@ -170,11 +171,11 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
} }
/* request fw */ /* request fw */
rtlpriv->cfg->fw_name = "rtlwifi/rtl8192eefw.bin"; fw_name = "rtlwifi/rtl8192eefw.bin";
rtlpriv->max_fw_size = 0x8000; rtlpriv->max_fw_size = 0x8000;
pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Using firmware %s\n", fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92ee_hal_cfg = { ...@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92ee_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl92ee_pci", .name = "rtl92ee_pci",
.fw_name = "rtlwifi/rtl8192eefw.bin",
.ops = &rtl8192ee_hal_ops, .ops = &rtl8192ee_hal_ops,
.mod_params = &rtl92ee_mod_params, .mod_params = &rtl92ee_mod_params,
......
...@@ -89,12 +89,13 @@ static void rtl92se_fw_cb(const struct firmware *firmware, void *context) ...@@ -89,12 +89,13 @@ static void rtl92se_fw_cb(const struct firmware *firmware, void *context)
struct ieee80211_hw *hw = context; struct ieee80211_hw *hw = context;
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rt_firmware *pfirmware = NULL; struct rt_firmware *pfirmware = NULL;
char *fw_name = "rtlwifi/rtl8192sefw.bin";
RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD, RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
"Firmware callback routine entered!\n"); "Firmware callback routine entered!\n");
complete(&rtlpriv->firmware_loading_complete); complete(&rtlpriv->firmware_loading_complete);
if (!firmware) { if (!firmware) {
pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name); pr_err("Firmware %s not available\n", fw_name);
rtlpriv->max_fw_size = 0; rtlpriv->max_fw_size = 0;
return; return;
} }
...@@ -117,6 +118,7 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw) ...@@ -117,6 +118,7 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
int err = 0; int err = 0;
u16 earlyrxthreshold = 7; u16 earlyrxthreshold = 7;
char *fw_name = "rtlwifi/rtl8192sefw.bin";
rtlpriv->dm.dm_initialgain_enable = true; rtlpriv->dm.dm_initialgain_enable = true;
rtlpriv->dm.dm_flag = 0; rtlpriv->dm.dm_flag = 0;
...@@ -214,9 +216,9 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw) ...@@ -214,9 +216,9 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
rtlpriv->max_fw_size = RTL8190_MAX_FIRMWARE_CODE_SIZE*2 + rtlpriv->max_fw_size = RTL8190_MAX_FIRMWARE_CODE_SIZE*2 +
sizeof(struct fw_hdr); sizeof(struct fw_hdr);
pr_info("Driver for Realtek RTL8192SE/RTL8191SE\n" pr_info("Driver for Realtek RTL8192SE/RTL8191SE\n"
"Loading firmware %s\n", rtlpriv->cfg->fw_name); "Loading firmware %s\n", fw_name);
/* request fw */ /* request fw */
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl92se_fw_cb); rtl92se_fw_cb);
if (err) { if (err) {
...@@ -310,7 +312,6 @@ static const struct rtl_hal_cfg rtl92se_hal_cfg = { ...@@ -310,7 +312,6 @@ static const struct rtl_hal_cfg rtl92se_hal_cfg = {
.bar_id = 1, .bar_id = 1,
.write_readback = false, .write_readback = false,
.name = "rtl92s_pci", .name = "rtl92s_pci",
.fw_name = "rtlwifi/rtl8192sefw.bin",
.ops = &rtl8192se_hal_ops, .ops = &rtl8192se_hal_ops,
.mod_params = &rtl92se_mod_params, .mod_params = &rtl92se_mod_params,
......
...@@ -94,6 +94,7 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw) ...@@ -94,6 +94,7 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
int err = 0; int err = 0;
char *fw_name = "rtlwifi/rtl8723fw.bin";
rtl8723e_bt_reg_init(hw); rtl8723e_bt_reg_init(hw);
...@@ -176,14 +177,12 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw) ...@@ -176,14 +177,12 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
return 1; return 1;
} }
if (IS_VENDOR_8723_A_CUT(rtlhal->version)) if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version))
rtlpriv->cfg->fw_name = "rtlwifi/rtl8723fw.bin"; fw_name = "rtlwifi/rtl8723fw_B.bin";
else if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version))
rtlpriv->cfg->fw_name = "rtlwifi/rtl8723fw_B.bin";
rtlpriv->max_fw_size = 0x6000; rtlpriv->max_fw_size = 0x6000;
pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Using firmware %s\n", fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -280,7 +279,6 @@ static const struct rtl_hal_cfg rtl8723e_hal_cfg = { ...@@ -280,7 +279,6 @@ static const struct rtl_hal_cfg rtl8723e_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl8723e_pci", .name = "rtl8723e_pci",
.fw_name = "rtlwifi/rtl8723efw.bin",
.ops = &rtl8723e_hal_ops, .ops = &rtl8723e_hal_ops,
.mod_params = &rtl8723e_mod_params, .mod_params = &rtl8723e_mod_params,
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
......
...@@ -91,6 +91,7 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw) ...@@ -91,6 +91,7 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
char *fw_name = "rtlwifi/rtl8723befw.bin";
rtl8723be_bt_reg_init(hw); rtl8723be_bt_reg_init(hw);
rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer(); rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
...@@ -184,8 +185,8 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw) ...@@ -184,8 +185,8 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
} }
rtlpriv->max_fw_size = 0x8000; rtlpriv->max_fw_size = 0x8000;
pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Using firmware %s\n", fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -280,7 +281,6 @@ static const struct rtl_hal_cfg rtl8723be_hal_cfg = { ...@@ -280,7 +281,6 @@ static const struct rtl_hal_cfg rtl8723be_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl8723be_pci", .name = "rtl8723be_pci",
.fw_name = "rtlwifi/rtl8723befw.bin",
.ops = &rtl8723be_hal_ops, .ops = &rtl8723be_hal_ops,
.mod_params = &rtl8723be_mod_params, .mod_params = &rtl8723be_mod_params,
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
......
...@@ -93,6 +93,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw) ...@@ -93,6 +93,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
char *fw_name, *wowlan_fw_name;
rtl8821ae_bt_reg_init(hw); rtl8821ae_bt_reg_init(hw);
rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer(); rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
...@@ -203,17 +204,17 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw) ...@@ -203,17 +204,17 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
} }
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) { if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
rtlpriv->cfg->fw_name = "rtlwifi/rtl8812aefw.bin"; fw_name = "rtlwifi/rtl8812aefw.bin";
rtlpriv->cfg->wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin"; wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin";
} else { } else {
rtlpriv->cfg->fw_name = "rtlwifi/rtl8821aefw.bin"; fw_name = "rtlwifi/rtl8821aefw.bin";
rtlpriv->cfg->wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin"; wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin";
} }
rtlpriv->max_fw_size = 0x8000; rtlpriv->max_fw_size = 0x8000;
/*load normal firmware*/ /*load normal firmware*/
pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); pr_info("Using firmware %s\n", fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_fw_cb); rtl_fw_cb);
if (err) { if (err) {
...@@ -222,9 +223,9 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw) ...@@ -222,9 +223,9 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
return 1; return 1;
} }
/*load wowlan firmware*/ /*load wowlan firmware*/
pr_info("Using firmware %s\n", rtlpriv->cfg->wowlan_fw_name); pr_info("Using firmware %s\n", wowlan_fw_name);
err = request_firmware_nowait(THIS_MODULE, 1, err = request_firmware_nowait(THIS_MODULE, 1,
rtlpriv->cfg->wowlan_fw_name, wowlan_fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw, rtlpriv->io.dev, GFP_KERNEL, hw,
rtl_wowlan_fw_cb); rtl_wowlan_fw_cb);
if (err) { if (err) {
...@@ -320,7 +321,6 @@ static const struct rtl_hal_cfg rtl8821ae_hal_cfg = { ...@@ -320,7 +321,6 @@ static const struct rtl_hal_cfg rtl8821ae_hal_cfg = {
.bar_id = 2, .bar_id = 2,
.write_readback = true, .write_readback = true,
.name = "rtl8821ae_pci", .name = "rtl8821ae_pci",
.fw_name = "rtlwifi/rtl8821aefw.bin",
.ops = &rtl8821ae_hal_ops, .ops = &rtl8821ae_hal_ops,
.mod_params = &rtl8821ae_mod_params, .mod_params = &rtl8821ae_mod_params,
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
......
...@@ -2278,9 +2278,7 @@ struct rtl_hal_cfg { ...@@ -2278,9 +2278,7 @@ struct rtl_hal_cfg {
u8 bar_id; u8 bar_id;
bool write_readback; bool write_readback;
char *name; char *name;
char *fw_name;
char *alt_fw_name; char *alt_fw_name;
char *wowlan_fw_name;
struct rtl_hal_ops *ops; struct rtl_hal_ops *ops;
struct rtl_mod_params *mod_params; struct rtl_mod_params *mod_params;
struct rtl_hal_usbint_cfg *usb_interface_cfg; struct rtl_hal_usbint_cfg *usb_interface_cfg;
......
...@@ -391,7 +391,6 @@ static void wl1271_remove(struct sdio_func *func) ...@@ -391,7 +391,6 @@ static void wl1271_remove(struct sdio_func *func)
pm_runtime_get_noresume(&func->dev); pm_runtime_get_noresume(&func->dev);
platform_device_unregister(glue->core); platform_device_unregister(glue->core);
kfree(glue);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment