Skip to content

Commit

Permalink
wifi: wilc1000: Register wiphy after reading out chipid
Browse files Browse the repository at this point in the history
Register wiphy after reading out chipid, so the chipid can be
used to determine chip features and not advertise WPA3/SAE
support to userspace on WILC3000. Note that wilc_netdev_cleanup()
will deregister the wiphy in fail path.

Tested-by: Alexis Lothoré <[email protected]>
Tested-on: WILC1000SD 07 SDIO WILC_WIFI_FW_REL_16_1_2
Tested-on: WILC3000 A SDIO WILC_WIFI_FW_REL_16_1_1
Signed-off-by: Marek Vasut <[email protected]>
Signed-off-by: Kalle Valo <[email protected]>
Link: https://patch.msgid.link/[email protected]
  • Loading branch information
Marek Vasut authored and Kalle Valo committed Oct 17, 2024
1 parent 577c04f commit fbdf0c5
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/net/wireless/microchip/wilc1000/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1761,7 +1761,6 @@ static struct wilc *wilc_create_wiphy(struct device *dev)
{
struct wiphy *wiphy;
struct wilc *wl;
int ret;

wiphy = wiphy_new(&wilc_cfg80211_ops, sizeof(*wl));
if (!wiphy)
Expand Down Expand Up @@ -1804,14 +1803,8 @@ static struct wilc *wilc_create_wiphy(struct device *dev)
BIT(NL80211_IFTYPE_P2P_GO) |
BIT(NL80211_IFTYPE_P2P_CLIENT);
wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
wiphy->features |= NL80211_FEATURE_SAE;
set_wiphy_dev(wiphy, dev);
wl->wiphy = wiphy;
ret = wiphy_register(wiphy);
if (ret) {
wiphy_free(wiphy);
return NULL;
}
return wl;
}

Expand Down Expand Up @@ -1855,12 +1848,19 @@ int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,

free_wl:
wlan_deinit_locks(wl);
wiphy_unregister(wl->wiphy);
wiphy_free(wl->wiphy);
return ret;
}
EXPORT_SYMBOL_GPL(wilc_cfg80211_init);

int wilc_cfg80211_register(struct wilc *wilc)
{
wilc->wiphy->features |= NL80211_FEATURE_SAE;

return wiphy_register(wilc->wiphy);
}
EXPORT_SYMBOL_GPL(wilc_cfg80211_register);

int wilc_init_host_int(struct net_device *net)
{
int ret;
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/microchip/wilc1000/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type,
const struct wilc_hif_func *ops);
int wilc_cfg80211_register(struct wilc *wilc);
void wilc_deinit_host_int(struct net_device *net);
int wilc_init_host_int(struct net_device *net);
void wilc_wfi_monitor_rx(struct net_device *mon_dev, u8 *buff, u32 size);
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/wireless/microchip/wilc1000/sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,10 @@ static int wilc_sdio_probe(struct sdio_func *func,
if (ret)
goto dispose_irq;

ret = wilc_cfg80211_register(wilc);
if (ret)
goto dispose_irq;

ret = wilc_load_mac_from_nv(wilc);
if (ret) {
pr_err("Can not retrieve MAC address from chip\n");
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/wireless/microchip/wilc1000/spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,10 @@ static int wilc_bus_probe(struct spi_device *spi)
if (ret)
goto power_down;

ret = wilc_cfg80211_register(wilc);
if (ret)
goto power_down;

ret = wilc_load_mac_from_nv(wilc);
if (ret) {
pr_err("Can not retrieve MAC address from chip\n");
Expand Down

0 comments on commit fbdf0c5

Please sign in to comment.