diff --git a/drivers/net/wireless/ath/ath10k/ahb.c b/drivers/net/wireless/ath/ath10k/ahb.c
index ab8f77ae5e66..ad282a06b376 100644
--- a/drivers/net/wireless/ath/ath10k/ahb.c
+++ b/drivers/net/wireless/ath/ath10k/ahb.c
@@ -745,9 +745,11 @@ static int ath10k_ahb_probe(struct platform_device *pdev)
size = sizeof(*ar_pci) + sizeof(*ar_ahb);
ar = ath10k_core_create(size, &pdev->dev, ATH10K_BUS_AHB,
hw_rev, &ath10k_ahb_hif_ops);
- if (!ar) {
- dev_err(&pdev->dev, "failed to allocate core\n");
- return -ENOMEM;
+ if (IS_ERR(ar)) {
+ ret = PTR_ERR(ar);
+ if (ret != -EPROBE_DEFER)
+ dev_err(&pdev->dev, "failed to allocate core: %d\n", ret);
+ return ret;
}
ath10k_dbg(ar, ATH10K_DBG_BOOT, "ahb probe\n");diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 72a366aa9f60..85d2e8143101 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -3291,8 +3291,6 @@ static int ath10k_core_probe_fw(struct ath10k *ar)
ath10k_debug_print_board_info(ar);
}
- device_get_mac_address(ar->dev, ar->mac_addr);
-
ret = ath10k_core_init_firmware_features(ar);
if (ret) {
ath10k_err(ar, "fatal problem with firmware features: %d\n",@@ -3451,11 +3449,11 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
const struct ath10k_hif_ops *hif_ops)
{
struct ath10k *ar;
- int ret;
+ int ret = -ENOMEM;
ar = ath10k_mac_create(priv_size);
if (!ar)
- return NULL;
+ goto err_out;
ar->ath_common.priv = ar;
ar->ath_common.hw = ar->hw;@@ -3464,6 +3462,10 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
ar->hif.ops = hif_ops;
ar->hif.bus = bus;
+ ret = device_get_mac_address(dev, ar->mac_addr);
+ if (ret == -EPROBE_DEFER)
+ goto err_free_mac;
+
switch (hw_rev) {
case ATH10K_HW_QCA988X:
case ATH10K_HW_QCA9887:@@ -3580,8 +3582,8 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
destroy_workqueue(ar->workqueue);
err_free_mac:
ath10k_mac_destroy(ar);
-
- return NULL;
+err_out:
+ return ERR_PTR(ret);
}
EXPORT_SYMBOL(ath10k_core_create);
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 4d4e2f91e15c..f4736148a382 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -3602,9 +3602,11 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
ar = ath10k_core_create(sizeof(*ar_pci), &pdev->dev, ATH10K_BUS_PCI,
hw_rev, &ath10k_pci_hif_ops);
- if (!ar) {
- dev_err(&pdev->dev, "failed to allocate core\n");
- return -ENOMEM;
+ if (IS_ERR(ar)) {
+ ret = PTR_ERR(ar);
+ if (ret != -EPROBE_DEFER)
+ dev_err(&pdev->dev, "failed to allocate core: %d\n", ret);
+ return ret;
}
ath10k_dbg(ar, ATH10K_DBG_BOOT, "pci probe %04x:%04x %04x:%04x\n",diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
index 63e1c2d783c5..87941e047d07 100644
--- a/drivers/net/wireless/ath/ath10k/sdio.c
+++ b/drivers/net/wireless/ath/ath10k/sdio.c
@@ -2526,9 +2526,11 @@ static int ath10k_sdio_probe(struct sdio_func *func,
ar = ath10k_core_create(sizeof(*ar_sdio), &func->dev, ATH10K_BUS_SDIO,
hw_rev, &ath10k_sdio_hif_ops);
- if (!ar) {
- dev_err(&func->dev, "failed to allocate core\n");
- return -ENOMEM;
+ if (IS_ERR(ar)) {
+ ret = PTR_ERR(ar);
+ if (ret != -EPROBE_DEFER)
+ dev_err(&func->dev, "failed to allocate core: %d\n", ret);
+ return ret;
}
netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_sdio_napi_poll,diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/ath/ath10k/snoc.c
index 9513ab696fff..b9ac89e226a2 100644
--- a/drivers/net/wireless/ath/ath10k/snoc.c
+++ b/drivers/net/wireless/ath/ath10k/snoc.c
@@ -1728,9 +1728,11 @@ static int ath10k_snoc_probe(struct platform_device *pdev)
ar = ath10k_core_create(sizeof(*ar_snoc), dev, ATH10K_BUS_SNOC,
drv_data->hw_rev, &ath10k_snoc_hif_ops);
- if (!ar) {
- dev_err(dev, "failed to allocate core\n");
- return -ENOMEM;
+ if (IS_ERR(ar)) {
+ ret = PTR_ERR(ar);
+ if (ret != -EPROBE_DEFER)
+ dev_err(dev, "failed to allocate core: %d\n", ret);
+ return ret;
}
ar_snoc = ath10k_snoc_priv(ar);diff --git a/drivers/net/wireless/ath/ath10k/usb.c b/drivers/net/wireless/ath/ath10k/usb.c
index 3d98f19c6ec8..d6dc830a6fa8 100644
--- a/drivers/net/wireless/ath/ath10k/usb.c
+++ b/drivers/net/wireless/ath/ath10k/usb.c
@@ -987,9 +987,11 @@ static int ath10k_usb_probe(struct usb_interface *interface,
ar = ath10k_core_create(sizeof(*ar_usb), &dev->dev, ATH10K_BUS_USB,
hw_rev, &ath10k_usb_hif_ops);
- if (!ar) {
- dev_err(&dev->dev, "failed to allocate core\n");
- return -ENOMEM;
+ if (IS_ERR(ar)) {
+ ret = PTR_ERR(ar);
+ if (ret != -EPROBE_DEFER)
+ dev_err(&dev->dev, "failed to allocate core: %d\n", ret);
+ return ret;
}
usb_get_dev(dev);--
2.33.1