aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-11-28 09:42:09 -0500
committerJohannes Berg <johannes.berg@intel.com>2012-11-29 10:04:27 -0500
commit59f547ac5ba71a01232b023cb80f1fe05739dbbf (patch)
tree6177ff33d53e50ee1628d038b265e5ff959ed8c2 /drivers
parentb4991f3f7bdc2402a3d7d841eb4376bda4f7a56b (diff)
iwlwifi: return real info in probe failure
Don't return a hard coded -EFAULT, but rather the error that occurred in the flow. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-drv.c6
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/drv.c11
2 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-drv.c b/drivers/net/wireless/iwlwifi/iwl-drv.c
index 198634b75ed0..d3549f493a17 100644
--- a/drivers/net/wireless/iwlwifi/iwl-drv.c
+++ b/drivers/net/wireless/iwlwifi/iwl-drv.c
@@ -1032,6 +1032,7 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans,
1032 1032
1033 if (!drv->dbgfs_drv) { 1033 if (!drv->dbgfs_drv) {
1034 IWL_ERR(drv, "failed to create debugfs directory\n"); 1034 IWL_ERR(drv, "failed to create debugfs directory\n");
1035 ret = -ENOMEM;
1035 goto err_free_drv; 1036 goto err_free_drv;
1036 } 1037 }
1037 1038
@@ -1040,12 +1041,12 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans,
1040 1041
1041 if (!drv->trans->dbgfs_dir) { 1042 if (!drv->trans->dbgfs_dir) {
1042 IWL_ERR(drv, "failed to create transport debugfs directory\n"); 1043 IWL_ERR(drv, "failed to create transport debugfs directory\n");
1044 ret = -ENOMEM;
1043 goto err_free_dbgfs; 1045 goto err_free_dbgfs;
1044 } 1046 }
1045#endif 1047#endif
1046 1048
1047 ret = iwl_request_firmware(drv, true); 1049 ret = iwl_request_firmware(drv, true);
1048
1049 if (ret) { 1050 if (ret) {
1050 IWL_ERR(trans, "Couldn't request the fw\n"); 1051 IWL_ERR(trans, "Couldn't request the fw\n");
1051 goto err_fw; 1052 goto err_fw;
@@ -1060,9 +1061,8 @@ err_free_dbgfs:
1060err_free_drv: 1061err_free_drv:
1061#endif 1062#endif
1062 kfree(drv); 1063 kfree(drv);
1063 drv = NULL;
1064 1064
1065 return drv; 1065 return ERR_PTR(ret);
1066} 1066}
1067 1067
1068void iwl_drv_stop(struct iwl_drv *drv) 1068void iwl_drv_stop(struct iwl_drv *drv)
diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c
index 956fe6c370bc..a93a170b6f2c 100644
--- a/drivers/net/wireless/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
@@ -267,6 +267,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
267 const struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data); 267 const struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data);
268 struct iwl_trans *iwl_trans; 268 struct iwl_trans *iwl_trans;
269 struct iwl_trans_pcie *trans_pcie; 269 struct iwl_trans_pcie *trans_pcie;
270 int ret;
270 271
271 iwl_trans = iwl_trans_pcie_alloc(pdev, ent, cfg); 272 iwl_trans = iwl_trans_pcie_alloc(pdev, ent, cfg);
272 if (iwl_trans == NULL) 273 if (iwl_trans == NULL)
@@ -276,11 +277,15 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
276 277
277 trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans); 278 trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans);
278 trans_pcie->drv = iwl_drv_start(iwl_trans, cfg); 279 trans_pcie->drv = iwl_drv_start(iwl_trans, cfg);
279 if (!trans_pcie->drv) 280
281 if (IS_ERR_OR_NULL(trans_pcie->drv)) {
282 ret = PTR_ERR(trans_pcie->drv);
280 goto out_free_trans; 283 goto out_free_trans;
284 }
281 285
282 /* register transport layer debugfs here */ 286 /* register transport layer debugfs here */
283 if (iwl_trans_dbgfs_register(iwl_trans, iwl_trans->dbgfs_dir)) 287 ret = iwl_trans_dbgfs_register(iwl_trans, iwl_trans->dbgfs_dir);
288 if (ret)
284 goto out_free_drv; 289 goto out_free_drv;
285 290
286 return 0; 291 return 0;
@@ -290,7 +295,7 @@ out_free_drv:
290out_free_trans: 295out_free_trans:
291 iwl_trans_pcie_free(iwl_trans); 296 iwl_trans_pcie_free(iwl_trans);
292 pci_set_drvdata(pdev, NULL); 297 pci_set_drvdata(pdev, NULL);
293 return -EFAULT; 298 return ret;
294} 299}
295 300
296static void __devexit iwl_pci_remove(struct pci_dev *pdev) 301static void __devexit iwl_pci_remove(struct pci_dev *pdev)