Skip to content

Commit 911c3c5

Browse files
committed
Merge tag 'staging-5.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging driver fixes from Greg KH: "Here are a few small staging driver fixes for 5.14-rc5 to resolve some reported problems. They include: - mt7621 driver fix - rtl8723bs driver fixes - rtl8712 driver fixes. Nothing major, just small problems resolved. All have been in linux-next for a while with no reported issues" * tag 'staging-5.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: staging: mt7621-pci: avoid to re-disable clock for those pcies not in use staging: rtl8712: error handling refactoring staging: rtl8712: get rid of flush_scheduled_work staging: rtl8723bs: select CONFIG_CRYPTO_LIB_ARC4 staging: rtl8723bs: Fix a resource leak in sd_int_dpc
2 parents 6463e54 + c7b6565 commit 911c3c5

File tree

9 files changed

+64
-39
lines changed

9 files changed

+64
-39
lines changed

drivers/staging/mt7621-pci/pci-mt7621.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,6 @@ static void mt7621_pcie_init_ports(struct mt7621_pcie *pcie)
422422
dev_err(dev, "pcie%d no card, disable it (RST & CLK)\n",
423423
slot);
424424
mt7621_control_assert(port);
425-
clk_disable_unprepare(port->clk);
426425
port->enabled = false;
427426

428427
if (slot == 0) {

drivers/staging/rtl8712/hal_init.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,31 @@
2929
#define FWBUFF_ALIGN_SZ 512
3030
#define MAX_DUMP_FWSZ (48 * 1024)
3131

32+
static void rtl871x_load_fw_fail(struct _adapter *adapter)
33+
{
34+
struct usb_device *udev = adapter->dvobjpriv.pusbdev;
35+
struct device *dev = &udev->dev;
36+
struct device *parent = dev->parent;
37+
38+
complete(&adapter->rtl8712_fw_ready);
39+
40+
dev_err(&udev->dev, "r8712u: Firmware request failed\n");
41+
42+
if (parent)
43+
device_lock(parent);
44+
45+
device_release_driver(dev);
46+
47+
if (parent)
48+
device_unlock(parent);
49+
}
50+
3251
static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
3352
{
3453
struct _adapter *adapter = context;
3554

3655
if (!firmware) {
37-
struct usb_device *udev = adapter->dvobjpriv.pusbdev;
38-
struct usb_interface *usb_intf = adapter->pusb_intf;
39-
40-
dev_err(&udev->dev, "r8712u: Firmware request failed\n");
41-
usb_put_dev(udev);
42-
usb_set_intfdata(usb_intf, NULL);
43-
r8712_free_drv_sw(adapter);
44-
adapter->dvobj_deinit(adapter);
45-
complete(&adapter->rtl8712_fw_ready);
46-
free_netdev(adapter->pnetdev);
56+
rtl871x_load_fw_fail(adapter);
4757
return;
4858
}
4959
adapter->fw = firmware;

drivers/staging/rtl8712/rtl8712_led.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1820,3 +1820,11 @@ void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction)
18201820
break;
18211821
}
18221822
}
1823+
1824+
void r8712_flush_led_works(struct _adapter *padapter)
1825+
{
1826+
struct led_priv *pledpriv = &padapter->ledpriv;
1827+
1828+
flush_work(&pledpriv->SwLed0.BlinkWorkItem);
1829+
flush_work(&pledpriv->SwLed1.BlinkWorkItem);
1830+
}

drivers/staging/rtl8712/rtl871x_led.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ struct led_priv {
112112
void r8712_InitSwLeds(struct _adapter *padapter);
113113
void r8712_DeInitSwLeds(struct _adapter *padapter);
114114
void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction);
115+
void r8712_flush_led_works(struct _adapter *padapter);
115116

116117
#endif
117118

drivers/staging/rtl8712/rtl871x_pwrctrl.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,3 +224,11 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter)
224224
}
225225
mutex_unlock(&pwrctrl->mutex_lock);
226226
}
227+
228+
void r8712_flush_rwctrl_works(struct _adapter *padapter)
229+
{
230+
struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
231+
232+
flush_work(&pwrctrl->SetPSModeWorkItem);
233+
flush_work(&pwrctrl->rpwm_workitem);
234+
}

