rdev->suspend_at = ktime_get_boottime_seconds();
rtnl_lock();
+ if (!rdev->wiphy.registered)
+ goto out_unlock_rtnl;
+
wiphy_lock(&rdev->wiphy);
- if (rdev->wiphy.registered) {
- if (!rdev->wiphy.wowlan_config) {
- cfg80211_leave_all(rdev);
- cfg80211_process_rdev_events(rdev);
- }
+ if (rdev->wiphy.wowlan_config) {
cfg80211_process_wiphy_works(rdev, NULL);
if (rdev->ops->suspend)
ret = rdev_suspend(rdev, rdev->wiphy.wowlan_config);
- if (ret == 1) {
- /* Driver refuse to configure wowlan */
- cfg80211_leave_all(rdev);
- cfg80211_process_rdev_events(rdev);
- cfg80211_process_wiphy_works(rdev, NULL);
- ret = rdev_suspend(rdev, NULL);
- }
- if (ret == 0)
- rdev->suspended = true;
+ if (ret <= 0)
+ goto out_unlock_wiphy;
}
+
+ /* Driver refused to configure wowlan (ret = 1) or no wowlan */
+
+ cfg80211_leave_all(rdev);
+ cfg80211_process_rdev_events(rdev);
+ cfg80211_process_wiphy_works(rdev, NULL);
+ if (rdev->ops->suspend)
+ ret = rdev_suspend(rdev, NULL);
+
+out_unlock_wiphy:
wiphy_unlock(&rdev->wiphy);
+out_unlock_rtnl:
+ if (ret == 0)
+ rdev->suspended = true;
rtnl_unlock();
return ret;