staging: rtl8723bs: Move wiphy setup to after reading the regulatory settings from the chip
Commit81f153faac
("staging: rtl8723bs: fix wireless regulatory API misuse") moved the wiphy_apply_custom_regulatory() call to earlier in the driver's init-sequence, so that it gets called before wiphy_register(). But at this point in time the eFuses which code the regulatory-settings for the chip have not been read by the driver yet, causing _rtw_reg_apply_flags() to set the IEEE80211_CHAN_DISABLED flag on *all* channels. On the device where I initially tested the fix, a Jumper EZpad 7 tablet, this does not cause any problems because shortly after init the rtw_reg_notifier() gets called fixing things up. I guess this happens into response to receiving a (broadcast) packet with regulatory info from the access-point ? But on another device with a RTL8723BS wifi chip, an Acer Switch 10E (SW3-016), the rtw_reg_notifier() never gets called. I assume that some fuse has been set on this device to ignore regulatory info received from access-points. This means that on the Acer the driver is stuck in a state with all channels disabled, leading to non working Wifi. We cannot move the wiphy_apply_custom_regulatory() call back, because that call must be made before the wiphy_register() call. Instead move the entire rtw_wdev_alloc() call to after the Efuses have been read, fixing all channels being disabled in the initial channel-map. Fixes:81f153faac
("staging: rtl8723bs: fix wireless regulatory API misuse") Cc: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://lore.kernel.org/r/20210201152956.370186-2-hdegoede@redhat.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Родитель
18fe0fae61
Коммит
50af06d43e
|
@ -339,8 +339,6 @@ static struct adapter *rtw_sdio_if1_init(struct dvobj_priv *dvobj, const struct
|
|||
|
||||
padapter = rtw_netdev_priv(pnetdev);
|
||||
|
||||
rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj));
|
||||
|
||||
/* 3 3. init driver special setting, interface, OS and hardware relative */
|
||||
|
||||
/* 4 3.1 set hardware operation functions */
|
||||
|
@ -378,6 +376,8 @@ static struct adapter *rtw_sdio_if1_init(struct dvobj_priv *dvobj, const struct
|
|||
goto free_hal_data;
|
||||
}
|
||||
|
||||
rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj));
|
||||
|
||||
/* 3 8. get WLan MAC address */
|
||||
/* set mac addr */
|
||||
rtw_macaddr_cfg(&psdio->func->dev, padapter->eeprompriv.mac_addr);
|
||||
|
|
Загрузка…
Ссылка в новой задаче