From patchwork Wed Oct 25 13:44:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amitkumar Karwar X-Patchwork-Id: 10026751 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id F3D1760375 for ; Wed, 25 Oct 2017 13:51:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E064A27968 for ; Wed, 25 Oct 2017 13:51:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D25F028B95; Wed, 25 Oct 2017 13:51:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0D3727968 for ; Wed, 25 Oct 2017 13:51:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751898AbdJYNvc (ORCPT ); Wed, 25 Oct 2017 09:51:32 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:44145 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751719AbdJYNv1 (ORCPT ); Wed, 25 Oct 2017 09:51:27 -0400 Received: by mail-pf0-f196.google.com with SMTP id x7so42179pfa.1 for ; Wed, 25 Oct 2017 06:51:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=suoLC4LoT89D7vWdtpngyc7IOAMZ1z2RrHkuFF2DkKY=; b=LrIf3NXN2rWWg4kkJ7p0OFSLLNIpZGnLbQY1oDebNhcuDPsyIdIbv07QgYVy2rNvW3 mmPxX010UTs00xrmKywdn8kQLlGIzfkos4q7XxRk4Jpt46uHz1WSXOcaEdwxMjzcZhYP ozZDGSJlidAVX4l/hgOK9S1sWJXrZgtPe2Mor/HOMJ3IIN7SuBaaVvS0T+Jp6gSpuQNi 9mpq9LGAqYqUyJI2EXNEavkj/aNziQv7LefenmtOZz3YBewKYK1hXr+TMqaQ25bNw1kw u1L/xA/uSvw3GALsfO2EWYl5ggO6NOoF1zH+SFmnNFZRDs0iM5N7BoP2dv21sJGrFi/z YEmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=suoLC4LoT89D7vWdtpngyc7IOAMZ1z2RrHkuFF2DkKY=; b=g2FW40WB5NndWgV8wr/44Y+zsG0yBqaCMFwE0rVXbjuBhuQODVExg8dA8FDVXnvP3K XrzUaayHGtOv10hIT+BIeVC3SB/oJvRFw4Xl8Taw5nSru8AJDfojiYAxdJNa6Oi7WvfS pTa3XydFpi4FFtR89GjUSVEyYaTFfifgrRGHX5tLL5QDgpn3TvalzsZeGRW88uhz4Wge tKzYDCehMMV8H7rQcV813wwV9lmAm/99tYFpqEJ+TAS8m+OroyEr0GDUGaYXEeXOL3eR o1zB8hAD7n9vaAINt1l8hQbu5c0ovNl4Tcjb8ySxyyGdHDduzVz8VD1GpuMHvs8Zq8km XGQA== X-Gm-Message-State: AMCzsaXFmJdfn2fVZq9orehjqzyexQg9sx3IOpWhPvgSbEXbWfim5ARj k7SMTHd3y7ehOwmUMqQ91aI= X-Google-Smtp-Source: ABhQp+Rqv3+/abYE+wKpGuTPfu3QG/OXeERkbbVJZDoj4eemxgg+d7Kg3nhVrQR60mGunagr7IegtQ== X-Received: by 10.99.120.2 with SMTP id t2mr2124456pgc.333.1508939486688; Wed, 25 Oct 2017 06:51:26 -0700 (PDT) Received: from cpu185.redpinesignals.com ([203.196.161.90]) by smtp.gmail.com with ESMTPSA id d190sm4791338pgc.53.2017.10.25.06.51.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 25 Oct 2017 06:51:26 -0700 (PDT) From: Amitkumar Karwar To: Kalle Valo Cc: linux-wireless@vger.kernel.org, Amitkumar Karwar , Prameela Rani Garnepudi , Karun Eagalapati Subject: [v2 3/3] rsi: sdio: Add WOWLAN support for S5 shutdown state Date: Wed, 25 Oct 2017 19:14:50 +0530 Message-Id: <1508939090-16282-1-git-send-email-amitkarwar@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Karun Eagalapati Unlike other power states, WoWLAN configuration does not come from mac80211 for shutdown. Hence configuring the WoWLAN from shut down callback it self. Remaining steps of disabling SDIO interrupts, setting 'MMC_PM_KEEP_POWER' flag are same as other power states. Signed-off-by: Karun Eagalapati Signed-off-by: Amitkumar Karwar --- drivers/net/wireless/rsi/rsi_91x_mac80211.c | 1 + drivers/net/wireless/rsi/rsi_91x_sdio.c | 31 +++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c b/drivers/net/wireless/rsi/rsi_91x_mac80211.c index 8be24b1..879e844 100644 --- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c +++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c @@ -1822,6 +1822,7 @@ int rsi_config_wowlan(struct rsi_hw *adapter, struct cfg80211_wowlan *wowlan) return 0; } +EXPORT_SYMBOL(rsi_config_wowlan); #ifdef CONFIG_PM static int rsi_mac80211_suspend(struct ieee80211_hw *hw, diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c index 3f683d8..3288fb6 100644 --- a/drivers/net/wireless/rsi/rsi_91x_sdio.c +++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c @@ -1218,12 +1218,11 @@ static int rsi_freeze(struct device *dev) common = adapter->priv; sdev = (struct rsi_91x_sdiodev *)adapter->rsi_dev; -#ifdef CONFIG_RSI_WOW if ((common->wow_flags & RSI_WOW_ENABLED) && (common->wow_flags & RSI_WOW_NO_CONNECTION)) rsi_dbg(ERR_ZONE, "##### Device can not wake up through WLAN\n"); -#endif + ret = rsi_sdio_disable_interrupts(pfunction); if (sdev->write_fail) @@ -1257,6 +1256,31 @@ static int rsi_thaw(struct device *dev) return 0; } +static void rsi_shutdown(struct device *dev) +{ + struct sdio_func *pfunction = dev_to_sdio_func(dev); + struct rsi_hw *adapter = sdio_get_drvdata(pfunction); + struct rsi_91x_sdiodev *sdev = + (struct rsi_91x_sdiodev *)adapter->rsi_dev; + struct ieee80211_hw *hw = adapter->hw; + struct cfg80211_wowlan *wowlan = hw->wiphy->wowlan_config; + + rsi_dbg(ERR_ZONE, "SDIO Bus shutdown =====>\n"); + + if (rsi_config_wowlan(adapter, wowlan)) + rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n"); + + rsi_sdio_disable_interrupts(sdev->pfunction); + + if (sdev->write_fail) + rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n"); + + if (rsi_set_sdio_pm_caps(adapter)) + rsi_dbg(INFO_ZONE, "Setting power management caps failed\n"); + + rsi_dbg(INFO_ZONE, "***** RSI module shut down *****\n"); +} + int rsi_sdio_reinit_device(struct rsi_hw *adapter) { struct rsi_91x_sdiodev *sdev = adapter->rsi_dev; @@ -1297,9 +1321,7 @@ static int rsi_restore(struct device *dev) adapter->sc_nvifs = 0; ieee80211_restart_hw(adapter->hw); -#ifdef CONFIG_RSI_WOW common->wow_flags = 0; -#endif common->iface_down = false; rsi_dbg(INFO_ZONE, "RSI module restored\n"); @@ -1331,6 +1353,7 @@ static struct sdio_driver rsi_driver = { #ifdef CONFIG_PM .drv = { .pm = &rsi_pm_ops, + .shutdown = rsi_shutdown, } #endif };