static int rtw_gspi_resume(struct spi_device *spi) { struct dvobj_priv *dvobj = spi_get_drvdata(spi); PADAPTER padapter = dvobj->if1; struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj); int ret = 0; DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid); if(pwrpriv->bInternalAutoSuspend ){ ret = rtw_resume_process(padapter); } else { #ifdef CONFIG_RESUME_IN_WORKQUEUE rtw_resume_in_workqueue(pwrpriv); #else if(rtw_is_earlysuspend_registered(pwrpriv)) { /* jeff: bypass resume here, do in late_resume */ rtw_set_do_late_resume(pwrpriv, _TRUE); } else { ret = rtw_resume_process(padapter); } #endif /* CONFIG_RESUME_IN_WORKQUEUE */ } DBG_871X("<======== %s return %d\n", __FUNCTION__, ret); return ret; }
static void rtw_early_suspend(android_early_suspend_t *h) { struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend); DBG_8192D("%s\n", __func__); rtw_set_do_late_resume(pwrpriv, false); }
void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv) { DBG_8192D("%s\n", __func__); rtw_set_do_late_resume(pwrpriv, false); if (pwrpriv->early_suspend.suspend) android_unregister_early_suspend(&pwrpriv->early_suspend); pwrpriv->early_suspend.suspend = NULL; pwrpriv->early_suspend.resume = NULL; }
static void rtw_late_resume(android_early_suspend_t *h) { struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend); struct rtw_adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv); DBG_8192D("%s\n", __func__); if (pwrpriv->do_late_resume) { rtw_set_do_late_resume(pwrpriv, false); rtw_resume_process(adapter); } }