diff options
| author | Yue Ma <yuem@codeaurora.org> | 2017-10-11 11:25:17 -0700 |
|---|---|---|
| committer | Yue Ma <yuem@codeaurora.org> | 2017-10-11 17:10:57 -0700 |
| commit | ded65f85110c8911a2eefa08cb75213b42616bb9 (patch) | |
| tree | 7cceda82db9f6266d214da9518052835a9fc5a76 | |
| parent | 34f1071c18f56ceae77aa761578c639d59e67265 (diff) | |
cnss2: Add multiple recoveries support without WLAN host driver
In order to support multiple recoveries without WLAN host driver,
clear recovery flag properly for debug state and also move WLAN
host driver ops check to proper place during powerup and shutdown.
Change-Id: I8cb17a495f6106bd07fe29dba282d4168c9f7411
CRs-fixed: 2124999
Signed-off-by: Yue Ma <yuem@codeaurora.org>
| -rw-r--r-- | drivers/net/wireless/cnss2/main.c | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index ef46a0aadcc5..80e2c8d7c86a 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -564,9 +564,15 @@ out: static int cnss_driver_call_probe(struct cnss_plat_data *plat_priv) { - int ret; + int ret = 0; struct cnss_pci_data *pci_priv = plat_priv->bus_priv; + if (test_bit(CNSS_DRIVER_DEBUG, &plat_priv->driver_state)) { + clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state); + cnss_pr_dbg("Skip driver probe\n"); + goto out; + } + if (!plat_priv->driver_ops) { cnss_pr_err("driver_ops is NULL\n"); ret = -EINVAL; @@ -604,6 +610,13 @@ static int cnss_driver_call_remove(struct cnss_plat_data *plat_priv) { struct cnss_pci_data *pci_priv = plat_priv->bus_priv; + if (test_bit(CNSS_COLD_BOOT_CAL, &plat_priv->driver_state) || + test_bit(CNSS_FW_BOOT_RECOVERY, &plat_priv->driver_state) || + test_bit(CNSS_DRIVER_DEBUG, &plat_priv->driver_state)) { + cnss_pr_dbg("Skip driver remove\n"); + return 0; + } + if (!plat_priv->driver_ops) { cnss_pr_err("driver_ops is NULL\n"); return -EINVAL; @@ -997,11 +1010,6 @@ static int cnss_qca6174_powerup(struct cnss_plat_data *plat_priv) return -ENODEV; } - if (!plat_priv->driver_ops) { - cnss_pr_err("driver_ops is NULL!\n"); - return -EINVAL; - } - ret = cnss_power_on_device(plat_priv); if (ret) { cnss_pr_err("Failed to power on device, err = %d\n", ret); @@ -1035,15 +1043,8 @@ static int cnss_qca6174_shutdown(struct cnss_plat_data *plat_priv) if (!pci_priv) return -ENODEV; - if (test_bit(CNSS_DRIVER_DEBUG, &plat_priv->driver_state)) - goto skip_driver_remove; - - if (!plat_priv->driver_ops) - return -EINVAL; - cnss_driver_call_remove(plat_priv); -skip_driver_remove: cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_NONE); cnss_pci_set_monitor_wake_intr(pci_priv, false); cnss_pci_set_auto_suspended(pci_priv, 0); @@ -1140,17 +1141,8 @@ static int cnss_qca6290_shutdown(struct cnss_plat_data *plat_priv) if (!pci_priv) return -ENODEV; - if (test_bit(CNSS_COLD_BOOT_CAL, &plat_priv->driver_state) || - test_bit(CNSS_FW_BOOT_RECOVERY, &plat_priv->driver_state) || - test_bit(CNSS_DRIVER_DEBUG, &plat_priv->driver_state)) - goto skip_driver_remove; - - if (!plat_priv->driver_ops) - return -EINVAL; - cnss_driver_call_remove(plat_priv); -skip_driver_remove: cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_NONE); cnss_pci_set_monitor_wake_intr(pci_priv, false); cnss_pci_set_auto_suspended(pci_priv, 0); |
