summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2011-03-29 17:56:21 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2011-04-04 22:58:14 -0700
commit711908df76bedee2df653be057465168ed626742 (patch)
tree28fceff766ee29e55abfbf7b03c62945adf1a9e7 /drivers
parent0e7fd280fb1eb8a870d223fdfe4821d318001af5 (diff)
ath6kl: propagate errors on module setup
This propagates initial platform registration failures and also HIF initialization failures. Cc: Naveen Singh <nsingh@atheros.com> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c32
-rw-r--r--drivers/staging/ath6kl/os/linux/ar6000_drv.c12
-rw-r--r--drivers/staging/ath6kl/os/linux/ar6000_pm.c26
-rw-r--r--drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h2
4 files changed, 37 insertions, 35 deletions
diff --git a/drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c b/drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c
index e6d9cd802dee..001f99375445 100644
--- a/drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c
+++ b/drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c
@@ -125,31 +125,27 @@ ATH_DEBUG_INSTANTIATE_MODULE_VAR(hif,
/* ------ Functions ------ */
int HIFInit(OSDRV_CALLBACKS *callbacks)
{
- int status;
- AR_DEBUG_ASSERT(callbacks != NULL);
+ int r;
+ AR_DEBUG_ASSERT(callbacks != NULL);
+
+ A_REGISTER_MODULE_DEBUG_INFO(hif);
- A_REGISTER_MODULE_DEBUG_INFO(hif);
+ /* store the callback handlers */
+ osdrvCallbacks = *callbacks;
- /* store the callback handlers */
- osdrvCallbacks = *callbacks;
+ /* Register with bus driver core */
+ registered = 1;
- /* Register with bus driver core */
- AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("AR6000: HIFInit registering\n"));
- registered = 1;
#if defined(CONFIG_PM)
- if (callbacks->deviceSuspendHandler && callbacks->deviceResumeHandler) {
- ar6k_driver.drv.pm = &ar6k_device_pm_ops;
- }
+ if (callbacks->deviceSuspendHandler && callbacks->deviceResumeHandler)
+ ar6k_driver.drv.pm = &ar6k_device_pm_ops;
#endif /* CONFIG_PM */
- status = sdio_register_driver(&ar6k_driver);
- AR_DEBUG_ASSERT(status==0);
- if (status != 0) {
- return A_ERROR;
- }
-
- return 0;
+ r = sdio_register_driver(&ar6k_driver);
+ if (r < 0)
+ return r;
+ return 0;
}
static int
diff --git a/drivers/staging/ath6kl/os/linux/ar6000_drv.c b/drivers/staging/ath6kl/os/linux/ar6000_drv.c
index f08f165f4d97..5f73182911ed 100644
--- a/drivers/staging/ath6kl/os/linux/ar6000_drv.c
+++ b/drivers/staging/ath6kl/os/linux/ar6000_drv.c
@@ -603,7 +603,7 @@ static int __init
ar6000_init_module(void)
{
static int probed = 0;
- int status;
+ int r;
OSDRV_CALLBACKS osdrvCallbacks;
a_module_debug_support_init();
@@ -636,7 +636,9 @@ ar6000_init_module(void)
osdrvCallbacks.devicePowerChangeHandler = ar6000_power_change_ev;
#endif
- ar6000_pm_init();
+ r = ar6000_pm_init();
+ if (r)
+ return r;
#ifdef DEBUG
/* Set the debug flags if specified at load time */
@@ -655,9 +657,9 @@ ar6000_init_module(void)
memset(&aptcTR, 0, sizeof(APTC_TRAFFIC_RECORD));
#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
- status = HIFInit(&osdrvCallbacks);
- if (status)
- return -ENODEV;
+ r = HIFInit(&osdrvCallbacks);
+ if (r)
+ return r;
return 0;
}
diff --git a/drivers/staging/ath6kl/os/linux/ar6000_pm.c b/drivers/staging/ath6kl/os/linux/ar6000_pm.c
index 1004f245d795..be401aa6dfcb 100644
--- a/drivers/staging/ath6kl/os/linux/ar6000_pm.c
+++ b/drivers/staging/ath6kl/os/linux/ar6000_pm.c
@@ -660,24 +660,28 @@ ar6000_set_wlan_state(struct ar6_softc *ar, AR6000_WLAN_STATE state)
return status;
}
-void ar6000_pm_init()
+int ar6000_pm_init()
{
- A_REGISTER_MODULE_DEBUG_INFO(pm);
+ int r;
+ A_REGISTER_MODULE_DEBUG_INFO(pm);
+
#ifdef CONFIG_PM
- /*
- * Register ar6000_pm_device into system.
- * We should also add platform_device into the first item of array
- * of devices[] in file arch/xxx/mach-xxx/board-xxxx.c
- */
- if (platform_driver_register(&ar6000_pm_device)) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000: fail to register the power control driver.\n"));
- }
+ /*
+ * Register ar6000_pm_device into system.
+ * We should also add platform_device into the first item of array
+ * of devices[] in file arch/xxx/mach-xxx/board-xxxx.c
+ */
+ r = platform_driver_register(&ar6000_pm_device);
+ if (r < 0)
+ return -ENODEV;
#endif /* CONFIG_PM */
+
+ return 0;
}
void ar6000_pm_exit()
{
#ifdef CONFIG_PM
- platform_driver_unregister(&ar6000_pm_device);
+ platform_driver_unregister(&ar6000_pm_device);
#endif /* CONFIG_PM */
}
diff --git a/drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h b/drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h
index dd6905c41b76..a8e8e36e60ad 100644
--- a/drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h
+++ b/drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h
@@ -178,7 +178,7 @@ int ar6000_power_change_ev(void *context, u32 config);
void ar6000_check_wow_status(struct ar6_softc *ar, struct sk_buff *skb, bool isEvent);
#endif
-void ar6000_pm_init(void);
+int ar6000_pm_init(void);
void ar6000_pm_exit(void);
#ifdef CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT