Return-path: Received: from mga01.intel.com ([192.55.52.88]:29001 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754400AbbBOCkx (ORCPT ); Sat, 14 Feb 2015 21:40:53 -0500 Message-ID: <54E0072D.3020802@linux.intel.com> (sfid-20150215_034057_312004_92B1ED92) Date: Sun, 15 Feb 2015 10:40:45 +0800 From: "Fu, Zhonghui" MIME-Version: 1.0 To: Kalle Valo , brudley@broadcom.com, Arend van Spriel , Franky Lin , meuleman@broadcom.com, linville@tuxdriver.com, pieterpg@broadcom.com, hdegoede@redhat.com, wens@csie.org, linux-wireless@vger.kernel.org, brcm80211-dev-list@broadcom.com, netdev@vger.kernel.org, "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v3] brcmfmac: avoid duplicated suspend/resume operation References: <54DC1D7D.5050407@linux.intel.com> In-Reply-To: <54DC1D7D.5050407@linux.intel.com> Content-Type: text/plain; charset=utf-8 Sender: linux-wireless-owner@vger.kernel.org List-ID: Any comments to this patch? Can it be accepted? Thanks, Zhonghui On 2015/2/12 11:26, Fu, Zhonghui wrote: > From a05d35ab334c20970c236fb971dae88810078c88 Mon Sep 17 00:00:00 2001 > From: Fu Zhonghui > Date: Thu, 12 Feb 2015 10:49:35 +0800 > Subject: [PATCH v3] brcmfmac: avoid duplicated suspend/resume operation > > WiFi chip has 2 SDIO functions, and PM core will trigger > twice suspend/resume operations for one WiFi chip to do > the same things. This patch avoid this case. > > Acked-by: Arend van Spriel > Signed-off-by: Fu Zhonghui > --- > Changes in v3: > - Rebase to wireless-drivers-next/master branch > > drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c > index 7944224..b8832a7 100644 > --- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c > +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c > @@ -1117,9 +1117,13 @@ static int brcmf_ops_sdio_suspend(struct device *dev) > struct brcmf_bus *bus_if; > struct brcmf_sdio_dev *sdiodev; > mmc_pm_flag_t sdio_flags; > + struct sdio_func *func = dev_to_sdio_func(dev); > > brcmf_dbg(SDIO, "Enter\n"); > > + if (func->num == 2) > + return 0; > + > bus_if = dev_get_drvdata(dev); > sdiodev = bus_if->bus_priv.sdio; > > @@ -1148,9 +1152,16 @@ static int brcmf_ops_sdio_suspend(struct device *dev) > static int brcmf_ops_sdio_resume(struct device *dev) > { > struct brcmf_bus *bus_if = dev_get_drvdata(dev); > - struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; > + struct brcmf_sdio_dev *sdiodev; > + struct sdio_func *func = dev_to_sdio_func(dev); > > brcmf_dbg(SDIO, "Enter\n"); > + > + if (func->num == 2) > + return 0; > + > + sdiodev = bus_if->bus_priv.sdio; > + > if (sdiodev->pdata && sdiodev->pdata->oob_irq_supported) > disable_irq_wake(sdiodev->pdata->oob_irq_nr); > brcmf_sdio_wd_timer(sdiodev->bus, BRCMF_WD_POLL_MS); > -- 1.9.1 >