Message ID | 1475027104-17423-1-git-send-email-rajatja@google.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Kalle Valo |
Headers | show |
> From: Rajat Jain [mailto:rajatja@google.com] > Sent: Wednesday, September 28, 2016 7:15 AM > To: Amitkumar Karwar; Nishant Sarmukadam; Kalle Valo; linux- > wireless@vger.kernel.org; netdev@vger.kernel.org > Cc: Rajat Jain; Wei-Ning Huang; Brian Norris; Eric Caruso; > rajatxjain@gmail.com > Subject: [PATCH v2] mwifiex: report wakeup for wowlan > > Enable notifying wakeup source to the PM core in case of a wake on > wireless LAN event. > > Signed-off-by: Wei-Ning Huang <wnhuang@google.com> > Signed-off-by: Rajat Jain <rajatja@google.com> > Tested-by: Wei-Ning Huang <wnhuang@chromium.org> > Reviewed-by: Eric Caruso <ejcaruso@chromium.org> > --- > v2: Fix the commit log > > drivers/net/wireless/marvell/mwifiex/sdio.c | 8 ++++++++ > drivers/net/wireless/marvell/mwifiex/sdio.h | 1 + > 2 files changed, 9 insertions(+) > > diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c > b/drivers/net/wireless/marvell/mwifiex/sdio.c > index d3e1561..a5f63e4 100644 > --- a/drivers/net/wireless/marvell/mwifiex/sdio.c > +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c > @@ -89,6 +89,9 @@ static irqreturn_t mwifiex_wake_irq_wifi(int irq, void > *priv) > disable_irq_nosync(irq); > } > > + /* Notify PM core we are wakeup source */ > + pm_wakeup_event(cfg->dev, 0); > + > return IRQ_HANDLED; > } > > @@ -112,6 +115,7 @@ static int mwifiex_sdio_probe_of(struct device *dev, > struct sdio_mmc_card *card) > GFP_KERNEL); > cfg = card->plt_wake_cfg; > if (cfg && card->plt_of_node) { > + cfg->dev = dev; > cfg->irq_wifi = irq_of_parse_and_map(card->plt_of_node, 0); > if (!cfg->irq_wifi) { > dev_dbg(dev, > @@ -130,6 +134,10 @@ static int mwifiex_sdio_probe_of(struct device > *dev, struct sdio_mmc_card *card) > } > } > > + ret = device_init_wakeup(dev, true); > + if (ret) > + dev_err(dev, "fail to init wakeup for mwifiex"); > + > return 0; > } > > diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.h > b/drivers/net/wireless/marvell/mwifiex/sdio.h > index db837f1..07cdd23 100644 > --- a/drivers/net/wireless/marvell/mwifiex/sdio.h > +++ b/drivers/net/wireless/marvell/mwifiex/sdio.h > @@ -155,6 +155,7 @@ > } while (0) > > struct mwifiex_plt_wake_cfg { > + struct device *dev; > int irq_wifi; > bool wake_by_wifi; > }; > -- > 2.8.0.rc3.226.g39d4020 Acked-by: Amitkumar Karwar <akarwar@marvell.com> Regards, Amitkumar
Rajat Jain <rajatja@google.com> wrote: > Enable notifying wakeup source to the PM core in case of > a wake on wireless LAN event. > > Signed-off-by: Wei-Ning Huang <wnhuang@google.com> > Signed-off-by: Rajat Jain <rajatja@google.com> > Tested-by: Wei-Ning Huang <wnhuang@chromium.org> > Reviewed-by: Eric Caruso <ejcaruso@chromium.org> > Acked-by: Amitkumar Karwar <akarwar@marvell.com> The commit log doesn't give any background info. Does this fix a bug or why is it needed? Patch set to Changes Requested.
Hello Kalie, On Mon, Oct 3, 2016 at 6:04 AM, Kalle Valo <kvalo@codeaurora.org> wrote: > Rajat Jain <rajatja@google.com> wrote: >> Enable notifying wakeup source to the PM core in case of >> a wake on wireless LAN event. >> >> Signed-off-by: Wei-Ning Huang <wnhuang@google.com> >> Signed-off-by: Rajat Jain <rajatja@google.com> >> Tested-by: Wei-Ning Huang <wnhuang@chromium.org> >> Reviewed-by: Eric Caruso <ejcaruso@chromium.org> >> Acked-by: Amitkumar Karwar <akarwar@marvell.com> > > The commit log doesn't give any background info. Does this fix a bug or > why is it needed? Some of chromeos' features (called "darkresume" in chromeos terminology) use and track the wake up sources using the wakeup attributes in sysfs. Since the wireless device can wake up the host, hence we wanted to add it as a wakeup source to the system, and in the case of an actual wakeup event, trigger to the PM core that it was indeed caused by the device and it increments the different counters etc. In the absence of this patch, the feature wasn't working very well (as it was apparently confused about the cause of wake up). Thanks, Rajat
Rajat Jain <rajatja@google.com> writes: > Hello Kalie, > > On Mon, Oct 3, 2016 at 6:04 AM, Kalle Valo <kvalo@codeaurora.org> wrote: >> Rajat Jain <rajatja@google.com> wrote: >>> Enable notifying wakeup source to the PM core in case of >>> a wake on wireless LAN event. >>> >>> Signed-off-by: Wei-Ning Huang <wnhuang@google.com> >>> Signed-off-by: Rajat Jain <rajatja@google.com> >>> Tested-by: Wei-Ning Huang <wnhuang@chromium.org> >>> Reviewed-by: Eric Caruso <ejcaruso@chromium.org> >>> Acked-by: Amitkumar Karwar <akarwar@marvell.com> >> >> The commit log doesn't give any background info. Does this fix a bug or >> why is it needed? > > Some of chromeos' features (called "darkresume" in chromeos > terminology) use and track the wake up sources using the wakeup > attributes in sysfs. Since the wireless device can wake up the host, > hence we wanted to add it as a wakeup source to the system, and in the > case of an actual wakeup event, trigger to the PM core that it was > indeed caused by the device and it increments the different counters > etc. In the absence of this patch, the feature wasn't working very > well (as it was apparently confused about the cause of wake up). Thanks, makes sense. Please add that to the commit and send v3.
diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c index d3e1561..a5f63e4 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.c +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c @@ -89,6 +89,9 @@ static irqreturn_t mwifiex_wake_irq_wifi(int irq, void *priv) disable_irq_nosync(irq); } + /* Notify PM core we are wakeup source */ + pm_wakeup_event(cfg->dev, 0); + return IRQ_HANDLED; } @@ -112,6 +115,7 @@ static int mwifiex_sdio_probe_of(struct device *dev, struct sdio_mmc_card *card) GFP_KERNEL); cfg = card->plt_wake_cfg; if (cfg && card->plt_of_node) { + cfg->dev = dev; cfg->irq_wifi = irq_of_parse_and_map(card->plt_of_node, 0); if (!cfg->irq_wifi) { dev_dbg(dev, @@ -130,6 +134,10 @@ static int mwifiex_sdio_probe_of(struct device *dev, struct sdio_mmc_card *card) } } + ret = device_init_wakeup(dev, true); + if (ret) + dev_err(dev, "fail to init wakeup for mwifiex"); + return 0; } diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.h b/drivers/net/wireless/marvell/mwifiex/sdio.h index db837f1..07cdd23 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.h +++ b/drivers/net/wireless/marvell/mwifiex/sdio.h @@ -155,6 +155,7 @@ } while (0) struct mwifiex_plt_wake_cfg { + struct device *dev; int irq_wifi; bool wake_by_wifi; };