summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/microchip/wilc1000/sdio.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2021-08-23 11:59:49 +0100
committerDavid S. Miller <davem@davemloft.net>2021-08-23 11:59:49 +0100
commite6a70a02defd9200ed4b9fbf3714fa9622a93fa3 (patch)
tree69460d3e609c6dac983c9f94b389198a26b16db5 /drivers/net/wireless/microchip/wilc1000/sdio.c
parent056b29ae071bffc4ed6108a943f7d2929ab61ea1 (diff)
parent0dc62413c882d765db7a3ff4d507e8c0a804ba68 (diff)
downloadlinux-e6a70a02defd9200ed4b9fbf3714fa9622a93fa3.tar.gz
linux-e6a70a02defd9200ed4b9fbf3714fa9622a93fa3.tar.bz2
linux-e6a70a02defd9200ed4b9fbf3714fa9622a93fa3.zip
Merge tag 'wireless-drivers-next-2021-08-22' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for v5.15 First set of patches for v5.15. This got delayed as I have been mostly offline for the last few weeks. The biggest change is removal of prism54 driver, otherwise just smaller changes. Major changes: ath5k, ath9k, ath10k, ath11k: * switch from 'pci_' to 'dma_' API brcmfmac * allow per-board firmware binaries * add support 43752 SDIO device prism54 * remove the obsoleted driver, everyone should be using p54 driver instead ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless/microchip/wilc1000/sdio.c')
-rw-r--r--drivers/net/wireless/microchip/wilc1000/sdio.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/net/wireless/microchip/wilc1000/sdio.c b/drivers/net/wireless/microchip/wilc1000/sdio.c
index e14b9fc2c67a..42e03a701ae1 100644
--- a/drivers/net/wireless/microchip/wilc1000/sdio.c
+++ b/drivers/net/wireless/microchip/wilc1000/sdio.c
@@ -129,10 +129,8 @@ static int wilc_sdio_probe(struct sdio_func *func,
ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO,
&wilc_hif_sdio);
- if (ret) {
- kfree(sdio_priv);
- return ret;
- }
+ if (ret)
+ goto free;
if (IS_ENABLED(CONFIG_WILC1000_HW_OOB_INTR)) {
struct device_node *np = func->card->dev.of_node;
@@ -148,24 +146,29 @@ static int wilc_sdio_probe(struct sdio_func *func,
wilc->bus_data = sdio_priv;
wilc->dev = &func->dev;
- wilc->rtc_clk = devm_clk_get(&func->card->dev, "rtc");
- if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER) {
- kfree(sdio_priv);
- return -EPROBE_DEFER;
- } else if (!IS_ERR(wilc->rtc_clk))
- clk_prepare_enable(wilc->rtc_clk);
+ wilc->rtc_clk = devm_clk_get_optional(&func->card->dev, "rtc");
+ if (IS_ERR(wilc->rtc_clk)) {
+ ret = PTR_ERR(wilc->rtc_clk);
+ goto dispose_irq;
+ }
+ clk_prepare_enable(wilc->rtc_clk);
dev_info(&func->dev, "Driver Initializing success\n");
return 0;
+
+dispose_irq:
+ irq_dispose_mapping(wilc->dev_irq_num);
+ wilc_netdev_cleanup(wilc);
+free:
+ kfree(sdio_priv);
+ return ret;
}
static void wilc_sdio_remove(struct sdio_func *func)
{
struct wilc *wilc = sdio_get_drvdata(func);
- if (!IS_ERR(wilc->rtc_clk))
- clk_disable_unprepare(wilc->rtc_clk);
-
+ clk_disable_unprepare(wilc->rtc_clk);
wilc_netdev_cleanup(wilc);
}