Commit c43fe907 authored by Eliad Peller's avatar Eliad Peller Committed by Emmanuel Grumbach

iwlwifi: return error if d0i3 was aborted

Allow the transport layer to return an error upon suspend.
Signed-off-by: default avatarEliad Peller <eliadx.peller@intel.com>
Reviewed-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 2d42801b
...@@ -598,7 +598,7 @@ struct iwl_trans_ops { ...@@ -598,7 +598,7 @@ struct iwl_trans_ops {
u32 value); u32 value);
void (*ref)(struct iwl_trans *trans); void (*ref)(struct iwl_trans *trans);
void (*unref)(struct iwl_trans *trans); void (*unref)(struct iwl_trans *trans);
void (*suspend)(struct iwl_trans *trans); int (*suspend)(struct iwl_trans *trans);
void (*resume)(struct iwl_trans *trans); void (*resume)(struct iwl_trans *trans);
struct iwl_trans_dump_data *(*dump_data)(struct iwl_trans *trans); struct iwl_trans_dump_data *(*dump_data)(struct iwl_trans *trans);
...@@ -807,10 +807,12 @@ static inline void iwl_trans_unref(struct iwl_trans *trans) ...@@ -807,10 +807,12 @@ static inline void iwl_trans_unref(struct iwl_trans *trans)
trans->ops->unref(trans); trans->ops->unref(trans);
} }
static inline void iwl_trans_suspend(struct iwl_trans *trans) static inline int iwl_trans_suspend(struct iwl_trans *trans)
{ {
if (trans->ops->suspend) if (!trans->ops->suspend)
trans->ops->suspend(trans); return 0;
return trans->ops->suspend(trans);
} }
static inline void iwl_trans_resume(struct iwl_trans *trans) static inline void iwl_trans_resume(struct iwl_trans *trans)
......
...@@ -1168,13 +1168,17 @@ static int iwl_mvm_enter_d0i3_sync(struct iwl_mvm *mvm) ...@@ -1168,13 +1168,17 @@ static int iwl_mvm_enter_d0i3_sync(struct iwl_mvm *mvm)
int iwl_mvm_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) int iwl_mvm_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
{ {
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
int ret;
ret = iwl_trans_suspend(mvm->trans);
if (ret)
return ret;
iwl_trans_suspend(mvm->trans);
mvm->trans->wowlan_d0i3 = wowlan->any; mvm->trans->wowlan_d0i3 = wowlan->any;
if (mvm->trans->wowlan_d0i3) { if (mvm->trans->wowlan_d0i3) {
/* 'any' trigger means d0i3 usage */ /* 'any' trigger means d0i3 usage */
if (mvm->trans->d0i3_mode == IWL_D0I3_MODE_ON_SUSPEND) { if (mvm->trans->d0i3_mode == IWL_D0I3_MODE_ON_SUSPEND) {
int ret = iwl_mvm_enter_d0i3_sync(mvm); ret = iwl_mvm_enter_d0i3_sync(mvm);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment