|
@@ -1989,8 +1989,10 @@ void cnss_recovery_handler(struct cnss_plat_data *plat_priv)
|
|
|
msleep(POWER_RESET_MIN_DELAY_MS);
|
|
|
|
|
|
ret = cnss_bus_dev_powerup(plat_priv);
|
|
|
- if (ret)
|
|
|
+ if (ret) {
|
|
|
__pm_relax(plat_priv->recovery_ws);
|
|
|
+ clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state);
|
|
|
+ }
|
|
|
|
|
|
return;
|
|
|
}
|
|
@@ -2050,6 +2052,8 @@ static const char *cnss_recovery_reason_to_str(enum cnss_recovery_reason reason)
|
|
|
static int cnss_do_recovery(struct cnss_plat_data *plat_priv,
|
|
|
enum cnss_recovery_reason reason)
|
|
|
{
|
|
|
+ int ret;
|
|
|
+
|
|
|
plat_priv->recovery_count++;
|
|
|
|
|
|
if (plat_priv->device_id == QCA6174_DEVICE_ID)
|
|
@@ -2122,7 +2126,9 @@ self_recovery:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- cnss_bus_dev_powerup(plat_priv);
|
|
|
+ ret = cnss_bus_dev_powerup(plat_priv);
|
|
|
+ if (ret)
|
|
|
+ clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state);
|
|
|
|
|
|
return 0;
|
|
|
}
|