drivers/staging/rtl8712/rtl871x_pwrctrl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,6 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter,
108108
void r8712_set_ps_mode(struct _adapter *padapter, uint ps_mode,
109109
uint smart_ps);
110110
void r8712_set_rpwm(struct _adapter *padapter, u8 val8);
111+
void r8712_flush_rwctrl_works(struct _adapter *padapter);
111112

112113
#endif /* __RTL871X_PWRCTRL_H_ */

drivers/staging/rtl8712/usb_intf.c

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -591,35 +591,30 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
591591
{
592592
struct net_device *pnetdev = usb_get_intfdata(pusb_intf);
593593
struct usb_device *udev = interface_to_usbdev(pusb_intf);
594+
struct _adapter *padapter = netdev_priv(pnetdev);
595+
596+
/* never exit with a firmware callback pending */
597+
wait_for_completion(&padapter->rtl8712_fw_ready);
598+
usb_set_intfdata(pusb_intf, NULL);
599+
release_firmware(padapter->fw);
600+
if (drvpriv.drv_registered)
601+
padapter->surprise_removed = true;
602+
if (pnetdev->reg_state != NETREG_UNINITIALIZED)
603+
unregister_netdev(pnetdev); /* will call netdev_close() */
604+
r8712_flush_rwctrl_works(padapter);
605+
r8712_flush_led_works(padapter);
606+
udelay(1);
607+
/* Stop driver mlme relation timer */
608+
r8712_stop_drv_timers(padapter);
609+
r871x_dev_unload(padapter);
610+
r8712_free_drv_sw(padapter);
611+
free_netdev(pnetdev);
612+
613+
/* decrease the reference count of the usb device structure
614+
* when disconnect
615+
*/
616+
usb_put_dev(udev);
594617

595-
if (pnetdev) {
596-
struct _adapter *padapter = netdev_priv(pnetdev);
597-
598-
/* never exit with a firmware callback pending */
599-
wait_for_completion(&padapter->rtl8712_fw_ready);
600-
pnetdev = usb_get_intfdata(pusb_intf);
601-
usb_set_intfdata(pusb_intf, NULL);
602-
if (!pnetdev)
603-
goto firmware_load_fail;
604-
release_firmware(padapter->fw);
605-
if (drvpriv.drv_registered)
606-
padapter->surprise_removed = true;
607-
if (pnetdev->reg_state != NETREG_UNINITIALIZED)
608-
unregister_netdev(pnetdev); /* will call netdev_close() */
609-
flush_scheduled_work();
610-
udelay(1);
611-
/* Stop driver mlme relation timer */
612-
r8712_stop_drv_timers(padapter);
613-
r871x_dev_unload(padapter);
614-
r8712_free_drv_sw(padapter);
615-
free_netdev(pnetdev);
616-
617-
/* decrease the reference count of the usb device structure
618-
* when disconnect
619-
*/
620-
usb_put_dev(udev);
621-
}
622-
firmware_load_fail:
623618
/* If we didn't unplug usb dongle and remove/insert module, driver
624619
* fails on sitesurvey for the first time when device is up.
625620
* Reset usb port for sitesurvey fail issue.

drivers/staging/rtl8723bs/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ config RTL8723BS
55
depends on m
66
select WIRELESS_EXT
77
select WEXT_PRIV
8+
select CRYPTO_LIB_ARC4
89
help
910
This option enables support for RTL8723BS SDIO drivers, such as
1011
the wifi found on the 1st gen Intel Compute Stick, the CHIP

drivers/staging/rtl8723bs/hal/sdio_ops.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,8 @@ void sd_int_dpc(struct adapter *adapter)
909909
} else {
910910
rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
911911
}
912+
} else {
913+
kfree(c2h_evt);
912914
}
913915
} else {
914916
/* Error handling for malloc fail */

0 commit comments

Comments
 (0)